MRTK Standard Shader で ArgumentException: Could not find MaterialProperty: '_InstancedColor' が発生した場合の対処法


はじめに

MRTK ( Mixed Reality Toolkit for Unity ) を使用して開発をしていたところ、Unity Editor 上で Shader のプロパティが編集ができない事象が発生しました。以下、画像のように Unity Editor の Inspector 上で Shader プロパティを展開しようとしても何も表示されない状況です。

開発環境

  • Unity 2019.4.11f1
  • MRTK v2.5.1 ( Installed By Mixed Reality Feature Tool )

エラー内容

コンソールタブを見てみると、以下エラーが発生していることが判明しました。

ArgumentException: Could not find MaterialProperty: '_InstancedColor'

MRTK の GitHub Issue を検索してみると、MRTK Standard Shader の instanced color property は _Color で _InstancedColor ではないので、エラーが発生しているようです。

解決策

MRTK Code 内でエラーが発生している場合は、FindProperty("_InstancedColor") を FindProperty("_Color") に置き換えると良いと書いてありました。

https://github.com/microsoft/MixedRealityToolkit-Unity/issues/4188#issuecomment-872952279

エラーを見ると、以下ファイルが呼び出し元になっています。

Library/PackageCache/com.microsoft.mixedreality.toolkit.foundation@3093b5b13b68-1636644842558/Core/Inspectors/MixedRealityStandardShaderGUI.cs:212

FindProperty メソッドが呼び出されていますが、引数には変数が入っています。

212 : instancedColor = FindProperty(Styles.instancedColorName, props);

変数の宣言元を確認すると、32行目に対象コードを発見しました。

protected static class Styles
{
    public static string instancedColorName = "_InstancedColor";

こちらのソースコードを以下内容に変更します.

protected static class Styles
{
    public static string instancedColorName = "_Color";

上書き保存し、Unity Editor に戻ってみるとエラーが解消し、Shader のプロパティ値を確認することができました。

今回のプロジェクトでは MRTK パッケージを Mixed Reality Feature Tool を用いてインポートしているため、Library/PackageCache がクリアされるたびに編集が必要になりますが、一時対応策としてメモしておきます。