using System.Collections.Generic; using UnityEngine; using Valheim; public class SkillManager : MonoBehaviour { // 技能ID -> 技能逻辑 private Dictionary skillLogicDict = new Dictionary(); public void Init() { foreach (var data in GameManager.Ins.SkillDataList.Values) { SkillLogicBase logic = CreateSkillLogicByType(data); if (logic != null) { logic.skillData = data; skillLogicDict[data.SkillId] = logic; } } } // 根据 SkillType 不同,创建不同子类 private SkillLogicBase CreateSkillLogicByType(SkillData data) { switch (data.SkillType) { case ESkillType.SingleAttack: return ScriptableObject.CreateInstance(); case ESkillType.RangeAttack: // 这里可写一个 RangeAttackSkill 类 return ScriptableObject.CreateInstance(); case ESkillType.DotAttack: // 同理 return ScriptableObject.CreateInstance(); case ESkillType.Buff: // 同理 return ScriptableObject.CreateInstance(); default: Debug.LogWarning($"未知技能类型: {data.SkillType}"); return null; } } // 对外提供获取技能逻辑的方法 public SkillLogicBase GetSkillLogic(int skillId) { if (skillLogicDict.ContainsKey(skillId)) { return skillLogicDict[skillId]; } return null; } }