【2D Tilemap Extras】ルールに従ったオートタイルを実現するRule Tile【Unity】

Unityのタイルマップ拡張タイル「 Rule Tile」の解説です。タイル貼り付けのルールを定義することで、オートタイルを実現する機能です。アニメーションタイルやタイルのランダム表示にも対応しています。

Rule Tileとは

ルールに従って表示するスプライトを変更するタイルです。具体的にはオートタイルを実装するタイルです。

このタイルを利用することで、ツクール・ウディタ規格のオート規格タイルセット素材もUnityに適用できます。

上下左右斜めに隣接するタイルが自分と同じタイルであるかを判断し、決められたルールに則って条件が一致した場合、タイルのスプライトを切り替えます。ちなみに同じタイルというのは、自分自身という意味合いです。以下のように出力するタイルが異なりますが、このタイルである限り全て同じと扱います。

だいたいこんな感じです。

Aの条件を満たしたらタイルAを表示

Aの条件を満たさずBの条件を満たしたらタイルBを表示

A,Bの条件を満たさずBの条件を満たしたらタイルCを表示

A,B,C…全てのルールを満たさなければDefaut Tailを表示

Rule Tileは、単純にルールを決めるだけでなく、GameObjectをタイルと一緒に出力する機能(タイルを無しにGameObjectだけ出力することも可能)、ランダムなタイルを出力する機能、アニメーションする機能もあります。

基本的にはこれ一つでだいたいの拡張はカバーできると思います。

このページのサンプルはドット絵世界のタイル素材をお借りして解説していきます。

ルールの作り方

Projectを右クリックし、2D > Tiles > Rule Tileを選択します。

基本はInspectorのDefault Spriteに設定したスプライトを表示させます。ただし、条件を満たした場合に表示するのは新たに設定したスプライトになります。

Unity Tilemap RuleTile1

例として、Default Sprite、Tiling Rulesの1番目、2番目にそれぞれスプライトをセットしています。この場合の意味は次の通りです。

表示規則
  • Tiling Rules1のルールを満たしたらTiling Rules1のスプライトを表示
  • 上の条件を満たさずTiling Rules2のルールを満たしたらTiling Rules2のスプライトを表示
  • それ以外の場合はDefault Spriteを表示

その結果、Tilemapにタイルを4×4で貼ってみると次のような形になりました。

Unity Tilemap RuleTile2

隣接するグリッドの条件

Inspector右側の3×3マスのグリッドがRule Tileの一番重要な箇所なので、まずはその部分に注目します。このGridはTilemapにタイルを配置した時、隣接する周囲に同じタイルを配置しているかのチェック項目です。

Unity Tilemap RuleTile3

Gridの真ん中を除いた周囲8箇所はクリックすると緑の矢印・×印・空白と切り替わります。この矢印の意味は次の通りです。

緑矢印同じタイルが配置されている。
赤×同じタイルが配置されておらず、
異なるタイルか何も配置されていない。
空欄どんなタイルでも良いし、何も配置しなくてもよい。

この画像の場合、配置したタイルの右と下に同じタイルがあり、上と左下には同じタイルが無ければ、Inspector右に設定したスプライトを表示しなさいとの意味になります。

この状態で、そのすぐ横の9Gridの周り9マスをマウスでクリックすることによって、矢印を表示し、真ん中をクリックすることによってルールを決定します。

2つほど例を見てみます。

Unity Tilemap RuleTile5
Unity Tilemap RuleTile4

右に同じタイルがある場合、Tiling Rules1番目のタイルを表示するルール。左の2タイルは右に同じタイルがあるため、Tiling Rules2のスプライトを表示する一方、右のタイルは右が空のため、Defaultタイルを表示しています。

Unity Tilemap RuleTile6
Unity Tilemap RuleTile7

Tiling Rule1は右に同じタイルがあり、且つ左に同じタイルが無いルール。Tiling Rule2は右に同じタイルがあるルール。

画像を見ると、左の2タイルは右に同じタイルがあり、左にはタイルがないため、Tiling Rule1のスプライトが表示されます。

真ん中の2タイルは、まずTiling Rule1の条件を見て、左に同じタイルがあるため条件を満たしません。次にTiling Rule2の条件を見ると、右に同じタイルがあるため、Tiling Rule2のスプライトが表示されます。

真ん中のルール

真ん中の項目は周囲8マスの条件をどのように適用させるかを決めるルール項目です。クリックするごとに変化していきます。

unity tilemap ruletile アイコン1Fixed条件と一致する必要があります。
unity tilemap ruletile アイコン2Rotate一致しなければ時計回りに条件を90度回転して確認。
最大3回回転してどれかに一致する必要があります。
一致したらタイルは適用した時の角度に回転して表示。
unity tilemap ruletile アイコン3MirrorX一致しなければ条件を横のみ180度反転して確認。
一致したらタイルは適用した時の角度に回転して表示。
unity tilemap ruletile アイコン4MirrorY一致しなければ条件を縦のみ180度反転して確認。
一致したらタイルは適用した時の角度に回転して表示。
unity tilemap ruletile アイコン5MirrorXY一致しなければ条件を縦横180度反転して確認。
一致したらタイルは適用した時の角度に回転して表示。

