2020/11/09
【Unity】iTween実行時のエラー「Material doesn’t have a color property ‘_Color’」について
time 2016/02/07
folder Unity
※本記事投稿時に使用したiTweenのバージョンは2.0.5です。
というわけで、iTweenでColor系やFade系の関数を使った際、
「Material doesn’t have a color property ‘_Color’」
といったエラーが出ることがあります。
意味はそのままで、「マテリアルに_Colorというプロパティがない」といった感じでしょうか。
その「Color_」ですが、Unity5標準のシェーダーには大抵入っている基本的なプロパティです。
iTween実行時もデフォルトでは_Colorを変化させるようです。
ただし、パーティクル系のシェーダーなどは「_TintColor」となっていたりします。
故に「実行対象のオブジェクトの子にパーティクルがある」といったケースで発生しやすいエラーです。
対処法
エラーが出ても他のマテリアルの変化は正常に行われるわけですが、やはりエラーは嫌なものです。
ということで、iTween.csの該当部分を修正してみました!
バージョン2.0.5版でいくと3338行目付近になります。
for (int i = 0; i < GetComponent<Renderer>().materials.Length; i++) { if (gameObject.GetComponent<Renderer>().materials[i].HasProperty(namedcolorvalue.ToString())) { colors[i,0]=GetComponent<Renderer>().materials[i].GetColor(namedcolorvalue.ToString()); colors[i,1]=GetComponent<Renderer>().materials[i].GetColor(namedcolorvalue.ToString()); } }
for文でマテリアルの数だけGetColorを実行しています。
その後のGetColor()でエラーが出ているため、その手前でMaterial.HasPropety()で該当のプロパティ(この場合は_Color)があるかをチェックします。
これでプロパティが存在しない場合でもエラーが出なくなります。
もし自作シェーダーなどでプロパティ名が統一されている場合、iTween実行時のパラメータ「NamedColorValue」を指定する手もあります。
これがデフォルトでは_Colorになっているので、文字列でプロパティ名を指定すればOKです。
まとめ
そんなわけで、超さくっとiTweenのエラーについてのお話でした!
その場で直しても時間が経つと忘れてしまったりするので、面倒でも記事にして残していきたいです。
そもそもiTweenのソースって勝手に変えていいものか分かっていなかったりします。
オープンソースだし大丈夫だと思われますが・・・。