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
|
|
|
}
|
|
|
|
|
}
|