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

59 lines
1.7 KiB
C#
Raw Normal View History

2023-08-22 19:08:45 +08:00
using BehaviorDesigner.Runtime;
using Cysharp.Threading.Tasks;
2023-10-19 15:00:19 +08:00
using PhxhSDK;
2023-08-22 19:08:45 +08:00
using UnityEngine;
2023-10-19 15:00:19 +08:00
using Constants = Framework.Constants;
2023-08-22 19:08:45 +08:00
namespace Gameplay.BT
{
public partial class BTImplement
{
public class AssetEntry
{
2023-10-19 15:00:19 +08:00
public ExternalBehavior Asset;
2023-08-22 19:08:45 +08:00
public ExternalBehavior InstanceExternalBehavior()
{
2023-10-19 15:00:19 +08:00
var externalBehavior = Object.Instantiate(Asset);
externalBehavior.name = Asset.name;
2023-08-22 19:08:45 +08:00
externalBehavior.Init();
return externalBehavior;
}
}
private async UniTask<AssetEntry> LoadBehaviorAsset(string behaviorName)
{
var path = string.Format(Constants.AI_ASSET_FORMAT_PATH, behaviorName);
2024-03-05 15:20:45 +08:00
if (_loadedRecord.ContainsKey(path))
{
_loadedRecord[path]++;
}
else
{
_loadedRecord.Add(path, 1);
}
2023-10-19 15:00:19 +08:00
var externalBehavior = await AssetManager.Instance.LoadAssetAsync<ExternalBehavior>(path);
2023-08-22 19:08:45 +08:00
if (externalBehavior == null)
{
2023-10-19 15:00:19 +08:00
DebugUtil.LogError("LoadBehavior.LoadBehavior failed, can not find behavior: {0}", path);
2023-08-22 19:08:45 +08:00
}
2023-10-19 15:00:19 +08:00
return new AssetEntry{Asset = externalBehavior};
2023-08-22 19:08:45 +08:00
}
2024-03-05 15:20:45 +08:00
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();
}
2023-08-22 19:08:45 +08:00
}
}