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

94 lines
2.6 KiB
C#
Raw Normal View History

2023-08-22 19:08:45 +08:00
using System;
2023-10-19 15:00:19 +08:00
using PhxhSDK;
2023-08-22 19:08:45 +08:00
using UnityEngine;
2024-09-18 14:38:27 +08:00
using Cysharp.Threading.Tasks;
using BehaviorDesigner.Runtime;
2023-08-22 19:08:45 +08:00
namespace Gameplay.BT
{
public partial class BTImplement : Singlenton<BTImplement>
{
private BehaviorManager _behaviorManager;
2024-09-14 15:12:37 +08:00
2023-08-22 19:08:45 +08:00
public void Init()
{
try
{
var gameObject = new GameObject();
gameObject.name = "BehaviorManager";
_behaviorManager = gameObject.AddComponent<BehaviorManager>();
_behaviorManager.UpdateInterval = UpdateIntervalType.Manual;
}
catch (Exception e)
{
2023-10-19 15:00:19 +08:00
DebugUtil.LogError(" BTImplement Init error: {0}", e.Message);
2023-08-22 19:08:45 +08:00
}
2024-09-14 15:12:37 +08:00
2023-08-22 19:08:45 +08:00
DebugUtil.Log($" BTImplement Init success");
}
public void Update(float deltaTime)
{
_behaviorManager.Update();
}
public void Release()
{
ClearPool();
DebugUtil.Log("BTImplement Release success");
}
2024-09-18 14:38:27 +08:00
public BehaviorTree GetAITree(GameObject go)
{
return go.GetComponent<BehaviorTree>();
}
2024-09-14 15:12:37 +08:00
public async UniTask<BehaviorTree> RegisterAI(GameObject go, string aiName, bool enable)
2023-08-22 19:08:45 +08:00
{
try
{
var bt = go.GetComponent<BehaviorTree>();
if (bt == null)
{
bt = go.AddComponent<BehaviorTree>();
bt.StartWhenEnabled = false;
}
2024-09-18 14:38:27 +08:00
2023-08-22 19:08:45 +08:00
bt.DisableBehavior();
bt.ExternalBehavior = await GetBehavior(aiName);
2024-09-14 15:12:37 +08:00
bt.StartWhenEnabled = enable;
2023-08-22 19:08:45 +08:00
bt.EnableBehavior();
2024-09-14 15:12:37 +08:00
2023-10-19 15:00:19 +08:00
DebugUtil.LogG($"BT gameObject {go.name} register ai: {aiName}");
2023-08-22 19:08:45 +08:00
return bt;
}
catch (Exception e)
{
2023-10-19 15:00:19 +08:00
DebugUtil.LogError("RegisterAI error: {0}, aiName: {1}, go: {2}", e.Message, aiName, go.name);
2023-08-22 19:08:45 +08:00
}
return null;
}
public void UnRegisterAI(GameObject go)
{
try
{
var bt = go.GetComponent<BehaviorTree>();
if (bt == null)
{
return;
}
bt.DisableBehavior();
2023-10-19 15:00:19 +08:00
bt.StartWhenEnabled = false;
ReleaseBehavior(bt.ExternalBehavior.name, bt.ExternalBehavior);
2023-08-22 19:08:45 +08:00
bt.ExternalBehavior = null;
}
catch (Exception e)
{
2024-09-14 15:12:37 +08:00
DebugUtil.LogError("UnRegisterAI error: {0}, go: {1}", e.Message, go.name);
2023-08-22 19:08:45 +08:00
}
}
}
}