UE4を初めて2ヶ月目の入門者です。アンサーハブに初めての投稿です
「AI で敵を動かし、HPが0になったら死ぬ」ってのを作っていたんですが、正しく動かなくなってしまいました。
“Cast to AnimBP” などの取得が何故かHPが0になった瞬間 “Failed” になってしまう・・・
HP の変数の型を変えたり、持っている部分がアクタとビヘイビアツリーで辻褄が合わなくなったからかもしれません。
そこで質問なのですが、HPなどの変数はどこで持つべきなのでしょうか?
Actor ブループリントはブラックボードの変数を参照するべきなのでしょうか?
初心者なので質問の内容そのものがおかしいかも知れませんが、よろしくお願いします。
HPなどの変数はどこで持つべきなのでしょうか?
変数は「その値は誰の所有物か」ということを意識して設定すべきです。
例えば"HP"や"攻撃力"といった要素は、キャラクタ毎に保有しているケースが多いですね。
つまり、プレイヤー(キャラクタ)で変数を定義するのが最適です。
Actor ブループリントはブラックボードの変数を参照するべきなのでしょうか?
これは少し悩ましいですが、Actorというのを「AIで制御される対象」として仮定した時、
Actorからはあまり参照しない方が良いと思います。
ブラックボードはビヘイビアツリーやタスクなどの間で変数を共有できるのが特徴で、Actorはタスクからの指示によって挙動を変更します。このビヘイビアツリーを用いたAIシステムの利点として、Actorはタスクからの一方的な指示を受けてから動作を変えるだけで良く、AIの挙動判定の部分を意識する必要が無いです。
Actor側からブラックボードの値を参照してしまうのは、本来意識する必要のないAIの挙動判定に関与することになり複雑度が増してしまうので、個人的にはお勧めしません。
これらを踏まえて、変数は管理者が自身で正しく管理し、変更がある場合はその管理者に対して変更を通知するような、オブジェクト指向に沿った考え方で実装すべきです。
1 Like
返信と細かい説明をありがとうございます。
まだ理解を指定ない部分も多々ありますが、オブジェクト指向を意識して作りたいと思います。
テストレベルでも丁寧に作ることが大切ですね。