91 lines
2.6 KiB
C#
91 lines
2.6 KiB
C#
using System;
|
|
using BehaviorDesigner.Runtime;
|
|
using Cysharp.Threading.Tasks;
|
|
using Framework;
|
|
using PhxhSDK;
|
|
using UnityEngine;
|
|
|
|
namespace Gameplay.BT
|
|
{
|
|
public partial class BTImplement : Singlenton<BTImplement>
|
|
{
|
|
private BehaviorManager _behaviorManager;
|
|
|
|
public void Init()
|
|
{
|
|
try
|
|
{
|
|
var gameObject = new GameObject();
|
|
gameObject.name = "BehaviorManager";
|
|
_behaviorManager = gameObject.AddComponent<BehaviorManager>();
|
|
_behaviorManager.UpdateInterval = UpdateIntervalType.Manual;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
DebugUtil.LogError(" BTImplement Init error: {0}", e.Message);
|
|
}
|
|
|
|
DebugUtil.Log($" BTImplement Init success");
|
|
}
|
|
|
|
public void Update(float deltaTime)
|
|
{
|
|
_behaviorManager.Update();
|
|
}
|
|
|
|
public void Release()
|
|
{
|
|
ClearPool();
|
|
DebugUtil.Log("BTImplement Release success");
|
|
}
|
|
|
|
public async UniTask<BehaviorTree> RegisterAI(GameObject go, string aiName, bool enable)
|
|
{
|
|
try
|
|
{
|
|
var bt = go.GetComponent<BehaviorTree>();
|
|
if (bt == null)
|
|
{
|
|
bt = go.AddComponent<BehaviorTree>();
|
|
bt.StartWhenEnabled = false;
|
|
}
|
|
|
|
bt.enabled = enable;
|
|
bt.DisableBehavior();
|
|
bt.ExternalBehavior = await GetBehavior(aiName);
|
|
bt.StartWhenEnabled = enable;
|
|
bt.EnableBehavior();
|
|
|
|
DebugUtil.LogG($"BT gameObject {go.name} register ai: {aiName}");
|
|
return bt;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
DebugUtil.LogError("RegisterAI error: {0}, aiName: {1}, go: {2}", e.Message, aiName, go.name);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public void UnRegisterAI(GameObject go)
|
|
{
|
|
try
|
|
{
|
|
var bt = go.GetComponent<BehaviorTree>();
|
|
if (bt == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
bt.DisableBehavior();
|
|
bt.StartWhenEnabled = false;
|
|
ReleaseBehavior(bt.ExternalBehavior.name, bt.ExternalBehavior);
|
|
bt.ExternalBehavior = null;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
DebugUtil.LogError("UnRegisterAI error: {0}, go: {1}", e.Message, go.name);
|
|
}
|
|
}
|
|
}
|
|
} |