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

88 lines
2.5 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
{
2025-04-09 14:24:28 +08:00
var gameObject = new GameObject
{
name = "BehaviorManager"
};
2023-08-22 19:08:45 +08:00
_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");
}
2025-04-08 19:40:43 +08:00
public async UniTask<BehaviorTree> RegisterAI(GameObject go, string aiName)
2023-08-22 19:08:45 +08:00
{
try
{
var bt = go.GetComponent<BehaviorTree>();
if (bt == null)
{
bt = go.AddComponent<BehaviorTree>();
2025-04-09 14:24:28 +08:00
// 默认关闭AI
2023-08-22 19:08:45 +08:00
bt.StartWhenEnabled = false;
}
2024-12-06 18:59:22 +08:00
2023-08-22 19:08:45 +08:00
bt.DisableBehavior();
bt.ExternalBehavior = await GetBehavior(aiName);
2025-04-02 13:41:21 +08:00
bt.RestartWhenComplete = !string.Equals(aiName, "AIBehavior");
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
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
}
}
}
}