NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/AI/BTImplement.cs

94 lines
2.6 KiB
C#

using System;
using PhxhSDK;
using UnityEngine;
using Cysharp.Threading.Tasks;
using BehaviorDesigner.Runtime;
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 BehaviorTree GetAITree(GameObject go)
{
return go.GetComponent<BehaviorTree>();
}
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.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);
}
}
}
}