Page 1 of 1

Game ObjectがActiveになる度にBehaviour Treeを再生したい

Posted: 2024/02/11 11:27
by kohaku
Behaviour TreeコンポーネントのPlay On Startにチェックを入れると、
Behaviour TreeがアタッチされたGame ObjectがActiveになったときにBehaviour Treeが再生されるのですが、
再生されるのはGame Objectが初めてActiveになった時だけです。
Game Objectが初めてActiveになった時毎回Behaviour Treeを再生するにはどうすればいいのでしょうか?

一応Restart On Finishにチェックを入れれば、Game ObjectがActiveになっている間
ずっとBehaviour Treeが再生されるので似たようなことはできるのですが、
Game Objectが初めてActiveになった時に一回だけBehaviour Treeを再生したいです。

Re: Game ObjectがActiveになる度にBehaviour Treeを再生したい

Posted: 2024/02/11 11:41
by kohaku
先ほどの投稿を訂正します。
誤: Game Objectが初めてActiveになった時に一回だけBehaviour Treeを再生したいです。
正: Game Objectが毎回Activeになった時に毎回一回だけBehaviour Treeを再生したいです。

Re: Game ObjectがActiveになる度にBehaviour Treeを再生したい

Posted: 2024/02/11 12:11
by caitsithware
Play On StartはMonoBehaviourのStart()メソッドで再生開始するフラグとなっており、初回以外にアクティブになった際に再生されないのは仕様です。
アクティブになった際に再生開始する設定はないため、再生したい時にNodeGraph.Play()メソッドを呼び出してください。

例えば以下のようなスクリプトを作成しBehaviourTreeと同じGameObjectに設定するとアクティブになった際に再生開始できます。

Code: Select all

using UnityEngine;
using Arbor;

public class PlayOnEnable : MonoBehaviour
{
	private void OnEnable()
	{
		var nodeGraph = gameObject.GetComponent<NodeGraph>();
		if (nodeGraph != null && nodeGraph.isActiveAndEnabled)
		{
			nodeGraph.Stop(); // 最初から再生するために一度停止する
			nodeGraph.Play();
		}
	}
}
なおこのスクリプトをそのまま使用する場合、最初からアクティブなGameObjectにはPlay On Startにチェックを入れてください。

Re: Game ObjectがActiveになる度にBehaviour Treeを再生したい

Posted: 2024/02/12 16:56
by kohaku
ご回答ありがとうございます。

教えていただいたスクリプトを使ってみたのですが、
一度GameObjectを非Activeにしてから再度GameObjectをActiveにした場合、OnEnable()は呼ばれるのですが、
nodeGraph.isActiveAndEnabledがfalseになっていて再生されませんでした。

Re: Game ObjectがActiveになる度にBehaviour Treeを再生したい

Posted: 2024/02/12 19:00
by kohaku
Project SettingsのScript Execution OrderでPlayOnEnableスクリプトの実行順を後ろにすると
PlayOnEnableスクリプトが期待通りに動作することがわかりました。

Re: Game ObjectがActiveになる度にBehaviour Treeを再生したい

Posted: 2024/02/12 23:37
by caitsithware
確かに実行順は明示しない限り不確定なので、場合によって動いたり動かなかったりしますね。
実行順を設定することで動作したということで良かったです。

またこれは参考コードですので動作保証は致しません。必要に応じて外部からPlayメソッドを呼ぶなども検討してみてください。

Re: Game ObjectがActiveになる度にBehaviour Treeを再生したい

Posted: 2024/02/15 19:09
by kohaku
了解しました。
ご対応ありがとうございました。