kumak1’s blog

kumak1のイラストや技術ログ

Unity の Cube を使う時、側面の天地が揃う UV 作った

Unity の Cube、便利ですね。 とりあえずイメージを掴むためのワイヤーフレームとして、ポンっと追加できるの最高です。

そのまま使う時の、そうじゃない感

ただ、ベタ塗りの色を置いておく場合は良いのですが、テクスチャ画像を貼り付けると、 「違う、そうじゃない」ということもありがちです。

例としては、壁を Cube で作ってテクスチャを当てた際、 側面の上下が反転してしまうのでそのままだとチグハグになりがちです。

f:id:kumak1:20161009173713p:plain こんな感じ。矢印は全て上を向いてもらいたい。

そこで、パパっと UV を書きました。

UV について

UVの概念についてはこちらがわかりやすいかな answers.unity3d.com

要は、ポリゴンの頂点が、テクスチャのどの座標と対応するか、の対応表です。

作成した UV

こんな感じ。全部 Start に書かず、 Awake に書くことで描画遅延をなく・・せてるはず。

using UnityEngine;
using System.Collections;

public class WallUv : MonoBehaviour {
    Vector2[] uv = new Vector2[24];

    void Awake()
    {
        // 左 : -x
        uv[2].x = 1.0f; uv[2].y = 1.0f;
        uv[3].x = 0.0f; uv[3].y = 1.0f;
        uv[0].x = 1.0f; uv[0].y = 0.0f;
        uv[1].x = 0.0f; uv[1].y = 0.0f;

        // 上 : +y
        uv[4].x = 0.0f; uv[4].y = 0.0f;
        uv[5].x = 1.0f; uv[5].y = 0.0f;
        uv[8].x = 0.0f; uv[8].y = 1.0f;
        uv[9].x = 1.0f; uv[9].y = 1.0f;

        // 後 : -z
        uv[23].x = 1.0f; uv[23].y = 0.0f;
        uv[21].x = 0.0f; uv[21].y = 1.0f;
        uv[20].x = 0.0f; uv[20].y = 0.0f;
        uv[22].x = 1.0f; uv[22].y = 1.0f;

        // 前 : +z
        uv[19].x = 1.0f; uv[19].y = 0.0f;
        uv[17].x = 0.0f; uv[17].y = 1.0f;
        uv[16].x = 0.0f; uv[16].y = 0.0f;
        uv[18].x = 1.0f; uv[18].y = 1.0f;

        // 下 : -y
        uv[15].x = 1.0f; uv[15].y = 0.0f;
        uv[13].x = 0.0f; uv[13].y = 1.0f;
        uv[12].x = 0.0f; uv[12].y = 0.0f;
        uv[14].x = 1.0f; uv[14].y = 1.0f;

        // 右 : +x
        uv[6].x  = 0.0f; uv[6].y  = 0.0f;
        uv[7].x  = 1.0f; uv[7].y  = 0.0f;
        uv[10].x = 0.0f; uv[10].y = 1.0f;
        uv[11].x = 1.0f; uv[11].y = 1.0f;
    }
        
    void Start () {
        MeshFilter mf = gameObject.GetComponent<MeshFilter>();
        mf.mesh.uv = uv;
    }
}

実行結果

スクリプトを cube に Add Component して実行します。と、狙ったとおり側面は全てY軸の方向を天としました。 バッチリですね。 f:id:kumak1:20161009175022p:plain

雑記

でもま、ゲームで本気のモデルを作るときは、Cube ではなく、専用モデルとUV Blender 等々で生成、専用テクスチャをゴニョゴニョ・・なので、実用性は謎です。