feat(enemy): AbilityRef——AI 层能力引用资产化,字符串仅作定制脚本兜底

This commit is contained in:
2026-07-29 11:22:15 +08:00
parent fd238b71f1
commit 474e89de3a
4 changed files with 101 additions and 0 deletions
@@ -0,0 +1,46 @@
using NUnit.Framework;
using UnityEngine;
using BaseGames.Enemies.Abilities;
namespace BaseGames.Tests.EditMode.AI
{
public class AbilityRefTests
{
[Test]
public void ImplicitFromString_ExposesLiteralId()
{
AbilityRef r = "e001_chase";
Assert.AreEqual("e001_chase", r.Id);
Assert.IsFalse(r.IsEmpty);
}
[Test]
public void FromAsset_ExposesAssetAbilityId()
{
var so = ScriptableObject.CreateInstance<EnemyAbilitySO>();
so.abilityId = "from_asset";
AbilityRef r = so;
Assert.AreEqual("from_asset", r.Id);
Object.DestroyImmediate(so);
}
[Test]
public void Default_IsEmpty()
{
var r = default(AbilityRef);
Assert.IsTrue(r.IsEmpty);
Assert.IsNull(r.Id);
}
[Test]
public void AssetWins_WhenBothSet()
{
var so = ScriptableObject.CreateInstance<EnemyAbilitySO>();
so.abilityId = "asset_id";
var r = new AbilityRef(so, "literal_id");
Assert.AreEqual("asset_id", r.Id);
Assert.IsTrue(r.HasConflict); // 供校验器报警告
Object.DestroyImmediate(so);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 30c3cfb4f5ff62f4691343a1ab594f7a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: