UI 系统
This commit is contained in:
46
Assets/_Game/Scripts/Skills/FormSkillDatabaseSO.cs
Normal file
46
Assets/_Game/Scripts/Skills/FormSkillDatabaseSO.cs
Normal file
@@ -0,0 +1,46 @@
|
||||
using UnityEngine;
|
||||
using BaseGames.Player;
|
||||
|
||||
namespace BaseGames.Skills
|
||||
{
|
||||
/// <summary>
|
||||
/// 形态技能数据库(<b>权威源</b>):FormType → 该形态的 3 个技能(1 魂技 + 2 魄技)。
|
||||
/// <para>
|
||||
/// <see cref="SkillManager"/>(执行)与 FormSkillPanel(展示)读<b>同一份</b>资产,消除数据重复。
|
||||
/// 放在 Skills 程序集而非 FormSO:因 BaseGames.Player 不能反向引用 BaseGames.Skills
|
||||
/// (Skills→Player 已有依赖,反向会循环),故技能引用不挂 FormSO(见 DesignSpec §06 与 asmdef 约束)。
|
||||
/// </para>
|
||||
/// 资产:Assets/_Game/Data/Skills/FormSkillDatabase.asset
|
||||
/// </summary>
|
||||
[CreateAssetMenu(menuName = "BaseGames/Skills/Form Skill Database", fileName = "FormSkillDatabase")]
|
||||
public class FormSkillDatabaseSO : ScriptableObject
|
||||
{
|
||||
[System.Serializable]
|
||||
public struct Entry
|
||||
{
|
||||
[Tooltip("此条目对应的形态。")]
|
||||
public FormType formType;
|
||||
[Tooltip("形态标题的本地化 Key(UI 表,如 FORM_TIANHUN)。供 FormSkillPanel 显示形态名。")]
|
||||
public string formLabelKey;
|
||||
[Tooltip("魂技(消耗灵力 / SoulPower)。")]
|
||||
public FormSkillSO soulSkill;
|
||||
[Tooltip("魄技 1(消耗魄元 / SpiritPower)。")]
|
||||
public FormSkillSO spiritSkill1;
|
||||
[Tooltip("魄技 2。")]
|
||||
public FormSkillSO spiritSkill2;
|
||||
}
|
||||
|
||||
[SerializeField] private Entry[] _entries;
|
||||
|
||||
public Entry[] Entries => _entries;
|
||||
|
||||
/// <summary>取指定形态的技能条目;找不到返回 default(三技能均 null)。</summary>
|
||||
public Entry GetByType(FormType type)
|
||||
{
|
||||
if (_entries != null)
|
||||
foreach (var e in _entries)
|
||||
if (e.formType == type) return e;
|
||||
return default;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/_Game/Scripts/Skills/FormSkillDatabaseSO.cs.meta
Normal file
11
Assets/_Game/Scripts/Skills/FormSkillDatabaseSO.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 812ef8f0ed1f58c469c7c35ace58b10f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -26,17 +26,8 @@ namespace BaseGames.Skills
|
||||
[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;
|
||||
}
|
||||
[Header("形态技能数据库(权威源,与 FormSkillPanel 共享同一资产)")]
|
||||
[SerializeField] private FormSkillDatabaseSO _skillDatabase; // FormType → 魂技/魄技1/魄技2
|
||||
|
||||
// 当前形态技能集(绑定到对应输入槽)
|
||||
private FormSkillSO _soulSkill;
|
||||
@@ -94,16 +85,9 @@ namespace BaseGames.Skills
|
||||
|
||||
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);
|
||||
if (form == null || _skillDatabase == null) { UpdateSkillSet(null, null, null); return; }
|
||||
var e = _skillDatabase.GetByType(form.formType);
|
||||
UpdateSkillSet(e.soulSkill, e.spiritSkill1, e.spiritSkill2);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
|
||||
Reference in New Issue
Block a user