以下のコードでは、12行目のVector2[,] blockUVsで座標を指定してMultiple Spriteを取得しているのですが、別のマテリアルを使いたいと思っているので、なにか良い方法はないでしょうか?どのようにコードを書けばいいのかを知りたいです。
マップチップのように、画像がいくつもある状態になっています。
これとは別の一枚だけテクスチャが貼ってある状態のマテリアルを使おうとしていますが、どう書けばいいのかが分かりません。複数のテクスチャを用いて、Sprite Atlasを作り、それをマテリアルにする方法もあれば教えてもらいたいです。
回答よろしくお願いします。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class CreateQuads : MonoBehaviour { 6 7 public Material cubeMaterial; 8 public BlockType bType; 9 10 enum Cubeside { BOTTOM,TOP,LEFT,RIGHT,FRONT,BACK}; 11 public enum BlockType { GRASS, DIRT, STONE }; 12 Vector2[,] blockUVs = 13 { 14 {new Vector2(0.125f,0.375f),new Vector2(0.1875f,0.375f),new Vector2(0.125f,0.4375f),new Vector2(0.1875f,0.4375f) }, 15 {new Vector2(0.1875f,0.9375f),new Vector2(0.25f,0.9375f),new Vector2(0.1875f,1.0f),new Vector2(0.25f,1.0f) }, 16 {new Vector2(0.125f,0.9375f),new Vector2(0.1875f,0.9375f),new Vector2(0.125f,1.0f),new Vector2(0.1875f,1.0f) }, 17 {new Vector2(0,0.875f),new Vector2(0.0625f,0.875f),new Vector2(0,0.9375f),new Vector2(0.0625f,0.9375f) }, 18 19}; 20 21void CreateQuad(Cubeside side) 22 { 23 Mesh mesh = new Mesh(); 24 mesh.name = "ScriptMesh"; 25 26 Vector3[] vertices = new Vector3[4]; 27 Vector3[] normals = new Vector3[4]; 28 Vector2[] uvs = new Vector2[4]; 29 int[] triangels = new int[6]; 30 31 Vector2 uv00; //= new Vector2(0f, 0f); 32 Vector2 uv10; //= new Vector2(1f, 0f); 33 Vector2 uv01; //= new Vector2(0f, 1f); 34 Vector2 uv11; //= new Vector2(1f, 1f); 35 36 if(bType == BlockType.GRASS && side == Cubeside.TOP) 37 { 38 uv00 = blockUVs[0, 0]; 39 uv10 = blockUVs[0, 1]; 40 uv01 = blockUVs[0, 2]; 41 uv11 = blockUVs[0, 3]; 42 }else if(bType == BlockType.GRASS && side == Cubeside.BOTTOM) 43 { 44 uv00 = blockUVs[(int)(BlockType.DIRT + 1), 0]; 45 uv10 = blockUVs[(int)(BlockType.DIRT + 1), 1]; 46 uv01 = blockUVs[(int)(BlockType.DIRT + 1), 2]; 47 uv11 = blockUVs[(int)(BlockType.DIRT + 1), 3]; 48 } 49 else 50 { 51 uv00 = blockUVs[(int)(bType + 1), 0]; 52 uv10 = blockUVs[(int)(bType + 1), 1]; 53 uv01 = blockUVs[(int)(bType + 1), 2]; 54 uv11 = blockUVs[(int)(bType + 1), 3]; 55 } 56 57 Vector3 p0 = new Vector3(-0.5f,-0.5f,0.5f); 58 Vector3 p1 = new Vector3(0.5f, -0.5f,0.5f); 59 Vector3 p2 = new Vector3(0.5f, -0.5f,-0.5f); 60 Vector3 p3 = new Vector3(-0.5f, -0.5f,-0.5f); 61 Vector3 p4 = new Vector3(-0.5f, 0.5f, 0.5f); 62 Vector3 p5 = new Vector3(0.5f, 0.5f, 0.5f); 63 Vector3 p6 = new Vector3(0.5f, 0.5f, -0.5f); 64 Vector3 p7 = new Vector3(-0.5f, 0.5f, -0.5f); 65 66 switch (side) 67 { 68 case Cubeside.BOTTOM: 69 vertices = new Vector3[] { p0, p1, p2, p3 }; 70 normals = new Vector3[] { Vector3.down, Vector3.down, Vector3.down, Vector3.down }; 71 uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; 72 triangels = new int[] { 3, 1, 0, 3, 2, 1 }; 73 break; 74 case Cubeside.TOP: 75 vertices = new Vector3[] { p7, p6, p5, p4 }; 76 normals = new Vector3[] { Vector3.up, Vector3.up, Vector3.up, Vector3.up }; 77 uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; 78 triangels = new int[] { 3, 1, 0, 3, 2, 1 }; 79 break; 80 case Cubeside.LEFT: 81 vertices = new Vector3[] { p7, p4, p0, p3 }; 82 normals = new Vector3[] { Vector3.left, Vector3.left, Vector3.left, Vector3.left }; 83 uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; 84 triangels = new int[] { 3, 1, 0, 3, 2, 1 }; 85 break; 86 case Cubeside.FRONT: 87 vertices = new Vector3[] { p4, p5, p1, p0 }; 88 normals = new Vector3[] { Vector3.forward, Vector3.forward, Vector3.forward, Vector3.forward }; 89 uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; 90 triangels = new int[] { 3, 1, 0, 3, 2, 1 }; 91 break; 92 case Cubeside.BACK: 93 vertices = new Vector3[] { p6, p7, p3, p2 }; 94 normals = new Vector3[] { Vector3.back, Vector3.back, Vector3.back, Vector3.back }; 95 uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; 96 triangels = new int[] { 3, 1, 0, 3, 2, 1 }; 97 break; 98 case Cubeside.RIGHT: 99 vertices = new Vector3[] { p5, p6, p2, p1 }; 100 normals = new Vector3[] { Vector3.right, Vector3.right, Vector3.right, Vector3.right }; 101 uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; 102 triangels = new int[] { 3, 1, 0, 3, 2, 1 }; 103 break; 104 } 105 106 //vertices = new Vector3[] { p4, p5, p1, p0 }; 107 //normals = new Vector3[] {Vector3.forward, 108 // Vector3.forward, 109 // Vector3.forward, 110 // Vector3.forward}; 111 112 //uvs = new Vector2[] { uv11, uv01, uv00, uv10 }; 113 //triangels = new int[] { 3, 1, 0, 3, 2, 1 }; 114 115 mesh.vertices = vertices; 116 mesh.normals = normals; 117 mesh.uv = uvs; 118 mesh.triangles = triangels; 119 120 mesh.RecalculateBounds(); 121 122 GameObject quad = new GameObject("quad"); 123 quad.transform.parent = this.gameObject.transform; 124 MeshFilter meshFilter = (MeshFilter)quad.AddComponent(typeof(MeshFilter)); 125 meshFilter.mesh = mesh; 126 MeshRenderer renderer = quad.AddComponent(typeof(MeshRenderer)) as MeshRenderer; 127 renderer.material = cubeMaterial; 128 } 129 130 void CombineQuads() 131 { 132 MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>(); 133 CombineInstance[] combine = new CombineInstance[meshFilters.Length]; 134 int i = 0; 135 while (i < meshFilters.Length) 136 { 137 combine[i].mesh = meshFilters[i].sharedMesh; 138 combine[i].transform = meshFilters[i].transform.localToWorldMatrix; 139 i++; 140 } 141 MeshFilter mf = (MeshFilter)this.gameObject.AddComponent(typeof(MeshFilter)); 142 mf.mesh = new Mesh(); 143 144 mf.mesh.CombineMeshes(combine); 145 146 MeshRenderer renderer = this.gameObject.AddComponent(typeof(MeshRenderer)) as MeshRenderer; 147 renderer.material = cubeMaterial; 148 149 foreach (Transform quad in this.transform) 150 Destroy(quad.gameObject); 151 } 152 153 void CreateCube() 154 { 155 CreateQuad(Cubeside.FRONT); 156 CreateQuad(Cubeside.BACK); 157 CreateQuad(Cubeside.TOP); 158 CreateQuad(Cubeside.BOTTOM); 159 CreateQuad(Cubeside.LEFT); 160 CreateQuad(Cubeside.RIGHT); 161 CombineQuads(); 162 163 } 164 165 // Use this for initialization 166 void Start () { 167 CreateCube(); 168 } 169 170 // Update is called once per frame 171 void Update () { 172 173 } 174} 175
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/18 10:55