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

Here is the forum to do the questions about how to use to Arbor developer.
Attention point:
  • We can not answer your questions about your project specific issues.
  • We can not answer your questions on Unity's specification issues.
  • Please check Arbor Documentation and ask a question if you still don't know how to use it. If the desired function is not described in the document, it is highly possible that the function does not exist from the beginning, so go to the request forum.

ここは、Arbor開発者へ使い方に関する質問を行うフォーラムです。
注意点:
  • ユーザー様のプロジェクトの仕様上の問題や設計に対する質問には答えられません。
  • Unityの仕様上の問題に対する質問には答えられません。
  • Arbor Documentationを確認の上、それでも使い方がわからない場合にご質問ください。欲しい機能の記載がドキュメントにない場合は機能が元から存在しない可能性が高いので要望フォーラムへ。

Forum rules
Here is the forum to do the questions about how to use to Arbor developer.
Attention point:
  • We can not answer your questions about your project specific issues.
  • We can not answer your questions on Unity's specification issues.
  • Please check Arbor Documentation and ask a question if you still don't know how to use it. If the desired function is not described in the document, it is highly possible that the function does not exist from the beginning, so go to the request forum.

ここは、Arbor開発者へ使い方に関する質問を行うフォーラムです。
注意点:
  • ユーザー様のプロジェクトの仕様上の問題や設計に対する質問には答えられません。
  • Unityの仕様上の問題に対する質問には答えられません。
  • Arbor Documentationを確認の上、それでも使い方がわからない場合にご質問ください。欲しい機能の記載がドキュメントにない場合は機能が元から存在しない可能性が高いので要望フォーラムへ。
kohaku

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

Post 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を再生したいです。
kohaku

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

Post by kohaku »

先ほどの投稿を訂正します。
誤: Game Objectが初めてActiveになった時に一回だけBehaviour Treeを再生したいです。
正: Game Objectが毎回Activeになった時に毎回一回だけBehaviour Treeを再生したいです。
User avatar
caitsithware
管理人
Posts: 493
Joined: 2015/08/17 12:41

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

Post 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にチェックを入れてください。
kohaku

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

Post by kohaku »

ご回答ありがとうございます。

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

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

Post by kohaku »

Project SettingsのScript Execution OrderでPlayOnEnableスクリプトの実行順を後ろにすると
PlayOnEnableスクリプトが期待通りに動作することがわかりました。
User avatar
caitsithware
管理人
Posts: 493
Joined: 2015/08/17 12:41

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

Post by caitsithware »

確かに実行順は明示しない限り不確定なので、場合によって動いたり動かなかったりしますね。
実行順を設定することで動作したということで良かったです。

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

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

Post by kohaku »

了解しました。
ご対応ありがとうございました。
Post Reply