# タスクにて、ブラックボードからベクター情報が取得できない

**URL:** <https://forums.unrealengine.com/t/topic/445085>\
**Category:** Blueprint\
**Tags:** Behavior-Tree, blackboard, aicontroller, task, unreal-engine, Blueprint, question\
**Created:** [March 11, 2019, 3:46pm UTC](https://forums.unrealengine.com/t/topic/445085 "2019-03-11T15:46:55Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ymimoto](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Ymimoto](https://forums.unrealengine.com/u/Ymimoto)\
**Post date:** [March 11, 2019, 3:46pm UTC](https://forums.unrealengine.com/t/topic/445085/1 "2019-03-11T15:46:55Z")

</div>

はじめての質問になります。よろしくお願いいたします。

現在自分は、ビヘイビアツリーをつかったAIを使用して、特定のアクタを中心としてほかのアクタを回転させようと以下のような処理を作成しました。

- 回転の軸となるアクタ
- 回転するアクタ(キャラクター)
- 回転するアクタを制御するAIコントローラ
- ビヘイビアツリーおよび、ツリー内で変数を共有するブラックボード

そして、AIコントローラから使用するブラックボードとビヘイビアツリーを設定したうえで回転に必要な情報として、

- 回転フラグ(isRotate)
- 回転の軸となるアクタ(RotateTarget)
- 回転軸となるアクタが回転するアクタの方向へ向いたうえで、その向きから特定角度向きを変え、その方向への単位ベクトルを回転軸のアクタから回転するアクタまでの距離分掛け算したベクトル(RotateVector)

以上のものをブラックボードに書き込みました。

そして、ビヘイビアツリーにて、isRotateがTRUEであれば、SetActorLocationAndRotationを使用してRotateVectorで指定したベクトルの位置へ移動しRotateTargetを向くようにデコレータおよびタスクを作成いたしました。

ですが、コントローラでブラックボードに書き込んだ直後にブラックボードの値を確認した際には、正常にコントローラで設定したRotateVectorの値が取得できているのですが、実際にSetActorLocationAndRotationの使用およびFindLookatRotationで向く方向を作成しようとして、ブラックボードのRotateVectorの値を取得しようとすると、実際に取得される値が設定した値とは異なった値が取れてしまいます。

値からして、floatかdoubleの値の最大値が各方向に設定されているようです。

サービスについては、コントローラでの処理と同じく、コントローラから各種情報を取得し上記3つの情報を作成したうえでブラックボードに書き込んでいるのですが、最初のタスク実行完了時に相当遠いところに回転対象のアクタが配置されてしまうせいか、コントローラごと削除されてしまい動作の確認ができていません。

それで質問なのですが、ブラックボードからタスク等で値を取り出す際に、ベクトルの情報を正常に取得することは不可能なのでしょうか？  
もしくは、特別な取得の方法になるのでしょうか？

参考になるかどうかはわかりませんが、タスクにて実際に値をブラックボードから取得しているノード、ビヘイビアツリーのノード、ブラックボードにて宣言している値の一覧画像を添付いたします。  
本来ならば、AIコントローラのほうも画像を準備するべきなのだと思いますが、とても長いため必要に応じて公開いたします。

もし、自分の調査不足で答えがすでに出ているようでしたらごめんなさい。

![ブラックボード](https://d1ap1mz92jnks1.cloudfront.net/storage/temp/271024-bb.png)  
 ![ツリー](https://d1ap1mz92jnks1.cloudfront.net/storage/temp/271026-bt.png)  
 ![タスク](https://d1ap1mz92jnks1.cloudfront.net/storage/temp/271027-task.png)

---

<div class="post-metadata">

**Author:** ![T\_Sumisaki](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@T\_Sumisaki](https://forums.unrealengine.com/u/T_Sumisaki)\
**Post date:** [March 12, 2019, 1:43am UTC](https://forums.unrealengine.com/t/topic/445085/2 "2019-03-12T01:43:04Z")

</div>

画像の情報のみで判断する場合、 `DSPTTask_EnemyRotate` の `RotateVector(Blackboard Key Selector)` ですが、EditableになっていないためBehaviorTree側からBlackboardのKeyを渡せない状態になっているように見えます

> 値からして、floatかdoubleの値の最大値が各方向に設定されているようです。

コレに関しては具体的な値がわかりませんが、個人的には勘違いでは？と思っています

* * *

蛇足ですが、このTaskは1回しか実行されないのでしょうか？  
AIControllerがNone（初期化されていない）の場合のみ続きが実行されるようになっているように見えます。  
（最初のBranchノードの部分）

意図的なものであれば、FinishedノードかAbortノードを通しておかないと、後続タスクが実行されなくなる恐れがあります

---

<div class="post-metadata">

**Author:** ![Ymimoto](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Ymimoto](https://forums.unrealengine.com/u/Ymimoto)\
**Post date:** [March 12, 2019, 3:59pm UTC](https://forums.unrealengine.com/t/topic/445085/3 "2019-03-12T15:59:49Z")

</div>

返答どうもありがとうございます。

> 画像の情報のみで判断する場合、 DSPTTask\_EnemyRotate の RotateVector(Blackboard Key Selector) ですが、EditableになっていないためBehaviorTree側からBlackboardのKeyを渡せない状態になっているように見えます

こちらの返答をもとに、RotateVectorの`Instance Editable`を設定しました。  
そして、ビヘイビアツリーにおいて、ブラックボードの値を割り当てることができるようになったので解決しました。  
ありがとうございます。

> 蛇足ですが、このTaskは1回しか実行されないのでしょうか？

こちらについては、タスクが動かなくてノードを整理していたときにうっかり接続を切ってしまったようです。  
ご指摘、ありがとうございました。
