2014年12月20日土曜日

SpriteのSliceをスクリプトで行う

UnityのSprite EditorのSliceが勝手に気を利かせるのが困る。


透明部分をスプライトとして切り取らない。透明なスプライトをじゃぶじゃぶ作らないのは便利な反面、TMXファイル内のCSVとスプライトの番号がずれる。ちゃんと16枚に切り取ってほしい。そういう機能があってもいいと思うけど見つからなかったのでスクリプトで自作した。
    public Sprite[] GetTileSprite (string fileName)
    {
        // ピボットは中心
        Vector2 pivot = new Vector2 (0.5f, 0.5f);
        // ファイル名でテクスチャファイルを読み取る(1個しか読み取れない)
        Texture2D texture = Resources.Load<texture2d> (fileName);
        // 左上からTILESIZEで切り取っていく(16*16)
        // 合計何枚スプライトが得られるか
        int arraySize = (texture.height / Global.TILESIZE) * (texture.width / Global.TILESIZE);
        // 必要なだけ配列を確保
        Sprite[] sprites = new Sprite [arraySize];
        for (int y = 0; y < texture.height / Global.TILESIZE; y++)
        {
            for (int x = 0; x < texture.width / Global.TILESIZE; x++)
            {
                // スプライトの切り取る場所をRectで指定
                // 左下が(0,0)なことに注意
                Rect rect = new Rect (x * Global.TILESIZE, texture.height - (y + 1) * Global.TILESIZE, Global.TILESIZE, Global.TILESIZE);
                // 最後の引数はPixel Per Unit(たぶん)
                Sprite sprite = Sprite.Create (texture, rect, pivot, 1f);
                // 確保しておいた配列に代入
                sprites [y * texture.width / Global.TILESIZE + x] = sprite;
            }
        }
        return sprites;
    }

Resouces.Load (string)
Resourcesフォルダ内のファイルを読み込む。

Sprite.Create (texture2D, Rect, Vector2, float)
texture2Dの一部分を切り取ってスプライトを作る。
左下が(0,0)なのに注意。

スプライトの変更はSpriteRenderer.spriteを直接変更すればok。空オブジェクトを作成してスプライトを張り替えることでマップタイルをスクリプトで生成できる。

0 件のコメント:

コメントを投稿