デフォルトで用意されているCUBEにテクスチャを貼り付けると
上下が反転してしまう面が存在してしまいます。
また、面毎に異なるテクスチャを貼り付けることも出来ないので
これを解決するために、自作でCUBEを作成してみました。
【customCube】というGameObjectを作成し
面として【Quad】を6面に貼り付けます。
順番としては
【正面】【右面】【左面】【背面】【上面】【下面】
の順番になっています。
貼り付けるテクスチャはローカルパスからそれぞれ読み込んでいます。
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; public class test : MonoBehaviour { private float[,] SURFACE_POS = new float[,] { { 0f, 0f, -0.5f }, { 0.5f, 0f, 0f }, { -0.5f, 0f, 0f }, { 0f, 0f, 0.5f }, { 0f, 0.5f, 0f }, { 0f, -0.5f, 0f } }; private float[,] SURFACE_ROT = new float[,] { { 0f, 0f, 0f }, { 0f, 270f, 0f }, { 0f, 90f, 0f }, { 0f, 180f, 0f }, { 90f, 0f, 0f }, { 270f, 0f, 0f } }; // Start is called before the first frame update void Start() { GameObject customCube = new GameObject(); for (int i = 0; i < 6; i++) { // 貼り付けるテクスチャを読み込み Texture2D tex = new Texture2D(1, 1); tex.LoadImage(LoadBytes(@"C:\work\" + (i + 1).ToString() + ".png")); // CUBEの面を設定 GameObject tmpQuad = GameObject.CreatePrimitive(PrimitiveType.Quad); tmpQuad.transform.position = new Vector3(SURFACE_POS[i, 0], SURFACE_POS[i, 1], SURFACE_POS[i, 2]); tmpQuad.transform.rotation = Quaternion.Euler(SURFACE_ROT[i, 0], SURFACE_ROT[i, 1], SURFACE_ROT[i, 2]); tmpQuad.transform.localScale = new Vector3(1, 1, 1); tmpQuad.GetComponent<Renderer>().material.mainTexture = tex; tmpQuad.transform.parent = customCube.transform; tmpQuad.GetComponent<MeshCollider>().convex = true; Shader shader = Shader.Find("Transparent/Diffuse"); tmpQuad.GetComponent<Renderer>().material.shader = shader; } } byte[] LoadBytes(string path) { FileStream fs = new FileStream(path, FileMode.Open); BinaryReader bin = new BinaryReader(fs); byte[] result = bin.ReadBytes((int)bin.BaseStream.Length); bin.Close(); return result; } // Update is called once per frame void Update() { } }
実行結果は下図のようになります。