ぜひ基礎編を開きながらご覧ください。
一番最初の記事はこちら。
お約束 | |
---|---|
この記事作成にあたって使用した(主な)UE4バージョン | 4.26.2 |
このtoolkitのバージョン | v3.2 (Live 03.09.21) |
本日のゴール
敵に接触するとそれ以上動けないようにする
ZOCってなに
いわゆるZOC:Zone Of Controlってやつですね。
概要
- BP_Pathを継承した専用のBPを作成
- 上記のBPにオリジナルの関数を作成
- 上記のBPの一部関数をOverrideして編集
- キャラに適用
実践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」を引っ張ってきます。
詳細の説明は省きます。前回をご参照ください。
実践3:一部関数のOverride
関数のところの「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編終了。ありがとうございました。
0 件のコメント:
コメントを投稿