From 8534d974a973b566097472bbff64a71175fb9384 Mon Sep 17 00:00:00 2001 From: huadexuan <491009149@qq.com> Date: Thu, 8 Oct 2026 00:08:46 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(PlayerSkillSystem):=20=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E5=A4=A9=E9=9B=B7=E7=8B=82=E8=BD=B0=E6=8A=80=E8=83=BD?= =?UTF-8?q?=E7=89=B9=E6=95=88=E5=92=8C=E4=BC=A4=E5=AE=B3=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加技能2特效配置,包括落雷击中特效和雷暴全屏光环特效 - 更新技能2名称从"全屏AOE伤害"为"全屏天雷狂轰伤害" - 实现屏幕中央触发全屏雷暴光环效果 - 添加交错落雷机制,对敌方单位进行精确打击 - 支持无敌人时在敌方阵地随机散落震撼天雷 - 优化伤害计算和冷却逻辑 - 同步更新技能日志信息和代码注释 ``` --- Assets/Scenes/DefenseTest.scene | Bin 163684 -> 163996 bytes Assets/Scripts/技能脚本/PlayerSkillSystem.cs | 97 ++++++++++++++++--- CODELY.md | 1 + 3 files changed, 87 insertions(+), 11 deletions(-) diff --git a/Assets/Scenes/DefenseTest.scene b/Assets/Scenes/DefenseTest.scene index 73a6a95d8328f7b2225603bbe89a91abcf9a2f94..c947bd059cce366596182792d87aeb0c191277e5 100644 GIT binary patch delta 8792 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 WTx(oa5z}&v=fko6E1QktkpBb1F@LK7 delta 8904 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 diff --git a/Assets/Scripts/技能脚本/PlayerSkillSystem.cs b/Assets/Scripts/技能脚本/PlayerSkillSystem.cs index e2ed15d..cd28b81 100644 --- a/Assets/Scripts/技能脚本/PlayerSkillSystem.cs +++ b/Assets/Scripts/技能脚本/PlayerSkillSystem.cs @@ -33,6 +33,10 @@ public class PlayerSkillSystem : MonoBehaviour 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; @@ -277,7 +281,7 @@ public class PlayerSkillSystem : MonoBehaviour } /// - /// 使用技能2:全屏AOE伤害 + /// 使用技能2:全屏天雷狂轰伤害 /// public void UseSkill2() { @@ -287,32 +291,103 @@ public class PlayerSkillSystem : MonoBehaviour } float finalDamage = skill2Damage * powerMultiplier; - Debug.Log($"释放技能2:全屏AOE(造成 {finalDamage:F1} 伤害,威力倍率: {powerMultiplier:F2})"); + Debug.Log($"释放技能2:天雷狂轰(造成 {finalDamage:F1} 伤害,威力倍率: {powerMultiplier:F2})"); - // 对所有敌方单位造成伤害 - var enemies = FindObjectsOfType(); - int hitCount = 0; - - foreach (var unit in enemies) + // 加载特效资源 + GameObject strikePrefab = lightningStrikePrefab; +#if UNITY_EDITOR + if (strikePrefab == null) { + strikePrefab = UnityEditor.AssetDatabase.LoadAssetAtPath("Assets/TJGeneratorLibEffects/Prefabs/Combat/Explosions/LightningExplosion/LightningExplosionBlue.prefab"); + } +#endif + + GameObject novaPrefab = lightningNovaPrefab; +#if UNITY_EDITOR + if (novaPrefab == null) + { + novaPrefab = UnityEditor.AssetDatabase.LoadAssetAtPath("Assets/TJGeneratorLibEffects/Prefabs/Combat/Nova/Lightning/NovaLightningBlue.prefab"); + } +#endif + + // 1. 屏幕中央触发全屏雷暴光环 + if (novaPrefab != null) + { + Vector3 centerPos = new Vector3(0f, 0.1f, 0f); + var novaGo = Instantiate(novaPrefab, centerPos, novaPrefab.transform.rotation); + Destroy(novaGo, 3.5f); + } + + // 2. 检索所有活着的敌方单位 + var allUnits = FindObjectsOfType(); + var targetEnemies = new System.Collections.Generic.List(); + + foreach (var unit in allUnits) + { + if (unit == null || !unit.gameObject.activeInHierarchy) continue; var team = unit.GetComponent(); if (team != null && team.teamId == 1) // 敌方 { var healthBar = unit.GetComponent(); if (healthBar != null && !healthBar.IsDead) { - healthBar.TakeDamage(finalDamage); - hitCount++; + targetEnemies.Add(unit); } } } - Debug.Log($"全屏AOE命中 {hitCount} 个敌人"); + StartCoroutine(ExecuteLightningStrikesRoutine(targetEnemies, strikePrefab, finalDamage)); // 开始冷却 skill2RemainingCooldown = skill2Cooldown * cooldownMultiplier; + } - // TODO: 播放技能特效 + private System.Collections.IEnumerator ExecuteLightningStrikesRoutine( + System.Collections.Generic.List targetEnemies, + GameObject strikePrefab, + float finalDamage) + { + if (targetEnemies.Count > 0) + { + // 敌群交错落雷 + for (int i = 0; i < targetEnemies.Count; i++) + { + var enemy = targetEnemies[i]; + if (enemy != null && enemy.gameObject.activeInHierarchy) + { + Vector3 strikePos = enemy.transform.position; + strikePos.y = 0.1f; + + if (strikePrefab != null) + { + var strikeGo = Instantiate(strikePrefab, strikePos, strikePrefab.transform.rotation); + Destroy(strikeGo, 3f); + } + + var healthBar = enemy.GetComponent(); + if (healthBar != null && !healthBar.IsDead) + { + healthBar.TakeDamage(finalDamage); + } + } + + yield return new WaitForSeconds(0.08f); // 80毫秒交错落雷节奏 + } + } + else + { + // 无敌人时在敌方阵地随机散落 6 道震撼天雷 + for (int i = 0; i < 6; i++) + { + Vector3 randomPos = new Vector3(Random.Range(-5f, 5f), 0.1f, Random.Range(2f, 12f)); + if (strikePrefab != null) + { + var strikeGo = Instantiate(strikePrefab, randomPos, strikePrefab.transform.rotation); + Destroy(strikeGo, 3f); + } + yield return new WaitForSeconds(0.08f); + } + } } /// diff --git a/CODELY.md b/CODELY.md index 9111422..863f13b 100644 --- a/CODELY.md +++ b/CODELY.md @@ -143,6 +143,7 @@ - [2026-10-07 17:32:11] 召唤师技能治疗特效实现:使用 ParabolaFlyObject 驱动 GlowOrbGreen 飞球 (Assets/TJGeneratorLibEffects/Prefabs/Interactive/Loot/GlowOrb/GlowOrbGreen.prefab) 抛物线飞行至阵地中心,落地瞬间触发 2.5 倍缩放的 HealNova 粒子冲击波 (Assets/TJGeneratorLibEffects/Prefabs/Interactive/Healing/HealNova.prefab),并在此时调用 BuffSystem.Instance.ApplyGroupHeal 结算恢复。 - [2026-10-07 16:22:52] 法师技能与特效配置更新:法师 projectilePrefab 统一使用 FireballSharpMissileFire.prefab,并且命中落地触发 MagicExplosionFire.prefab 爆破,具体资产路径已同步更新至《召唤之战-角色与技能说明.md》。 +- [2026-10-08 00:04:53] 天雷狂轰技能实现:点击释放时在全屏中心激发 NovaLightningBlue 蓝闪电光环,同时按 80ms 节奏交错向全场敌方单位头顶劈下 LightningExplosionBlue 落雷(无敌人时在阵地随机轰炸 6 道),造成最终结算伤害并弹出漂字。具体路径与配置已同步写入项目。 ### Reference - [2026-09-09 12:23:17] 飞行物脚本 Projectile.cs 负责锁敌追踪、碰撞检测和伤害结算。箭矢预制体 ArrowProjectile_White.prefab 已配置 Projectile 组件和 CapsuleCollider(Is Trigger)。远程单位需在攻击动画松弦帧添加 OnAttackEffect Event,并在 UnitBase 中设置 attackType=RangedProjectile、projectilePrefab、projectileSpawnPoint。