【Unity】MaterialのPropertyIDについて
UnityのMaterialはEmissionの値やMainTextureのデータなど、様々な値を外部からセットできます。
その時に使うのが、material.Set〇〇みたいな関数です。
・SetInt
・SetFloat
・SetColor
・SetTexture
などなど
例えば、色を変えたいとなった時、
material.SetColor("_Color",new Color(1,1,1));
みたいに書くと思います。
実は上記のようなSet〇〇の第1引数はintでも可能なんです。
で、引数をstringにしていると、それを内部的にintに変換するようで、要はintで指定したほうが処理が早いみたいなんですね。
じゃあ、自分が設定したいPropertyNameのintはどう取得するの?
こちらです。
int propertyID = Shader.PropertyToID("_Color"); //取得したいPropertyName
一回記録しておくだけで良いので、Start関数などで代入しておいて、それを使い回せばおk!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PropertyIdTest: MonoBehaviour {
int colorID;
int emissionID;
void Start(){
colorID = Shader.PropertyToID("_Color");
emissionID = Shader.PropertyToID("_Emission");
}
void SetMaterialColor(Material mat, Color col){
mat.SetColor(colorID,col);
}
void SetMaterialEmission(Material mat, Color col){
mat.SetColor(emissionID ,col);
}
}
書いてる途中で、いい記事を見つけたので、こちらを参考にしたほうがイイかもです。。。
以上。