はじめての質問になります。よろしくお願いいたします。
現在自分は、ビヘイビアツリーをつかったAIを使用して、特定のアクタを中心としてほかのアクタを回転させようと以下のような処理を作成しました。
- 回転の軸となるアクタ
- 回転するアクタ(キャラクター)
- 回転するアクタを制御するAIコントローラ
- ビヘイビアツリーおよび、ツリー内で変数を共有するブラックボード
そして、AIコントローラから使用するブラックボードとビヘイビアツリーを設定したうえで回転に必要な情報として、
- 回転フラグ(isRotate)
- 回転の軸となるアクタ(RotateTarget)
- 回転軸となるアクタが回転するアクタの方向へ向いたうえで、その向きから特定角度向きを変え、その方向への単位ベクトルを回転軸のアクタから回転するアクタまでの距離分掛け算したベクトル(RotateVector)
以上のものをブラックボードに書き込みました。
そして、ビヘイビアツリーにて、isRotateがTRUEであれば、SetActorLocationAndRotationを使用してRotateVectorで指定したベクトルの位置へ移動しRotateTargetを向くようにデコレータおよびタスクを作成いたしました。
ですが、コントローラでブラックボードに書き込んだ直後にブラックボードの値を確認した際には、正常にコントローラで設定したRotateVectorの値が取得できているのですが、実際にSetActorLocationAndRotationの使用およびFindLookatRotationで向く方向を作成しようとして、ブラックボードのRotateVectorの値を取得しようとすると、実際に取得される値が設定した値とは異なった値が取れてしまいます。
値からして、floatかdoubleの値の最大値が各方向に設定されているようです。
サービスについては、コントローラでの処理と同じく、コントローラから各種情報を取得し上記3つの情報を作成したうえでブラックボードに書き込んでいるのですが、最初のタスク実行完了時に相当遠いところに回転対象のアクタが配置されてしまうせいか、コントローラごと削除されてしまい動作の確認ができていません。
それで質問なのですが、ブラックボードからタスク等で値を取り出す際に、ベクトルの情報を正常に取得することは不可能なのでしょうか?
もしくは、特別な取得の方法になるのでしょうか?
参考になるかどうかはわかりませんが、タスクにて実際に値をブラックボードから取得しているノード、ビヘイビアツリーのノード、ブラックボードにて宣言している値の一覧画像を添付いたします。
本来ならば、AIコントローラのほうも画像を準備するべきなのだと思いますが、とても長いため必要に応じて公開いたします。
もし、自分の調査不足で答えがすでに出ているようでしたらごめんなさい。