Advanced Turn Based Tile Toolkit for UE4の使い方[実践編⑤] ZOC:Zone Of Controlの実装 完結編

Post 2021年9月24日金曜日

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

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

一番最初の記事はこちら


お約束
この記事作成にあたって使用した(主な)UE4バージョン4.26.2
このtoolkitのバージョンv3.2 (Live 03.09.21)

本日のゴール

敵に接触するとそれ以上動けないようにする


ZOCってなに

いわゆるZOC:Zone Of Controlってやつですね。


概要

  1. BP_Pathを継承した専用のBPを作成
  2. 上記のBPにオリジナルの関数を作成
  3. 上記のBPの一部関数をOverrideして編集
  4. キャラに適用


実践1:BP_Pathを継承した専用のBPを作成

まず、BP_Pathを継承して、専用のBPを作ります。「BP_Path_ZOC」とでもしておきましょう。



あとはこの「BP_Path_ZOC」を編集していきます。



実践2:「BP_Path_ZOC」に新しい関数を追加

新しい関数を作りましょう。「Test」としましたけど、皆さんはもっといい名前をつけてあげてください。敵のあるタイルの周囲のタイルを見つける関数なので、「FindTilesAroundEnemy」とかがいいですかね。

「Test」という関数を作りました。スタートのノードに入力を増やします。整数の入力です。これにStart Indexを繋ぎます。

もう一個入力を増やします。こちらも整数です。これにMove Rangeを繋ぎます。


「Grid Manager Ref」からFind Units In Range関数を取り出します。


で下記のように繋ぎます。



(※)ちなみに、「Big」Unitを使うことがある場合は、ここで場合分けをして「Find Units ~~~ Big」を使う必要があると思うので注意。

出力を一旦Arrayに変換

これで敵・味方キャラの全ての場所(Index)が判明したので、敵なのか味方なのか調べます。詳細は前回に書いてあるので、そちらを参照ください。


ArrayをLocal 変数"Unit Place"に保存しておき、For Each Loopをつなぐ。


For Each Loopの中身はこんな感じ。(実際には、操作キャラのFactionはLocal変数にしといたほうがいいような気がする)


For Each LoopのCompletedから引っ張ってきて、下記のように新たなFor Each Loopを作ってください。よくわからん人は、前回を参照してね。ポイントはGrid Edgesを使うところです。

このKeysが敵キャラの周囲のマスのIndexを表しています。

あとは、このIndexたちを保存してやればいいのだが、そのための変数Setを作ります。

整数の変数を作ったあとで、TypeをSetに変更します。上図参考。

名前はInMoveRangeUnitsとでもしておきましょう。

これをドラッグアンドドロップして、Getして、「Add Items」を引っ張ってきます。

Returnノードを、Completedにつないで、最終形がこれです。

詳細の説明は省きます。前回をご参照ください。



実践3:一部関数のOverride

関数のところの「Override」を押します。

"Add Tile If Valid"  "Run Pathfinding"の2つを編集したいので、Overrideします。


で、まずはRun Pathfindingを以下のようにします。


先程作った関数をつなぎ、その前にGrid Manager Refをセットしておきます。(Setしておかないと後でエラーが連発します)

忘れずに親のRun Pathfindingにもつないでおき、完成。

(上図ではエラーが出ているのですが、気にしないでください。)



Add Tile If Validのほうが大変です。

まずはInputとReturn以外、全部消します。


次にBP_Pathを開いて、「Add Tile If Valid」の中身を全部ここにコピーします。


最初と最後をいい感じで繋ぎます。



次に、Returnノード側の一部を改変します。


ちょっと上図では名前が変わっちゃってますが、「InMoveRangeUnits」にContainsをつないで、Edge Indexがあるかどうかを調べます。


これで完成。コンパイルしましょう。



実践4:キャラに適用

上記のZOCを適用したいキャラクターを選択して、Pathfinding Typeを変更します。



これで、ZOC適用するキャラと、そうでないキャラクターを分けることができます。

これにてZOC編終了。ありがとうございました。