using BehaviorDesigner.Runtime; using Cysharp.Threading.Tasks; using PhxhSDK; using UnityEngine; using Constants = Framework.Constants; namespace Gameplay.BT { public partial class BTImplement { public class AssetEntry { public ExternalBehavior Asset; public ExternalBehavior InstanceExternalBehavior() { var externalBehavior = Object.Instantiate(Asset); externalBehavior.name = Asset.name; externalBehavior.Init(); return externalBehavior; } } private async UniTask LoadBehaviorAsset(string behaviorName) { var path = string.Format(Constants.AI_ASSET_FORMAT_PATH, behaviorName); if (_loadedRecord.ContainsKey(path)) { _loadedRecord[path]++; } else { _loadedRecord.Add(path, 1); } var externalBehavior = await AssetManager.Instance.LoadAssetAsync(path); if (externalBehavior == null) { DebugUtil.LogError("LoadBehavior.LoadBehavior failed, can not find behavior: {0}", path); } return new AssetEntry{Asset = externalBehavior}; } public void UnloadAllRes() { foreach (var kv in _loadedRecord) { var path = kv.Key; var count = kv.Value; for (var i = 0; i < count; i++) { AssetManager.Instance.Unload(path); } } _loadedRecord.Clear(); } } }