【Unity】マスク素材用のマテリアルを作成してアサインするスクリプト

f:id:min0124:20160828115925p:plain

「マテリアル 切り替え」で調べると、変更したいオブジェクトにスクリプトを付けてマテリアルも登録し、そこからアサインというやり方が出てくるのですが、いちいち手動で仕込むのは面倒です。

そこで指定したオブジェクトに対してマテリアルをインスタンス、シェーダー選択、カラーも指定後アサインというスクリプトを書いてみました。

スクリプトをつけるスクリプトをかけばよいのかもしれませんが、要するに将来的にMayaのレンダーレイヤーみたいな事したいなということで・・・。

f:id:min0124:20160928232651p:plain

指定した複数オブジェクトにマスク用マテリアルをアサイン

アサインしたいオブジェクトに「Mask」というTagを付けておく

スクリプトは適当なGameObjectにつけておけばOK

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {

    void Start() {
        GameObject[] obstacles = GameObject.FindGameObjectsWithTag ("Mask");

        foreach(GameObject obs in obstacles){
        Renderer rend = obs.GetComponent<Renderer>();
        //シェーダー作成・アサイン
        rend.material = new Material(Shader.Find("Unlit/Color"));
        //カラーを変更
        rend.material.color = Color.red;
        }
    }
}

Colorについて

RGB、CMYKの色はそれぞれコマンドが用意されています。

Unity - スクリプトリファレンス: Color

自分で色を指定したい時は

rend.material.color = new Color (1f, 0f, 0f);

※ちなみにマスク素材と言っているのはRGB/CMYKなどの色面をAE等で部分的に抽出して、調整するための素材のことです。

単体のオブジェクト名を入力して、マスク用マテリアルをアサイン

一応メモとして

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {

       //オブジェクト名入力
       public string objname = "Sphere";

       void Start() {
              GameObject obj = GameObject.Find(objname);
              Renderer rend = obj.GetComponent<Renderer>();
              //シェーダー作成・アサイン
               rend.material = new Material (Shader.Find( "Unlit/Color"));
              //カラーを変更
              rend.material.color = Color.red;
       }
}