Page 1 of 1

自作したCalculatorでDistanceTransitionが正常に動きません

Posted: 2019/05/13 13:07
by rrr
エディター時のシーン上には存在せず、シーンを実行した後に動的に生成されるオブジェクトのTransformを捕捉したいので以下のようなCalculatorを作りました。

Code: Select all

public class FindGameObject : Calculator {
	/// <summary>
	/// Component
	/// </summary>
	[SerializeField] private string target;

	/// <summary>
	/// GameObject
	/// </summary>
	[SerializeField] private OutputSlotTransform _Transform = new OutputSlotTransform();
	[SerializeField] private OutputSlotGameObject _GameObject = new OutputSlotGameObject();

	// Use this for calculate
	public override void OnCalculate() {
		_Transform.SetValue(GameObject.Find(target).gameObject.transform);
		_GameObject.SetValue(GameObject.Find(target).gameObject);
	}
}

ステート図はこちらです。
2361313647ea2b187b4aed02d22abcb6.png
2361313647ea2b187b4aed02d22abcb6.png (243.34 KiB) Viewed 3668 times
しかしWaitステートのDistanceTransition部分は正常に動いても、
PrepareステートでのDistanceTransitionが正常に動かずAtackステートに移行してくれません。

Find Game Object 部分を試しに Transform.Get Calculaorに差し替え、シーン上にあるものをアタッチする場合は正常にAtackステートに移行したのでPrepareステートのビヘイビア自体には問題がないようです。

Waitステートでは正常に動くのにPrepareステートでDistanceTransitionが働かないのはどういった原因が考えられるでしょうか。

ちなみに、Find Game Object CalculatorからTransform.Getへ噛ませてもダメでした。
また、Paramatorコンテナーを用意して、そこにFindGameWithTagビヘイビアで動的にGameObjectをキャッシュし、Transform.Getを噛ませる方法でも正常に動きませんでした。

ご助言いただけると幸いです。

Re: 自作したCalculatorでDistanceTransitionが正常に動きません

Posted: 2019/05/13 23:15
by caitsithware
rrr wrote: 2019/05/13 13:07 Waitステートでは正常に動くのにPrepareステートでDistanceTransitionが働かないのはどういった原因が考えられるでしょうか。
まず、基本的なところとして、FindGameObjectからのデータ接続線の値を表示してみて、nullになっていないかをご確認ください。

もしWaitステートへのデータ値もPrepareステートへのデータ値もともにnullになっているようでしたら、FindGameObjectでの取得に失敗しております。
(Waitからの遷移は正常に動いている、ということなのでこの可能性は低いですが、念のため)
Waitステートへのデータ値は正常、Prepareステートへのデータ値だけnullでしたら、Arbor本体の不具合ですので詳しく検証の後修正いたします。

[追記]また、aaaオブジェクトが途中で消えた場合もnullになり、遷移条件に合致しなくなりますので、その点もご確認ください。

ともにnullではないのでしたら、自身のオブジェクトとaaaオブジェクトとの距離がPrepareステートのDistanceTransitionの条件に合致する範囲内(2m)かを確認してみてください。
2m以内に近づかないと4秒経過後にWaitステートに戻り、その瞬間既に12m以内であれば一瞬でPrepareステートに戻る、という遷移になっているかと思います。
シーン上のオブジェクトで検証した時は偶然条件に合致していた、という場合も考えられますので、念のためご確認よろしくお願いいたします。