在属性系统中将其他的属性声明并序列化,按照角色类型,基础属性,属性类型,等级等,方便在Unity中设置
Progression
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- namespace RPG.Stats
- {
- /// <summary>
- /// 角色属性成长系统,用于定义不同角色类(职业)在不同等级下的属性值。
- /// </summary>
- [CreateAssetMenu(fileName = "Progression", menuName = "Stats/New Progression", order = 0)]
- public class Progression : ScriptableObject
- {
- /// <summary>
- /// 存储不同角色类(职业)及其对应的属性成长数据。
- /// </summary>
- [SerializeField] ProgressionCharacterClass[] characterClasses = null;
-
- /// <summary>
- /// 根据角色类(职业)和等级获取生命值。
- /// </summary>
- /// <param name="characterClass">角色类(职业)</param>
- /// <param name="level">角色的等级</param>
- /// <returns>返回指定角色类和等级下的生命值。</returns>
- public float GetStat(Stat stat, CharacterClass characterClass,int level)
- {
- // 遍历角色职业类
- foreach (ProgressionCharacterClass progressionClass in characterClasses)
- {
- // 如果当前职业类与目标职业类不匹配,则跳过
- if (progressionClass.characterClass != characterClass) continue;
-
- // 遍历当前职业类的属性
- foreach (ProgressionStat progressionStat in progressionClass.stats)
- {
- if (progressionStat.stat != stat) continue; // 如果当前属性与目标属性不匹配,则跳过
-
- if (progressionStat.levels.Length < level) continue; // 如果属性等级数组长度小于目标等级,则跳过
-
- return progressionStat.levels[level - 1]; // 返回指定等级的属性值
- }
-
- }
- return 0;// 如果没有找到匹配的角色类,返回0作为默认值
- }
-
- /// <summary>
- /// 可序列化的类,用于存储单个角色类(职业)的属性成长数据。
- /// </summary>
- [System.Serializable]
- class ProgressionCharacterClass
- {
- [Header("角色类型")]
- public CharacterClass characterClass;/// 角色类(职业)的引用。
- [Header("基础属性")]
- public ProgressionStat[] stats;
-
- }
-
- [System.Serializable]
- class ProgressionStat
- {
- [Header("属性类型")]
- public Stat stat;//状态枚举的引用
- [Header("等级")]
- public float[] levels;//等级
- }
- }
- }
复制代码
BaseStats
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- namespace RPG.Stats
- {
- // 基础状态类,用于存储和计算角色的基础属性
- public class BaseStats : MonoBehaviour
- {
-
- [Range(1,99)]
- [SerializeField] int startingLevel = 1; /// 角色的起始等级
- [SerializeField] CharacterClass characterClass; /// 角色的职业
- [SerializeField] Progression progression = null;/// 角色的属性成长系统
-
-
- /// <summary>
- /// 获取角色的当前生命值。
- /// 该方法通过Progression类的GetHealth方法,根据角色的职业和起始等级来计算生命值。
- /// </summary>
- /// <returns>返回计算后的生命值。</returns>
- public float GetStat(Stat stat)
- {
- return progression.GetStat(stat,characterClass,startingLevel);
- }
- }
- }
-
复制代码
Health
复制代码
|