角色能力,存档

This commit is contained in:
2026-05-19 11:50:21 +08:00
parent d25f237e76
commit 2dcb7a961a
136 changed files with 36035 additions and 27551 deletions

View File

@@ -1,3 +1,4 @@
using BaseGames.Core;
using BaseGames.Core.Events;
using UnityEngine;
@@ -10,14 +11,16 @@ namespace BaseGames.Combat
/// 并携带 IgnoreIFrame 标记(无视翻滚/受击无敌帧,保证陷阱的绝对威胁性)。
/// ② 若伤害导致玩家死亡 → PlayerController.TakeDamage 已 Raise EVT_PlayerDied
/// 走完整死亡流程(死亡动画 → 重载场景)。
/// ③ 若玩家存活 → 本组件 Raise EVT_PlayerDied强制返回最近检查点
/// 同样触发 DeathRespawnService无死亡演出只是重新加载
/// ③ 若玩家存活且场景内有检查点 → Raise EVT_CheckpointRespawn
/// 由 CheckpointRespawnHandler 执行淡出→传送→淡入,不重载场景
/// ④ 若玩家存活但场景内无检查点 → Raise EVT_PlayerDied 作为兜底,
/// 仍由 DeathRespawnService 重载场景回到存档点。
///
/// 可下劈Pogo
/// - 将 _canPogo = true并在地刺顶部添加子 GameObject
/// · 挂 HurtBox 组件EnemyHurtBox 层)
/// · 父链上无 IDamageable → ReceiveDamage 无副作用HP 不扣除)
/// · 玩家下劈 HitBox 命中该 HurtBox → HitBox.OnHitConfirmed →
/// · 玩家下劈 HitBox 命中该 HurtBox → HitBox.OnHitConfirmed →
/// WeaponHitBoxInstance.OnDownHitConfirmed → DownAttackState.OnDownHitConfirmed
/// → Move.Jump() 完成弹跳,无需额外代码。
/// - _canPogo = false 则不添加顶部 HurtBox下劈时玩家仍受地刺伤害。
@@ -34,9 +37,12 @@ namespace BaseGames.Combat
[SerializeField] private LayerMask _playerLayers;
[Header("事件")]
[Tooltip("EVT_PlayerDied — 触发后由 DeathRespawnService 接管回到检查点")]
[Tooltip("EVT_PlayerDied — 玩家存活但场景内无检查点时触发,走完整死亡/重载流程")]
[SerializeField] private VoidEventChannelSO _onPlayerDied;
[Tooltip("EVT_CheckpointRespawn — 玩家存活且场景内有检查点时触发,执行原地传送")]
[SerializeField] private VoidEventChannelSO _onCheckpointRespawn;
[Header("设计")]
[Tooltip("true = 顶部有 HurtBox 子节点可下劈弹跳(需手动添加 Pogo Surface 子节点)")]
[SerializeField] private bool _canPogo = true;
@@ -85,9 +91,15 @@ namespace BaseGames.Combat
}
}
// ── 2. 若玩家存活(或无 HurtBox / damage=0强制触发检查点回溯 ───────────
// ── 2. 若玩家存活(或无 HurtBox / damage=0回溯至最近检查点 ────────────
if (!playerDiedFromDamage)
_onPlayerDied?.Raise();
{
var cp = ServiceLocator.GetOrDefault<ICheckpointService>();
if (cp != null && cp.HasCheckpoint)
_onCheckpointRespawn?.Raise();
else
_onPlayerDied?.Raise();
}
}
#if UNITY_EDITOR