Advanced Turn Based Tile Toolkit for UE4の使い方[基本編] / UE4でターン制ストラテジーゲーム(TBS)を作る

Post 2021年2月7日日曜日

Advanced Turn Based Tile Toolkit TBS(ターン制ストラテジー) UE4 アセット

UE4のアセットに、「Advanced Turn Based Tile Toolkit」というものがあります。

いわゆる六角形(Hex)タイルや、四角形(Square)のタイルを使ったストラテジーゲームが作成できるキットのようです。かなり前(2015年)からあるアセットのようですが、開発は未だに続いており安心感があります。

(※)更新が続いているということは、この記事もいずれ陳腐化する可能性が高いですな…。


お値段は2021年2月時点で、60ドル。6,600円くらいでしょうか。かなり高価なアセットと言えます。

UE4というと、ターン制ストラテジー(TBS: Turn Based Strategy)というよりはRPG、アクション、FPS/TPS、格闘、シューティングに向いているゲームエンジンという印象が強いですが、アセットの力を借りればどこまで行けるかな?と思って記事を作成しました。

公式がYoutubeに解説動画を上げています。

https://www.youtube.com/watch?v=6D4xyGAmSvU&list=PLNiHDaJeqA16CsnxJJDjG9qgubj15jXKF&index=1

なかなか見応えがあります。新しいバージョン向けだけでも20本…。今回はこの動画をメインに解説していきます。

ちなみにこのページは、作者が巡回済みです。恐ろしや…。

お約束
この記事作成にあたって使用した(主な)UE4バージョン 4.26.1
このtoolkitのバージョン v3.0 (live 12.12.20)


個人的な評価

90点!!! / 100点

TBSをいつか作ろうかなと思っている人 → マストバイではないです。セールしてたら買った方がいい

TBSを今作ろうと思っている人 → マストバイ (買うんだ!!)

作り込みは流石の一言。六角・四角に両対応しているのがポイント高いですね。

一方で、6,600円という価格からすると、Epic Market Placeには他にも素晴らしいアセットがたくさんあるので、迷いどころとなります。日本語対応はしていないので、ある程度英語力が求められます。しかも解説がYoutubeなのでGoogle翻訳もできませんし。

(1から自分で作ろうとすると、一部機能だけでも2~3ヶ月はかかると思うので、6,600円の価値をどう見るかになりますね。)

それと大事なことですが、このアセットを買えばあとはモデルさえ用意すればゲームが作れる、そこまでのプラグアンドプレイなアセットでは決してありません!かなり自分で機能を追加していく必要があります!

ただ作者は素晴らしい人です。英語で質問する必要はありますが、非常にタイムリーに解説してくれます。


やれること

  • Hex / Squareのグリッド表示 グリッドの数をグリグリと変えられます。
  • グリッドの真ん中にアセットをあわせる機能 これだけでも結構作るの大変です。主はここで挫折した前世があります。
  • Pathfinding つまり経路検索の機能
  • 攻撃可能範囲の表示 
  • 移動コストの変更 沼を作って、そこの移動コストを上げるなどができます。
  • 遮蔽物の設定 ある高さ以上は遮蔽物と認識して、銃弾の軌道を制限できます。この高さとかも自分で設定できます。また、乗り越えられる物の高さも設定可能。この機能が良かったですね。
  • ターンの設定 もうちょっとここは機能が欲しかったな
  • グリッド表示とランドスケープを分ける この機能があったから買いました。六角形のタイルを並べるだけだと、タイルとタイルの間につなぎ目がどうしても発生します。グリッドとランドスケープを分けて使えるので、このつなぎ目が発生しません。(後述)

ちなみに2Dゲームにも使えます。これはすごいですが、私は2Dゲームは作らないので説明を割愛します。



使い方

すべての機能は多すぎるので、かいつまんで説明します。また、基本的に六角形タイルでの説明になりますが四角形タイルでも基本は同じです。

判明次第、続々追加していく予定です。

ちなみに便宜上、「BP_GridManager_Hex」を「グリッド」と称しています。

グリッドの個数を変える

グリッド(BP_GridManager_Hex)を選択した状態で、「コンフィグ」→「Grid Option」のところで変えれます。すごい簡単。

あとの設定も大体グリッドを選択した状態で、ここのタブをいじっていく感じです。


グリッドの大きさを変える

グリッド(BP_GridManager_Hex)を選択した状態で、「Transform」→「Scale」を変えるだけ。お手軽。

乗り越えられる高さを変える

まず適当にグリッドに図形を配置して、コリジョンを「Block All」に設定。

