Material XXX doesn’t have YYY propertyという警告の原因と消す方法

実行時に以下の警告が出ました。

Material XXX doesn’t have YYY property
UnityEngine.UI.ScrollRect:LateUpdate()

まあ警告なので放っといても良かったのですが、警告は消さなきゃ気が済まないタイプなので。。。

原因

UIの一部Imageにデフォルトじゃないマテリアル(今回はアウトラインを表示するマテリアル)を適用しているのですが、そのマテリアルが原因のようです。
警告文の「XXX」にその原因のマテリアル名が入ります。

このマテリアルに、「YYY」というプロパティが存在しないよ!と言われているみたい。

警告を消す方法

まず、デフォルトのUIマテリアルのプロパティを確認します。

デフォルトのUIマテリアルは「Default UI Material」という名前のマテリアルです。
これが適用されているオブジェクトを見つけ(見つからない場合は新しくImageを作成すればデフォルトで適用されていると思います)、マテリアル名のところで右クリック→Select Shaderを選択。

インスペクタにマテリアルの詳細が表示されるので、Compile and show codeをクリック。

「Compiled-UI-Default.shader」がエディタで開くので、その最初の部分にあるPropertiesを確認。


Properties {
[PerRendererData]  _MainTex ("Sprite Texture", 2D) = "white" { }
 _Color ("Tint", Color) = (1.000000,1.000000,1.000000,1.000000)
 _StencilComp ("Stencil Comparison", Float) = 8.000000
 _Stencil ("Stencil ID", Float) = 0.000000
 _StencilOp ("Stencil Operation", Float) = 0.000000
 _StencilWriteMask ("Stencil Write Mask", Float) = 255.000000
 _StencilReadMask ("Stencil Read Mask", Float) = 255.000000
 _ColorMask ("Color Mask", Float) = 15.000000
[Toggle(UNITY_UI_ALPHACLIP)]  _UseUIAlphaClip ("Use Alpha Clip", Float) = 0.000000
}

このようなコードが記述されていると思います。
これらのプロパティが存在しないと警告が表示されてしまう様子。

そのため、警告の出るシェーダーも同様にエディタで開き、上記プロパティの中で存在しないものをコピペします。

これで保存すれば実行しても警告が出ませんでした!

コメント