Advanced Turn Based Tile Toolkit for UE4の使い方[実践編②] 地形データの実装

Post 2021年2月19日金曜日

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

前回の続き。サムネ用に画像を貼り付けしておきます。

ぜひ基礎編を開きながらご覧ください。


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



本日のゴール

タイルを貼り付けると、地形データを選ぶことができ、地形を選ぶと移動コストが変わる。(山だと移動コスト3とか、そういう感じ)

地形データによってタイルの色が変わる。



公式参照

https://www.youtube.com/watch?v=8JEzy1Z80xU&t=304s

公式でも解説があります。

ていうか、解説作るくらいなら実装してくれ…(心の叫び)


設計思想について

公式を参照すると、Pathfindingのブループリントの編集をしているようです。

それでもいいのですが、そこまで複雑なことをするわけではないので、単にタイルの移動コストを書き換える、という設計にしようと思いました。

なので動画内で解説している方法とは全く違います。。。


下準備

今回、「SimpleCosts」の機能を使っていくことにしました。私の機能にはうっけつけなので。

SimpleCostという変数がそれぞれのタイルに存在しているので、その変数を、各タイルの地形データをもとに書き換えてやればいいですね。


下準備のやり方は下記ですが、実は基礎編でも解説しているのでそちらもご参照ください。

グリッドをクリックした状態で、コンフィグを変更していきます。変更するのは下記丸で囲ったの2点。


次に各キャラクターをクリックして、すべて下記のように設定を変更。


これで、Simple Costsに従ってコスト計算されるようになりました。


地形データとコスト策定

Enum型で、地形の名前を列挙していきます。


使いたい地形を書いていってください。

次に、「BP_Tile_Hex_2Cost」をコピーしておきます。このコピーしたやつを編集していきます。



イベントグラフを開き、下記のようにブループリントを組みます。


右クリックして「gridmanagerref」と検索します。Getの方をだします。


そこからノードを伸ばしながら、「usesimplecost」と調べます。またGetの方を出します。

1個目のブランチにつなぎます。



変数を新しく作成します


定義した変数の型を変更。自分が作った、先程の地形データを調べてクリックします。

名前もTerrainTypeとかにしておきましょう。またインスタンス編集可能にチェックしてください。


そしたら、この変数を複製します。名前はTerrainCostsとか良いんじゃないでしょうか。


インスタンスは編集可のチェックを外しておきます。(ここはしたままでもいいです、好みの問題)

そしたら、変数型の右側の線みたいのをクリック。


MAPをクリック。


IntegerでOKです。

ここまで終わったら一回コンパイルしておきます。
すると、デフォルトバリューが出現するので、+を押してあげると各地形に対してどのコストを割り振ればいいかが出てきます。


仕様上、Enumの一番上にあるやつの値を入れてしまうと、そこで新しいデータを作成できなくなるので、

なぜか怒られる

こんな感じで変更してから+を押すようにします。Plainの設定は一番最後ですね。


こんな感じでできました。一例ですよ!! ちなみに0は進入禁止を表します。

コストを反映

ここまでくれば後少しです。
さっき作ったそれぞれの変数をドラッグ・アンド・ドロップして、Getしておきます。

TerrainCostからノードを引っ張って Findで検索。

こんな感じで、さっきのブランチとつなげます。

続いて、継承された変数を表示します。

Simple Costがあるので、これを引っ張っていって、今度はGetではなくSetします。

このSetをブランチと、Findにつなぎます。


これで終了!簡単ですねぇ。
見にくいので、先程継承した変数は隠しておきましょう。

このままだとSimpleCostが外部から編集可能になっているのが気持ち悪いです。
右上から、BP Tileと書いてある右のツールマークをクリックします。

変数の欄を見て、SimpleCostの目のマークを閉じます。

これでOKです。外部から編集ができなくなりました。コンパイルしておきましょう。

さて、紛らわしいのでこの今開いている「BP Tile」はさっさと閉じましょう。


地形データによってタイルの色を変える

先程までで、一応機能としては完成となりますが、このタイルを配置しても色で識別ができないので、どこが山でどこが川かが全くわかりません。

このためにダイナミックマテリアルで色を変えていきたいです。

さて、まずはマテリアルを作成。ブループリントを編集します。
こんな感じでノードをくみます。

BaseColorから出ているのはパラメータノード。Vector Parameterで調べれば出てきます。
Metalicの方につながっているのは、数字のノードです。1キー(テンキーじゃない方)を押しながらクリックすれば出てきます。この数字のノードには1.0を入れておきます。

パラメータノードの名前は、自分が分かりやすいものに変更しておきます。この名前、後で使いますので。

ここで、一回タイルの方に戻ってきます。
イベントグラフではく、Construction Scriptを開きます。

こんなのがすでにあると思います。Parent:~~~とあるのは、継承元のBP Tileで書かれているConstruction Scriptの内容です。余談ですがこのノードが、タイルの真ん中にアクターを配置する、みたいな機能を与えています。

この横のノードを引っ張って「CreateDynamic」と調べるとこんな感じ。下のやつをクリック。

ノード内で、先程作ったマテリアルを参照しておきます。

その次のノードでSet Vectorで調べると出てくるやつで一番下のやつをクリック
Parameter Nameには先程覚えておこうと話した、パラメータ名を入力。

これでDynamic Materialを作成し、そのパラメーターを弄るという一連の流れが完成。
あとはこのParameter Valueを変更すれば終わりですね。


Costじゃない方の、地形データが入っている変数をGetします。

Selectを選択。

こんな感じになると思うので、Set Parameterとつなぎます。


すると、ベクトルを記入できるようになります。
左から、RGBに対応しており、1.0が最大値です。
このため0,0,0と入力すれば黒になりますし、1,1,1だと白になります。

あとはもう自由に設定してください!!

これでコンパイルしたら、設定は終わりです。

実際に配置してみる


配置すると、こんな感じでタイルを選択した状態で、地形データを選択できるようになっているはずです。
変更すると、移動コストと共に色も変わっているはず。



今後の課題


  • もとのタイルの移動コスト1が足されてしまうので、移動コスト1のタイルを配置すると2になってしまう。
  • 色が変わるだけなのでダサい。(……)
→ 上については解決しました。「BP_Path_Simple」のブループリントを一箇所書き換えます。


1を2にするだけです。若干力業感はありますけどね。笑
ちなみにこの操作を行うと、タイルが貼られていないところはコストがめちゃ高いように計算されるので、全部のタイルにこの作成したタイルを貼る必要があります。注意。


うまくいかないとき

ビルドしてみると、コストが再反映される時があるようです。
ちなみに、ゲームをしている中でSimple Costを途中で変更する場合、GridManagerの「Simple Costs」を更新しないと反映されないので注意が必要です。

次の企画

地味に今これでプレイすると、バグっぽい仕様があるので、そこの修正をちょろっと。