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