Unity(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【Unity】2Dタイルマップ16 Sceneビュー上で反転(flip)させたTileをScriptから判定する

Unity 2021.1.0f1 Personal(2021年3月)
f:id:hiyotama:20210326012925p:plain

前回の続きです!
今回は2Dタイルマップの小ネタで、Sceneビュー上でFlipしたTileをScriptから判定していきます。

Tilemapのショートカットキー確認

Unityの2Dタイルマップにはショートカットがいくつかあります。

docs.unity3d.com

上記URLの最下部にTileの回転・反転のショートカットが記載されています。

[:アクティブなブラシを時計回りに回転させます。
]:アクティブなブラシを反時計回りに回転させます。
Shif+ [:アクティブなブラシをx軸に沿って反転します。
Shift+]:アクティブなブラシをy軸に沿って反転します。

今回はx軸に沿って反転されたTileを取り上げ判定していきます。

Tileをflipさせて配置する。

それではTileを配置します。
まずはこちらのスプライトをTilePaletteに登録します。

f:id:hiyotama:20210326003927p:plain
tansu.png

TileをSceneビュー上に持っていき、「Shift+[」を押すと反転されます。

f:id:hiyotama:20210326004143p:plain
通常

f:id:hiyotama:20210326004153p:plain
「Shift+[」で反転

通常のTileと反転させたTileを配置したら完了です。

Tileの反転をチェックするScript

Tileの反転はこちらのScriptにて判定することができます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;

public class CheckTileRotateController : MonoBehaviour
{
    [SerializeField] Tilemap tilemap;
    List<Quaternion> checkRot = new List<Quaternion>() {
        new Quaternion(0f,0f,0f,1f), // 通常
        new Quaternion(0f,1f,0f,0f) // x-flip
    };


    void Start()
    {
        tilemap.CompressBounds();
        var b = tilemap.cellBounds;

        for (int y = b.min.y; y < b.max.y; y++)
        {
            for (int x = b.min.x; x < b.max.x; x++)
            {
                var pos = new Vector3Int(x, y, 0);
                if (tilemap.HasTile(pos))
                {
                    var rot = tilemap.GetTransformMatrix(pos).rotation;
                    if (rot == checkRot[0]) // 通常
                    {
                        Debug.Log("x:" + x + " y:" + y + " 通常のTileです。");
                    }
                    else if (rot == checkRot[1]) // x-flip
                    {
                        Debug.Log("x:" + x + " y:" + y + " x-flipのTileです。");
                    }
                }
            }
        }
    }
}

CheckTileRotateController.cs

Sceneビュー上に配置した個別のTileの反転・回転は
TilemapのGetTransformMatrix(Vector3Int).rotation
で確認することができます。
何も設定していない通常状態だとQuaternion(0f,0f,0f,1f)、x-flip(X軸に沿って反転)の状態だとQuaternion(0f,1f,0f,0f)となります。
以下の値で他のパターンも判定することができます。

状態
通常 Quaternion(0f,0f,0f,1f)
x-flip(X軸に沿って反転) Quaternion(0.0, 1.0, 0.0, 0.0)
y-flip(y軸に沿って反転) Quaternion(1.0, 0.0, 0.0, 0.0)
90度回転 Quaternion(0.0, 0.0, -0.7, 0.7)
180度回転 Quaternion(0.0, 0.0, 1.0, 0.0)
270度回転 Quaternion(0.0, 0.0, 0.7, 0.7)


今回は以上となります。
ありがとうございました〜。