角色能力,存档

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

@@ -19,11 +19,24 @@ namespace BaseGames.Skills
[SerializeField] private PlayerStats _stats;
[SerializeField] private AnimancerComponent _animancer;
[SerializeField] private InputReaderSO _input;
[SerializeField] private FormController _formController;
[SerializeField] private SkillModifierRegistry _modifiers;
[Header("技能挂载点")]
[SerializeField] private Transform _skillSocket; // [SkillSocket] 子节点
[Header("形态技能映射")]
[SerializeField] private FormSkillSet[] _formSkillSets; // 按 FormType 配置,与 FormConfigSO.forms[] 对应
[System.Serializable]
private struct FormSkillSet
{
public FormType formType;
public FormSkillSO soulSkill;
public FormSkillSO spiritSkill1;
public FormSkillSO spiritSkill2;
}
// 当前形态技能集(绑定到对应输入槽)
private FormSkillSO _soulSkill;
private FormSkillSO _spirit1;
@@ -37,18 +50,49 @@ namespace BaseGames.Skills
// ── 生命周期 ──────────────────────────────────────────────────────────
private void OnEnable()
{
if (_input == null) return;
_input.SoulSkillEvent += TrySoulSkill;
_input.SpiritSkill1StartedEvent += TrySpiritSkill1;
_input.SpiritSkill2StartedEvent += TrySpiritSkill2;
if (_input != null)
{
_input.SoulSkillEvent += TrySoulSkill;
_input.SpiritSkill1StartedEvent += TrySpiritSkill1;
_input.SpiritSkill2StartedEvent += TrySpiritSkill2;
}
if (_formController != null)
{
_formController.OnFormChanged += OnFormChanged;
// 立即同步当前形态的技能集
ApplyFormSkills(_formController.CurrentForm);
}
}
private void OnDisable()
{
if (_input == null) return;
_input.SoulSkillEvent -= TrySoulSkill;
_input.SpiritSkill1StartedEvent -= TrySpiritSkill1;
_input.SpiritSkill2StartedEvent -= TrySpiritSkill2;
if (_input != null)
{
_input.SoulSkillEvent -= TrySoulSkill;
_input.SpiritSkill1StartedEvent -= TrySpiritSkill1;
_input.SpiritSkill2StartedEvent -= TrySpiritSkill2;
}
if (_formController != null)
_formController.OnFormChanged -= OnFormChanged;
}
private void OnFormChanged()
{
ApplyFormSkills(_formController.CurrentForm);
}
private void ApplyFormSkills(FormSO form)
{
if (form == null || _formSkillSets == null) { UpdateSkillSet(null, null, null); return; }
foreach (var s in _formSkillSets)
{
if (s.formType == form.formType)
{
UpdateSkillSet(s.soulSkill, s.spiritSkill1, s.spiritSkill2);
return;
}
}
UpdateSkillSet(null, null, null);
}
private void Update()