次にグリッドを選択した状態で、「コンフィグ」→「Procedural」→「Height Impassible Cutoff」を変更します。デフォルトは100だったと思います。
※Max Grid Height以上の高さにしちゃうと、だめです。Max Grid Heightはこのグリッドで検知できる最高地点の高さ。
まあ400とかにすると違和感半端ないですけどね・・・

射撃の障壁となる高さを変える

ちなみに、射撃の障壁となる高さの設定もできます。
グリッドを選択した状態で「Visibility Trace Height」です。これを高くすると、それ以下の壁は障害物として見做さなくなります。
500とかにすると、周り壁だらけでもどこでも打ち放題になります。
壁があるのに打ち放題


アクターが、必ずグリッドの真ん中にくるように設定

この機能を付与しているのが、「BP_GridAnchor」というブループリントなので、各アクターがこの「BP_GridAnchor」の子になるように設定すればOKです。簡単。

ちなみに、グリッドを選択した状態で「Snap to Custom Grid」をオフにすると、一括でこの機能をオフにできます。
とはいえこれをオフにしてしまったら、このアセットなんの意味があるの?という感じはありますけど。

さらに補足ですが、この機能を使うには、このブループリントをコピーしてアクターを書き換える方法もありますが、
右クリックからブループリントを作成

アクターを選択 (ちなみにここの下の方でBP_GridActorを検索して作ればそれで終わりです)

適当になにかメッシュを配置。この場合キューブにしておきます。

クラスの設定をクリック

親クラスをBP_GridActorに変更

これをドラッグ・アンド・ドロップして

こうしてやれば

はい出来上がり。…コピーのほうが簡単かな…。

グリッド表示とランドスケープを分ける

これは、特になにか設定をしなくても、コリジョンがBlock Allの物体(ここ重要)をグリッド上に配置すれば、勝手にグリッドが透かし表示になってくれます。すっごい(小並感)。

物体でもいいですし、ランドスケープでも問題ないです。

※ただこの物体/ランドスケープが高すぎると、前述の「乗り越えられる高さ」をオーバーしてしまうので注意。


ちなみにアセットが、この物体に埋まってしまうよーと言う場合は、アセットを高さ方向に上下するのではなく、前後方向にスライドさせてやると埋まりが解消します。
埋まってしまっているアクターたち
前後に動かすと埋まりが解消


ただこれだと、物体の外のグリッドにもアクセスができてしまいます。

なのでグリッドを選択した状態で「コンフィグ」→「Grid Option」から「Collision Plane Walkable」をオフにしてあげましょう。これで物体上は歩けるけれど、グリッド上には歩けなくなります。

さらに、グリッドを選択した状態で「show default tile」を検索して、この機能をオフにすると、グリッドが非表示になります。

[2021.9.26 追記]

最新バージョンで試したところ、グリッドの「Heightmap」を「False」ではなく、「One level」にしないとうまく動かないようになってました。注意です。


低い土地のあるマップ

高低差のあるマップでは、下の方にあるグリッドが表示されないことがあります。


これは前述した、グリッドを選択した状態で出る、「Max Grid Height」とともにある「Min Grid Height」を変更すればいいですね。-1000とかにしておきます。


なおこれを設定しても、この物体同士が離れていると、Pathfinding上そこは「行けない地域」になるみたいなので注意が必要です。


2階があるマップ

下記みたいな形で、2階と1階があるような場合、2階の真下エリアだけ移動できない、というようなことがあります。
このツールキットでは、高さ方向で上から順にPathfindingをしています。このとき、2階部分は高さが十分に高く、移動できないので、そこには行けないよと判定し、その下部分はそもそも判定すらしていません。


こんなときは、グリッドを選択した状態で「Height Map」を「Multilevel」にしてあげましょう。

これで2階の下にも行けるようになります。私の用途では使わなさそうですが、一応覚えておこうかな。(地下エリアを作るとかなったときのため)
攻撃範囲もこんな感じで、2階、1階どちらにも反映されます。
この螺旋階段はUE4の標準についてるやつを雑に置いただけですが、この通りきちんと六角形が反映されていますね。すごい(小並感)。


ちなみに2階ってどこの高さから2階だよ?という定義はグリッドを選択した状態で「Height Between Levels」から設定できます。デフォルトでは、高さ200以上にあるところの下(1階)を行けるようにします。

これを500とかに設定すると
さっきまで行けてた1階部分にアクセスできなくなります。ちなみに射撃もできなくなります。(違和感半端ないですけど)
この設定を見直しても1階部分にアクセスできないよ、という方は単純に2階が低すぎてアクターが入れない判定になっている可能性があります。(私はありました)


タイルを斜面に貼り付ける(Ver 4.25のやり方)

!注!4.26最新バージョンではやり方が変わります。後述

階段や斜面で困るのは、タイルの表示が崩れてしまうことでした。

