はらけんログ

unity触ったりバイクに乗ったり

【Unity】MaterialのPropertyIDについて

UnityのMaterialはEmissionの値やMainTextureのデータなど、様々な値を外部からセットできます。

その時に使うのが、material.Set〇〇みたいな関数です。

SetInt

SetFloat

SetColor

SetTexture

などなど

 

例えば、色を変えたいとなった時、

material.SetColor("_Color",new Color(1,1,1));

 みたいに書くと思います。

 

実は上記のようなSet〇〇の第1引数はintでも可能なんです。

docs.unity3d.com

で、引数を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);

  }

}

 

 

書いてる途中で、いい記事を見つけたので、こちらを参考にしたほうがイイかもです。。。

 

 

www.shibuya24.info

以上。