【Unity】UnityにおけるRendererコンポーネントのマテリアル管理: material と materials の使い分け

rendererComponent.materials は配列として格納されています。したがって、特定のマテリアルの色を変更する場合は、その配列のインデックスを指定する必要があります。例えば、最初のマテリアルの色を変更する場合は次のようにします。両者は同じです

rendererComponent.material.color = color;
rendererComponent.materials[0].color = color;

rendererComponent.material プロパティにアクセスできる理由は、UnityのRendererコンポーネントが提供する便利なショートカットだからです。以下にその詳細を説明します。

rendererComponent.material と 
rendererComponent.materials の違い

  • rendererComponent.material: これは、Rendererにアタッチされている最初のマテリアル(デフォルトで使用されるマテリアル)を取得または設定します。便利なショートカットとして提供されています。このプロパティにアクセスすると、実際には rendererComponent.materials[0] にアクセスしているのと同じです。
  • rendererComponent.materials: これは、Rendererにアタッチされているすべてのマテリアルの配列を取得または設定します。複数のマテリアルを扱う場合はこちらを使用します。

以下は具体的な例です。

// 最初のマテリアルの色を変更する
rendererComponent.material.color = Color.red;

// 全てのマテリアルの色を変更する
Material[] materials = rendererComponent.materials;
foreach (var material in materials)
{
    material.color = Color.blue;
}
rendererComponent.materials = materials;

rendererComponent.sharedMaterial と rendererComponent.sharedMaterials

また、似たようなプロパティとして sharedMaterial と sharedMaterials があります。

  • rendererComponent.sharedMaterial: 全てのインスタンス間で共有されるマテリアルにアクセスします。これを使うと、他のオブジェクトでも同じマテリアルが使われている場合、そのマテリアルの変更がすべてのインスタンスに反映されます。
  • rendererComponent.sharedMaterials: 共有されている全てのマテリアルの配列にアクセスします。

これらを使用する場合、個々のインスタンスに影響を与えるのではなく、マテリアルの共有インスタンスに変更を加える点に注意が必要です。

これらのプロパティを使い分けることで、必要な箇所に対して適切にマテリアルの色やプロパティを変更できます。

Unity

Posted by hidepon