エンティティ

AIありのエンティティはLepinoidEntityを継承することで作成が可能です。

中でも敵MOBを作成したい場合はLepinoidMonsterを継承することである程度手間が省けて独自Goal等も利用することができます。

新たに実装した変数やメソッドに関してはコード内に説明を書いているのでそちらを参照してください。

基本的な実装に関してはTestMobを参照してださい

注意事項

  • バニラでは移動速度はAIごとに指定しますが、基本的にspeed.normalを用いて設定を行い、新たにGoalを作成する際は内部でLepinoidEntity.speedを取得するようにしてください。

  • EntityTypeを指定しただけではMobの各音声は変更されません。必要に応じてget[Hurt/Death/Fall]Soundを変更してください。

  • 死亡時などにアイテムをドロップさせる際は、DropManagerを介して処理を行ってください

AsyncBrain

バニラのBrainを基に非同期的にAi処理を実行できるように変更を加えたクラスです。

GuideEntityと併用することをおすすめします。

Brainとの違い

基のBrainでは毎Tick処理で以下の処理を行なっています

  1. Memoryのクリーンアップ
  2. Sensorの更新
  3. 新しく追加されたTaskの初期化
  4. Taskの実行

AsyncBrainは基本的に上記の処理を踏襲していますが、いくつか違いがあります。

VanillaのSensor/Taskとは別に専用のAsyncSensor/Taskを受けつける

従来のSensor/Taskも使用可能ですが、処理効率を上げるためにもあまりおすすめはできません。特にTaskはAsyncに対応させて使用することをおすすめします。

CurrentStateActivityで保持しているActivityに紐付けされたTaskのみ処理する

Activity.COREに紐付けされたもののみ例外的に如何なるときでも実行します。(そのためsetAsyncTaskListではなくsetCoreTaskListから設定する必要があります。)

Sensorの更新時/Taskの処理時に待ち時間が発生する

Sensor/Taskの処理の多くはServerThreadを使用して安全性を確保する必要のある処理が多いため、一度serverThreadに処理を投げ、全ての処理が終了するまで待機します。

追加された全てのTaskを実行しない

Brainでは追加された全てのTaskが実行できないか毎Tick精査しますが、これをAsyncBrainは行いません。現在の状態と同じActicityのグループに属するTaskのみを実行します。状態はバニラのActivityを使用しているため、TaskListの登録時もバニラと比べてそこまでの違いはありませんが、状態の推移を管理する専用のTaskが必要になります。

50ms以内に処理がおわる気がしねえ

一回の処理で二回もserverThread待つことになるので2tickかかる可能性は全然あるね。こわいね serverThreadに処理を投げなくて済む方法も考えてはいる。 現状はTask内で行うことなんて後に作成するModelEntityのアニメーション指定とかだけな気がしてるので、別にいいんじゃねって気もする

results matching ""

    No results matching ""