Unityの立方体のuvをいじくる
Visual Studio Tools for Unity 1.9 公開されましたね.
UnityのC#がVisual studio で書けるってすばらしい.
えっ? Express edition では使えない!? (゚д゚)!
orz
気を取り直して,今日の本題です.
Unity の立方体の各面に,それぞれ別の絵を表示させたい時ってありすよね.
例えば,サイコロとか.
別のソフトで,テクスチャ込の立方体モデルを作ってそれを読み込ませるのが順当な手だとは思うんですが,それはめんどくさい o(`ω´*)oプンスカプンスカ!!
というわけで,C#でメッシュのuvをいじってなんとかしてみたいと思います.
(そっちのがめんどくさいだろというツッコミはスルー
UnityのCubeは六面体,当然ですが,面が6個あります.
その面は4つの頂点を持っており,それぞれの面の頂点を別物ととらえると6x4=24個の頂点があります.
この24頂点のuv値を,表示させたい画像に合わせて変更してあげればいいわけです.
それぞれの頂点は,下図のような関係にあると思われます.
(まちがってたらごめんんさい
この図を参考に,スクリプト上で,gameObjectから取得したメッシュのUVを書き換えてあげればOKです.
ソースコードは以下のような感じにして,下記のようなサイコロ画像を読み込ませればたぶん大丈夫です.
using UnityEngine; public class UVChange : MonoBehaviour { Vector2[] uv = new Vector2[24]; void Awake() { // 1の面 uv[2].x = 0.0f; uv[2].y = 0.0f; uv[3].x = 1.0f / 6.0f; uv[3].y = 0.0f; uv[0].x = 0.0f; uv[0].y = 1.0f; uv[1].x = 1.0f / 6.0f; uv[1].y = 1.0f; // 2の面 uv[4].x = 1.0f / 6.0f; uv[4].y = 0.0f; uv[5].x = 2.0f / 6.0f; uv[5].y = 0.0f; uv[8].x = 1.0f / 6.0f; uv[8].y = 1.0f; uv[9].x = 2.0f / 6.0f; uv[9].y = 1.0f; // 3の面 uv[23].x = 2.0f / 6.0f; uv[23].y = 0.0f; uv[21].x = 3.0f / 6.0f; uv[21].y = 0.0f; uv[20].x = 2.0f / 6.0f; uv[20].y = 1.0f; uv[22].x = 3.0f / 6.0f; uv[22].y = 1.0f; // 4の面 uv[19].x = 3.0f / 6.0f; uv[19].y = 0.0f; uv[17].x = 4.0f / 6.0f; uv[17].y = 0.0f; uv[16].x = 3.0f / 6.0f; uv[16].y = 1.0f; uv[18].x = 4.0f / 6.0f; uv[18].y = 1.0f; // 5の面 uv[15].x = 4.0f / 6.0f; uv[15].y = 0.0f; uv[13].x = 5.0f / 6.0f; uv[13].y = 0.0f; uv[12].x = 4.0f / 6.0f; uv[12].y = 1.0f; uv[14].x = 5.0f / 6.0f; uv[14].y = 1.0f; // 6の面 uv[6].x = 5.0f / 6.0f; uv[6].y = 0.0f; uv[7].x = 6.0f / 6.0f; uv[7].y = 0.0f; uv[10].x = 5.0f / 6.0f; uv[10].y = 1.0f; uv[11].x = 6.0f / 6.0f; uv[11].y = 1.0f; } // Use this for initialization void Start() { MeshFilter mf = gameObject.GetComponent<MeshFilter>(); mf.mesh.uv = uv; } // Update is called once per frame void Update() { } }