質問: ### (Instance)が付加されたマテリアルの名前と、同名の文字列を比較したいと思っております。 事前に用意した青と赤のマテリアルを立方体のランダムな箇所にそれぞれ合計三つアタッチしました。そして上面のマテリアルの名前と指定した名前が一致した場合、そのマテリアルの色を出す、という事を試みていました。 ### 発生している問題・エラーメッセージ ``` すると例えばRedMaterialとマテリアルの名前が表示されるはずが、 RedMaterial(Instance)と表示され名前の文字列が比較出来ないでいます。 ``` ### 試したこと RedMaterialに(Instance)を付加した文字列も試してみたのですが、 上手くいきませんでした。立方体の上面以外の他の場所のマテリアルには(Instance)が付加されておらず、再生? する前にはどの場所のマテリアルにも名前に(Instance)が付加されておりません。解決法をご存知の方、いらっしゃいましたらご教示よろしくお願いします。 ### 補足情報(FW/ツールのバージョンなど) Unity2018.2 ### 閲覧していただき、ありがとうございます。
回答: Unityには「オブジェクトのマテリアルにアクセスすると複製される」という性質があります。 これは色などを変更した際に元のマテリアルを変更せずにコピーを作成する事によりそのオブジェクトのみの変更とする為です。 気付き難いですが「名前を参照する」という何も変更をしないアクセスでも複製が生成されます。 今回の修正案ですが元の参照先にアクセスすると(Instance)は付かなくなります。 `GetComponent().material.name;`の様に参照していると思いますがその箇所を`GetComponent().sharedMaterial.name;`として下さい。 もしかしたら複数マテリアルを設定されているようなので `GetComponent().sharedMaterials[0].name;`の様な配列になっているかもしれませんがその辺りは上手く修正してみて下さい。