①はじめに
NPCをコントロールするには、NPCがどこにいるのかをverseで認識できるようにならなければなりません。
この認識があれば、NPCがA地点にいるのに対して、B地点まで移動してくださいと指示をあたえることができます。
②GetAgent
verseテンプレートNPC Behabior Basicをひらきます。
このテンプレートの基本的なつかい方はこちらを確認してください。
下のスクリプトをコピー&ペーストしてください。#メモに補足事項を記載していますので確認してみてください。
#このverseスクリプトでは、NPCの行動に関するコードを書いています。
using { /Fortnite.com/AI }
using { /Verse.org/Simulation }
#モジュールを2つ追加します。
using { /Fortnite.com/Characters }
using { /UnrealEngine.com/Temporary/SpatialMath }
Test_Device<public> := class(npc_behavior):
#OnBeginのなかで、NPCがスポーンしたときに起きるイベント内容を書きます。
OnBegin<override>()<suspends>:void=
#NPCがスポーンしたときに、NPCが登場したよ!というテキストを画面に表示させる
Print("NPCが登場したよ!")
#ゲーム内のNPCの存在をデータとして扱う。NPCがいないかもしれないからif文をつかう。
if:
#ゲーム内のNPCの存在をデータとして持っておく。Agentという箱にいれておく。
#繰り返しですが、NPCがいないかもしれないので、if文でくくっています。データないかも・・という考えをもとにしたコードを失敗式とか呼びます。
Agent := GetAgent[]
#Agentという箱に本当にデータがはいっているかなと確認する。入っていたらCharacterという箱に入れ替える。
Character := Agent.GetFortCharacter[]
#Characterという箱にAgentが入っている場合は、then以降の処理をおこないます。
then:
#Characterの中にいるAgent、つまりNPCがスポーンした位置データをNPCSpawnPointへ格納します。
NPCSpawnPoint := Character.GetTransform().Translation
#位置情報を画面に表示したい。{}で囲うとNPCSpawnPointのなかにある位置データをみることができます。
Print("{NPCSpawnPoint}")
#OnEndのなかで、NPCがいなくなったときに起きるイベント内容を書きますが、今回は使用しません。
OnEnd<override>():void=
Print("Goodbye, NPC!")
ポイントは、OnBeginに記載している、GetAgent[]です。
GetAgent[]とコードを書くと、コンピュータがゲーム内のNPCはどこだーと探してくれます。探して見つけたという事実をデータとしてAgentという箱にいれます。もしかしたら、見つけられないかもしれません。うまくいかないかもしれないという意味をこめたコードを失敗式とか呼んだりします。失敗式の場合は、うまくいく時とうまいくいかない時の2つのパターンがあるため、if文という条件式でコードをかいていきます。
いままでverseといえば仕掛けというクラスを連結させる作業がメインであったと思います。例えば、ボタンの仕掛けとミューテーターゾーンの仕掛けをverseで連結させるような作業のことです。
同時に、今回のようにNPCの情報をverseで取り扱うこともできます。もっというと私たちプレイヤーの情報も取り扱うこともできます。プレイヤーがどこにいるのかとかいう情報です。
verseでは仕掛けをクラスと認識したように、NPCやプレイヤーなどもクラスとして扱います。実はクラスというのはたくさん種類があるのです。もちろん、それぞれのクラスには特有の機能やイベント機能が備わっていたりします。
③NPCがスポーンした位置情報を取得する
verseコードをビルドして、いま作成したverseファイルを好きなNPCキャラクター定義にわりあてて、セッションを開始します。このあたりの作業が苦手なかたはこちらの記事を参考にしてみてください。
今回使用するNPCキャラクターの定義の設定はこちらです。NPC動作スクリプトに今回のスクリプトを適用します。
verseコードをビルドして、セッションを開始します。画面左上に期待どおりの結果が表示されています。
結果表示に{x=11.084067、y=235.710356、z=77.399998}とありますが、これがNPCの位置情報です。いったん細かい理解はしないで大丈夫ですが、z=0でない理由はNPCが実は少し上の位置からスポーンされているからです。
NPCがスポーンしたときの位置情報を取得することができました。
④まとめ
NPCの情報を取得する方法を学びました。
GetAgentをつかい、NPCがスポーンする位置情報を取得しました。
この作業を基本として、これからいろいろなNCPのコントロール方法を学習していきます。
お疲れさまでした。
ご質問やご感想はお気軽にコメント欄まで!