using UnityEngine; using UnityEngine.UI; /// /// 玩家技能系统(召唤师技能) /// 管理技能释放和冷却 /// public class PlayerSkillSystem : MonoBehaviour { public static PlayerSkillSystem Instance { get; private set; } [Header("战术增益加成倍率")] public float cooldownMultiplier = 1f; // 冷却缩减倍率 (如 0.9 = CD 缩减 10%) public float powerMultiplier = 1f; // 威力加成倍率 (如 1.15 = 效果提升 15%) [Header("技能1:群体治疗")] public Button skill1Button; public Text skill1CooldownText; public float skill1Cooldown = 20f; public float skill1HealAmount = 100f; private float skill1RemainingCooldown = 0f; [Header("技能1特效配置")] public GameObject cureBallPrefab; // 飞球预制体 (Assets/Prefabs/特效/飞球/cureBall.prefab) public GameObject healNovaPrefab; // 治疗冲击波预制体 (Assets/TJGeneratorLibEffects/Prefabs/Interactive/Healing/HealNova.prefab) public Transform castStartTransform; // 技能施放起点 (如未指定默认摄像机下方或召唤师位置) public Vector3 castTargetPosition = new Vector3(0f, 0.1f, -9f); // 我方阵地中心落地点 [Header("技能2:全屏AOE")] public Button skill2Button; public Text skill2CooldownText; public float skill2Cooldown = 20f; public float skill2Damage = 80f; private float skill2RemainingCooldown = 0f; [Header("技能2特效配置")] public GameObject lightningStrikePrefab; // 落雷击中特效 (Assets/TJGeneratorLibEffects/Prefabs/Combat/Explosions/LightningExplosion/LightningExplosionBlue.prefab) public GameObject lightningNovaPrefab; // 雷暴全屏光环特效 (Assets/TJGeneratorLibEffects/Prefabs/Combat/Nova/Lightning/NovaLightningBlue.prefab) private void Awake() { Instance = this; } private void Start() { // 自动从场景或父节点绑定技能按钮与图标引用 EnsureSkillUIReferences(); // 从 PlayerData 加载玩家装备的 2 个召唤师技能图标 LoadEquippedSkillIcons(); // 绑定按钮点击事件 if (skill1Button != null) { skill1Button.onClick.AddListener(UseSkill1); } if (skill2Button != null) { skill2Button.onClick.AddListener(UseSkill2); } } private void EnsureSkillUIReferences() { var canvas = GameObject.Find("TowerDefenseCanvas"); if (canvas == null) return; var skillsPanel = canvas.transform.Find("BottomUI/SkillsPanel"); if (skillsPanel == null) return; if (skill1Button == null && skillsPanel.childCount > 0) { var item1 = skillsPanel.GetChild(0); skill1Button = item1.GetComponent