具体例をいくつか。

Unity Tilemap RuleTile8
Unity Tilemap RuleTile9

Tiling Rule1はルールをRotateで左にタイルがあるを条件にしています。右の2タイルは共に左に同じタイルがあるため、Tiling Rule1のスプライトが表示されます。

左下のタイルは、左に同じタイルがありません。そのため、90度時計回りに条件を回転して上に同じタイルがないか確認しています。上には同じタイルがあるため、Tiling Rule1のスプライトを90度時計回りに反転して表示しています。

左上のたいるは、左に同じタイルがありません。そのため、90度時計回りに条件を回転して上に同じタイルがないか確認しています。上にも同じタイルがないため、さらに90度時計回りに回転して右に同じタイルがないか確認。右に同じタイルがあるため、Tiling Rule1のスプライトを180度時計回りに反転して表示しています。

Unity Tilemap RuleTile10
Unity Tilemap RuleTile11

Tiling Rule1はルールをMirrorXで左にタイルがあるを条件にしています。右の2タイルは共に左に同じタイルがあるため、Tiling Rule1のスプライトが表示されます。

左のタイルは、左に同じタイルがありません。そのため、横に180度反転し右に同じタイルがないか確認しています。右にタイルがあるため、Tiling Rule1のスプライトを横に180度反転させて表示しています。

Unity Tilemap RuleTile10
Unity Tilemap RuleTile11

Tiling Rule1はルールをMirrorXYで左にタイルがあるを条件にしています。右の2タイルは共に左に同じタイルがあるため、Tiling Rule1のスプライトが表示されます。

左のタイルは、左に同じタイルがありません。そのため、横に180度、縦に180度反転し右に同じタイルがないか確認しています。縦の回転は上下に矢印がないため関係ありません。。右にタイルがあるため、Tiling Rule1のスプライトを横に180度、縦に180度反転させて表示しています。

Extend Neighbor

Unity Tilemap RuleTile12

Extend Neighborにチェックを入れると、周囲8マスの制限が外れ、矢印がある場所+1までマスを拡大して条件を作ることができます。

個別タイルのプロパティ

Unity Tilemap RuleTile15

プロパティ

GameObject

GameObjectをセットした場合、そのタイルマップにそのタイルをセットした場所に、GameObjectが生成されます。

例えば以下の例では、Default Game Objectは空、Tiling Rules1にはTestObject Prefabsをセットしています。シーンビューで2×2マスにするとルールにより、Defaultのスプライトが2個、Tiling Rules1のスプライトが2個配置されます。この場合、ゲームを実行するとGame ObjectをセットしたTiling Rule1のスプライトが2個、タイルマップの配下に生成されます。これらのPositionは、Tiling Rule1のスプライトが表示されているタイルのPivotになります。

Unity Tilemap RuleTile18
Unity Tilemap RuleTile19
Unity Tilemap RuleTile20

Collider

  • Spriteの場合、画像に沿った形(透明部分を省く)のコライダー
  • Gridの場合、グリッドに沿った形のコライダー
  • Noneの場合、コライダー未設置(当たり判定が無い)

Output

  • Singleの場合、設定したスプライトを表示
  • Randomの場合、追加で指定した複数のスプライトからランダムに1つを選択して表示
  • Animationの場合、追加で指定した複数のスプライトをアニメーションで表示

Output = Randomの追加項目

Unity Tilemap RuleTile16

Size

Sizeを変更するとランダムに変更したいタイル数が変化するので、各箇所にタイルをセットします。

例えば、下画像ではSizeを3にして、各素材は以下の3つを利用しています。その状態で、タイルを貼ると次のようにルールに関係なく、画像がランダムに切り替わります。ランダムですが、グリッドに貼るとき、グリッドの(1,1)座標は必ず1番目のスプライト、1,2は必ず3番目のスプライトと、ランダムに位置が固定です。そのためにランダム幅を広くするため、NoiseとShuffleが用意されています。

Unity Tilemap RuleTile21
Unity Tilemap RuleTile22
Unity Tilemap RuleTile23

Noise

ランダムの位置を変えます。基本的にはタイルマップにタイルを塗ったら、満足できるまでこの項目を適当にいじって配置を変えます。

Shuffle

  • Fixedの場合、回転はありません。
  • Rotatedの場合、一つ一つのタイルをランダムに0、90、180、270度回転させます。
  • MirrorXの場合、一つ一つのタイルをそのままか、ランダムに横に180度反転します。
  • MirrorYの場合、一つ一つのタイルをそのままか、ランダムに縦に180度反転します。
  • MirrorXYの場合、一つ一つのタイルをそのままか、ランダムに縦縦共に180度反転します。

この回転もタイルマップの位置によって回転量が固定のため、必要があればNoiseを利用します。

Output = Animationの追加項目

Unity Tilemap RuleTile17

Min Speed~Max Speedの中からランダムに速度を取得し、Sizeで指定したスプライトを順番に表示します。具体的な内容は、ほぼAnimated Tileと同様の機能なため、Animated Tileの解説も参考にしてみてください。

関連リンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA