【Unity】2Dタイルマップ16 Sceneビュー上で反転(flip)させたTileをScriptから判定する
Unity 2021.1.0f1 Personal(2021年3月)
前回の続きです!
今回は2Dタイルマップの小ネタで、Sceneビュー上でFlipしたTileをScriptから判定していきます。
Tilemapのショートカットキー確認
Unityの2Dタイルマップにはショートカットがいくつかあります。
上記URLの最下部にTileの回転・反転のショートカットが記載されています。
[:アクティブなブラシを時計回りに回転させます。
]:アクティブなブラシを反時計回りに回転させます。
Shif+ [:アクティブなブラシをx軸に沿って反転します。
Shift+]:アクティブなブラシをy軸に沿って反転します。
今回はx軸に沿って反転されたTileを取り上げ判定していきます。
Tileをflipさせて配置する。
それではTileを配置します。
まずはこちらのスプライトをTilePaletteに登録します。
tansu.png
TileをSceneビュー上に持っていき、「Shift+[」を押すと反転されます。
通常
「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) |
今回は以上となります。
ありがとうございました〜。