- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!1オブジェクトに複数のマテリアルを指定
1つのメッシュに対して複数のマテリアルを割り当てることができます。
GameObject1つに対して「renderer.materials」に複数のマテリアルが格納されています。
// GameObject名「xxx」のものを検索.
GameObject gobj = GameObject.Find("xxx");
Debug.Log("Materials : " + gobj.renderer.materials.Length);
とすると、マテリアル数を取得できます。
「gobj.renderer.materials[i]」がi番目のMaterialの参照になります。
GameObjectとしては以下のように複数マテリアルを割り当てておきます。
{{ref_image unity_multi_materials.png}}
MaterialsのSizeを2個以上入力すると、Element0/Element1/Element2のように複数のマテリアルを割り当てる領域が出てきます。
!!Meshの面でのマテリアル指定
「[[ポリゴンメッシュの作成|unity_script_create_polygonmesh]]」のMeshにて指定。
SubMeshとして面ごとにグループ化されています。
このSubMeshごとにマテリアルが割り当てられることになります。
// triangles0に2つの三角形、triangles1に4つの三角形を格納したとする。.
int [] triangles0 = new int[2 * 3];
int [] triangles1 = new int[4 * 3];
Mesh.subMeshCount = 2; // 2つのSubMeshを格納できるように指定.
Mesh.SetTriangles(triangles0, 0); // 0番目のSubMeshを格納.
Mesh.SetTriangles(triangles1, 1); // 1番目のSubMeshを格納.
「Mesh.subMeshCount」に使用するSubMesh数を指定します。これがないと、SetTrianglesで三角形情報を格納する際にエラーになります。
2つのマテリアルをMeshに割り当てている場合は、1番目のSubMeshが未使用でも2を指定する必要があります。
「Mesh.SetTriangles」で0番目のSubMeshにのみ三角形の頂点インデックスを格納したときは、「Mesh.triangles = triangles0;」とした場合と同じ意味になるようです。
----
{{lastmodified}}