角色能力,存档
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user