これを解決する方法があります。「Use Decals」です。
コンフィグ→Grid Options→「Use Decals」をオンにすると、この表示がピタッと張り付きます。


とはいえデカール機能を使っているので、階段のところとか、一部はうまく表示できていません。なのでゲーム作成時に調整する必要はありそうですね。

余談ですが、主はこの機能を自作を試みており、その際はUIを使っていたんですね。えらい大変でした(しかも表示がキレイにできなかったのでボツ案入り)。Decalを使うという発想が自分にはなく、このオプションを見たときにはえらい驚きました。その手があったか…!!

こういうの、アセットを購入するといろんなアイデアがあるもんだなあと感心しますよね。

ちなみにUIを使う方法だと、このDecalのように垂直壁のところで表示が崩れないのがメリットですが、処理が重い気がします。


タイルを斜面に貼り付ける(ver 4.26.1以降のやり方)


Config→"Grid Options"の中の、「GridUIClass」の中から「Decals」と書いてあるやつを選べばいいみたいです。私は六角形なので、Hexと書いてあるやつを選びました。

にしても質問したら10分くらいで回答が来たんですけど。スゲー。


きれいにできました!

ただ、Decalだとやっぱり塗られた感があるんですよね。こんな感じで、レベルに置いた障害物まで塗られてしまうので、私の用途的に微妙なんですよねー。ここだけ自作するべっかなぁ…。



[追記]
ナスヴィッチ様よりコメント欄でアドバイスいただきました。

このデカールが塗られてしまう障害物を選択してReceives Decalsをオフにすればデカールが塗られなくなりますね。

お見事です!!これならきれいに障害物とか、城とかを置いたターン制タワーディフェンスもできそうです。



移動コストが高い地域を作る

いわゆる沼を作る、川を作る、ができます。

こんな感じで、コストが高い地域をなるべく通らないように動きます。
やり方は簡単。用意されています。
Content全体を選択した状態で、"BP Tile Hex"で検索すると、「BP_Tile_Hex_2Cost」というのがあります。これがコストが通常のタイルの2倍に設定されている、タイルです。

早速グリッドに配置しましょう。
これで終わりです。(早っ)
この選択している状態で、右側の設定を見てみましょう。
「cost」で調べると、デフォルトの欄に2が羅列されていることがわかります。
これは、各方向に移動するコストを表しています。各方向に設定できるのはすごいですね。ちなみに0を入れると、通れない(=壁)ということになります。

一番下の方に、Simple Costとありますが、これはグリッドのオプションで「Use Simple Costs」というのがあり、これを選択していると向きに関係なくこの値だけが有効になるらしいです。(未検証)
グリッドを選択した状態でCostと検索すると、"Use Simple Costs"があります。

→ その後検証しましたが、うまく動きませんでした。検証中。
→ わかりました。上記の「Use Simple Costs」を有効にした状態で、各キャラクターのPathfiding Typeを「BP_Path_Simple」に変更すればOKです。疲れた…。


キャラクターの移動・攻撃範囲の設定

これは上のほうに書くべきでしたね。
キャラクターをクリックした状態で右の画面のコンフィグを見ると、色々と出てきます。
APというのはアクションポイントの略っぽいです。
移動(1)+攻撃(1)でそれぞれアクションポイントを減らされるみたいな設計っぽいですね。なので初期値は最大2になっています。2から減っていきます。Max APを0にすると動きません。1にするといきなり攻撃からスタートになります。

Moveは1APごとに何マス動けるかです。6マスは大きすぎる気がする。

Rangeは攻撃範囲。

Minimum Range~~ は最低これだけ離れていないと攻撃できないよーというもの。攻城兵器とかいいかもしれませんね。

Max Healthは最大HP, Damageは攻撃力です。

Initiativeは行動の優先順位で、数字が大きいほど、優先されます。

後の項目は、別の記事にて解説しますねー。


タイルのインデックス番号の表示

タイルにはそれぞれインデックスという固有番号がふられています。この固有番号を使って、誰がどこにいる、というようなことを管理しています。

やり方は簡単。グリッドを選択した状態で、Debugの上2つのチェックボックスをチェックするだけです。一番下は別にチェックしなくていいです。


[2021.9.30追記]

ユニットの動く順番を変更

基本的にはそれぞれの陣営ごとに動きます。
動く順番はユニットのinitiativeの大きい順に動きます。
10のほうが、1より早く動くということです。同じな場合はランダムになるみたいですね。

陣営関係なく、initiativeが大きい順に動かしたいという場合については、
ゲームモードを変更する必要があります。
BP_ATBTT_Initiativeにゲームモードを変更します。


次回

ちょっと複雑な機能を持ったアクターを利用します。次回