インスペクタでMaterialの設定欄を見た時に「(Instance)」と付いていなかったらsharedMaterialです。
(画像の例だと、MeshRendererのMaterialsのElement 0が「New Material」だったらsharedMaterialである、「New Material (Instance)」だったらsharedMaterialではない)
質問主さんの言う「普通のマテリアル」とはsharedMaterialのことです。
そもそもMaterialの仕様は、
- エディタ上でオブジェクトをコピーしたり、動作中にInstantiateしただけではsharedMaterialのまま。
- 動作中にスクリプトからRendererコンポーネント内の**"material"**の内容を変更した場合、インスタンス化される(=「(Instance)」が付き、sharedMaterialではなくなる)。
- 動作中にスクリプトからRendererコンポーネント内の**"sharedMaterial"**の内容を変更すると、sharedMaterialのまま変更される(=同じマテリアルが付いたオブジェクトは同じ表示になる)。
となります。
試しにシーン上に同じマテリアルを持ったオブジェクトを3つ並べて、
GameObject.Find("Shpere (1)").GetComponent<Renderer> ().material.color = Color.blue;
GameObject.Find("Shpere (2)").GetComponent<Renderer> ().sharedMaterial.color = Color.red;
このコードを実行してみてください。どう動くか分かると思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/11/21 12:52
2017/11/22 02:00 編集
退会済みユーザー
2017/11/22 15:06