[Unity 3D] Shader Graphを使ったマテリアルのSurface Inputsの値をスクリプトから変更する方法。(URP環境)

(2024/10/02)
[Unity 3D] Shader Graphを使ったマテリアルのSurface Inputsの値をスクリプトから変更する方法。(URP環境)

開発環境
  • Unityのバージョン:2022.3.32f1
  • 前提

    仮に下の画像のようなShader GraphとMaterialを想定します。

    [Unity 3D] Shader Graphを使ったマテリアルのSurface Inputsの値をスクリプトから変更できないときの対処法。

    [Unity 3D] Shader Graphを使ったマテリアルのSurface Inputsの値をスクリプトから変更できないときの対処法。

    このときに、MaterialのInspectorにあるSurface InputsのFloatの値をスクリプトから変更する場合を考えます。

    Nameではなく、Referenceの値を使う

    Materialのfloat型のプロパティを変更するにはSetFloat()を使いますが、
    このときにInspectorに表示されているプロパティ名ではなく、 下の画像のように
    Shader Graphのタブに表示されているReferenceの値を使います。

    [Unity 3D] Shader Graphを使ったマテリアルのSurface Inputsの値をスクリプトから変更できないときの対処法。

    下のコードがマテリアルのSurface Inputsの値を変更するコードです。
    実行すると、Floatの値が1.0に変わります。

    using UnityEngine;
    public class Sample : MonoBehaviour
    {
      public Material material; // 対象のマテリアル
    
      private string propertyName = "_Float"; // 変更させるShader Graph のプロパティ名
    
      private float propertyValue = 1.0f; // 変更後の値
    
      void Start()
      {
          material.SetFloat(propertyName, propertyValue);
      }
    }
    
     
    

    ポイント

    ポイントは、SetFloat()メソッドを使用する際、Inspectorに表示されているプロパティ名ではなく、Shader GraphのReferenceに表示されているプロパティ名を使用することです。