Unity マテリアルの色と透明度を変える方法

ゲームオブジェクトの見た目を変えるのは「Renderer」 

Unity のエディター上では、マテリアルをゲームオブジェクトに直接ドラッグアンドドロップで反映させることができます。

しかし、マテリアルというものはあくまで独立したクラス、部品であり、ゲームオブジェクトに直接描画する機能は持っていません。

レンダラーというクラス、部品がマテリアルの情報を処理してゲームオブジェクトに描画しています。

下の図では回転を加えてしまっていますが、注目してほしいのは画面をクリック、またはタッチしたときに色が変わると同時に透明度が変化していくという点です。

(残像が出てしまっていますが、ご了承ください。)

コードは下記の通りです。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ChangeColor : MonoBehaviour {

    Renderer render;
    
    float d = 1.0f;
    float a = 1.0f;

    // Use this for initialization
    void Start () {
        render = GetComponent();
        render.material.color = new Color(1.0f, 0.0f, 0.0f, a);
     }
	
	// Update is called once per frame
	void Update () {
        transform.Rotate(new Vector3(1.0f, 1.0f, 0f));

        bool down = Input.GetMouseButton(0);
                

        if (down == true)
        {
            
            if (a <= 0)
            {
                d = 0.005f;
            }
            if (a >= 1)
            {
                d = -0.005f;
            }
                        
            a += d;
                        
            render.material.color = new Color(0.0f, 0.0f, 1.0f, a);
                      
        }

        
        bool up = Input.GetMouseButtonUp(0);

        if (up == true)
        {
            render.material.color = new Color(1.0f, 0.0f, 0.0f);
        }
        
	}
}

 

一番最初の「Renderer render;」で、ゲームオブジェクトのレンダーコンポーネントを取得するための変数を定義しておきます。

そして、デフォルトの状態で赤いマテリアルを「render.material.color = new Color(1.0f, 0.0f, 0.0f, d);」で設定しています。

「float d = 1.0f;」は、透明度を変化させるための変数で初期値は特に意味を持ちません。

「float a = 1.0f;」は、実際にマテリアルに反映されるアルファ値(透明度)の判定をする事と、実際に反映させる値を表します。

 

ここで一つ大切なことがあります。

マテリアルには「レンダリングモード」というものがあり、標準の設定では透明にするための機能がありません。

この設定を変更するためには目的のゲームオブジェクトにアタッチしているマテリアルを選択し、「Rendering Mode」という項目を変更する必要があります。

デフォルトでは「Opaque」となっていますが、これを「Transparent」にします。

これで、透明な描画をすることが可能となります。

 

 

 

コメント

タイトルとURLをコピーしました