Add WeaponFeedback component and AddressableManagerWindow meta file

- Implemented WeaponFeedback class for handling weapon-related feedbacks such as hit effects and attack sounds.
- Added meta file for AddressableManagerWindow to manage addressable assets.
- Included a new jump.data file for profiler data.
This commit is contained in:
2026-05-22 22:03:32 +08:00
parent 3e1f234ddc
commit b7baf7ad6a
44 changed files with 1783 additions and 1927 deletions

View File

@@ -82,6 +82,8 @@ namespace BaseGames.Player.States
? AnimCfg.DashInvincible
: AnimCfg?.Dash;
if (dashClip != null) Anim?.Play(dashClip);
Feedback.TriggerPreset("dash");
}
public override void OnStateUpdate()

View File

@@ -19,6 +19,8 @@ namespace BaseGames.Player.States
if (Owner.HurtBox != null)
Owner.HurtBox.SetActive(false);
Feedback.PlayDeath();
// 播放死亡动画
if (AnimCfg?.Dead != null)
Anim?.Play(AnimCfg.Dead);

View File

@@ -28,6 +28,7 @@ namespace BaseGames.Player.States
_timer = Owner.AnimConfig?.HurtDuration ?? 0.4f;
_ended = false;
Stats?.BeginInvincibility();
Feedback.PlayTakeHit();
if (AnimCfg?.Hurt != null)
{

View File

@@ -4,6 +4,7 @@ using Animancer;
using BaseGames.Core.Events;
using BaseGames.Input;
using BaseGames.Combat;
using BaseGames.Feedback;
using BaseGames.Parry;
using BaseGames.Skills;
@@ -35,6 +36,7 @@ namespace BaseGames.Player.States
// ── 战斗组件 ──────────────────────────────────────────────────────────
[Header("战斗")]
[SerializeField] private PlayerFeedback _feedback;
[SerializeField] private PlayerCombat _combat;
[SerializeField] private FormController _formController;
[SerializeField] private WeaponManager _weaponManager;
@@ -57,6 +59,8 @@ namespace BaseGames.Player.States
private InputBuffer _inputBuffer;
private bool _missingDependencyLogged;
private bool _dependenciesReady;
// DashState 在 Update 每帧访问TickCooldown + CanDash提前缓存避免重复 Dictionary 查找
private DashState _dashState;
/// <summary>
/// 当前腾空可用的额外跳跃次数(二段跳)。
/// 由 IdleState/RunState.OnStateEnter 落地时通过 ResetAirJumps() 重置;
@@ -128,6 +132,7 @@ namespace BaseGames.Player.States
public InputReaderSO Input => _inputReader;
public InputBuffer Buffer => _inputBuffer;
public IFeedbackPlayer Feedback => _feedback != null ? (IFeedbackPlayer)_feedback : NullFeedbackPlayer.Instance;
public PlayerCombat Combat => _combat;
public FormController Form => _formController;
public WeaponManager Weapon => _weaponManager;
@@ -272,6 +277,7 @@ namespace BaseGames.Player.States
{
_stats?.AddSoul(info.SoulGained);
_shield?.OnParrySuccess();
Feedback.PlayParrySuccess();
}
/// <summary>灵泉输入:地面且有剩余充能时转入 SpringState 使用一次。</summary>
@@ -301,7 +307,7 @@ namespace BaseGames.Player.States
return;
// 冲刺冷却计时
GetState<DashState>()?.TickCooldown(Time.deltaTime);
_dashState?.TickCooldown(Time.deltaTime);
_currentState?.OnStateUpdate();
@@ -309,7 +315,7 @@ namespace BaseGames.Player.States
_dbg_CurrentState = _currentState?.GetType().Name ?? "None";
_dbg_IsGrounded = _movement != null && _movement.IsGrounded;
_dbg_AirJumpsLeft = _airJumpsLeft;
_dbg_CanDash = GetState<DashState>()?.CanDash ?? false;
_dbg_CanDash = _dashState?.CanDash ?? false;
_dbg_IsInvincible = _stats != null && _stats.IsInvincible;
#endif
}
@@ -359,8 +365,9 @@ namespace BaseGames.Player.States
_states[typeof(HurtState)] = new HurtState(this);
_states[typeof(DeadState)] = new DeadState(this);
_states[typeof(SpringState)] = new SpringState(this);
_states[typeof(ParryState)] = new ParryState(this);
_states[typeof(SwimState)] = new SwimState(this);
_states[typeof(ParryState)] = new ParryState(this);
_states[typeof(SwimState)] = new SwimState(this);
_dashState = (DashState)_states[typeof(DashState)];
}
/// <summary>

View File

@@ -1,4 +1,5 @@
using Animancer;
using BaseGames.Feedback;
using BaseGames.Input;
using BaseGames.Player;
@@ -41,6 +42,7 @@ namespace BaseGames.Player.States
protected InputBuffer Buffer => _owner.Buffer;
protected PlayerMovement Move => _owner.Movement;
protected PlayerStats Stats => _owner.Stats;
protected IFeedbackPlayer Feedback => _owner.Feedback;
protected AnimancerComponent Anim => _owner.Animancer;
protected PlayerMovementConfigSO Cfg => _owner.MovConfig;
protected PlayerAnimationConfigSO AnimCfg => _owner.AnimConfig;

View File

@@ -49,8 +49,9 @@ namespace BaseGames.Player.States
private void OnSpringEnd()
{
// 前摇正常结束 → 执行回血
// 前摇正常结束 → 执行回血 + 反馈
Stats?.ApplySpringHeal();
Feedback.PlayHeal();
Owner.TransitionTo(Owner.GetState<IdleState>());
}
}