Files
valheim/Assets/_Valheim/Scripts/Skill/SkillManager.cs
2025-07-04 14:16:14 +08:00

55 lines
1.7 KiB
C#

using System.Collections.Generic;
using UnityEngine;
using Valheim;
public class SkillManager : MonoBehaviour
{
// 技能ID -> 技能逻辑
private Dictionary<int, SkillLogicBase> skillLogicDict = new Dictionary<int, SkillLogicBase>();
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<SingleAttackSkill>();
case ESkillType.RangeAttack:
// 这里可写一个 RangeAttackSkill 类
return ScriptableObject.CreateInstance<RangeAttackSkill>();
case ESkillType.DotAttack:
// 同理
return ScriptableObject.CreateInstance<DotAttackSkill>();
case ESkillType.Buff:
// 同理
return ScriptableObject.CreateInstance<BuffSkill>();
default:
Debug.LogWarning($"未知技能类型: {data.SkillType}");
return null;
}
}
// 对外提供获取技能逻辑的方法
public SkillLogicBase GetSkillLogic(int skillId)
{
if (skillLogicDict.ContainsKey(skillId))
{
return skillLogicDict[skillId];
}
return null;
}
}