using UnityEngine; public class ShieldGuardSkill : UnitSkill { [Header("盾牌参数")] [Min(1f)] public float shieldDurability = 220f; [Min(0.1f)] public float shieldDuration = 4f; [Range(0f, 1f)] public float damageReduction = 0.35f; public Vector3 shieldLocalPosition = new Vector3(0f, 1f, 0.7f); public Vector3 shieldSize = new Vector3(1.5f, 1.8f, 0.12f); private ShieldBarrier shield; public ShieldBarrier ActiveShield => shield; public override void ReleaseSkill() { EnsureShield(); shield.Refresh(shieldDurability, shieldDuration, shieldLocalPosition, shieldSize); } public override float ModifyIncomingDamage(float damage, GameObject attacker) { if (shield == null || !shield.IsActive) { return damage; } if (shield.TryBlock(attacker, damage)) { return damage * (1f - damageReduction); } return damage; } private void EnsureShield() { if (shield != null) { return; } GameObject shieldObject = new GameObject("ShieldBarrier"); shieldObject.transform.SetParent(unit.transform, false); BoxCollider boxCollider = shieldObject.AddComponent(); boxCollider.isTrigger = true; boxCollider.size = shieldSize; shield = shieldObject.AddComponent(); shield.Configure(unit, boxCollider); shieldObject.SetActive(false); } }