using System; using BehaviorDesigner.Runtime; using Cysharp.Threading.Tasks; using Framework; using PhxhSDK; using UnityEngine; namespace Gameplay.BT { public partial class BTImplement : Singlenton { private BehaviorManager _behaviorManager; public void Init() { try { var gameObject = new GameObject(); gameObject.name = "BehaviorManager"; _behaviorManager = gameObject.AddComponent(); _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 RegisterAI(GameObject go, string aiName) { try { var bt = go.GetComponent(); if (bt == null) { bt = go.AddComponent(); bt.StartWhenEnabled = false; } bt.DisableBehavior(); bt.ExternalBehavior = await GetBehavior(aiName); bt.StartWhenEnabled = true; 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(); 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); } } } }