创建角色的状态系统,教程中为了后续分类,将Health的命名空间改为 RPG.Resources,修改完成之后注意修复引入错误
CharacterClass
- namespace RPG.Stats
- {
- public enum CharacterClass
- {
- Player,
- Grunt,
- Mage,
- Archer
- }
- }
复制代码
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 GetHealth(CharacterClass characterClass,int level)
- {
- // 遍历所有角色类成长数据
- foreach (ProgressionCharacterClass progressionClass in characterClasses)
- {
- // 如果找到匹配的角色类
- if (progressionClass.characterClass == characterClass)
- {
- // 返回该角色类在指定等级下的生命值
- // 注意:数组索引从0开始,但等级可能从1开始,因此使用level-1作为索引
- return progressionClass.health[level - 1];
- }
- }
- return 0;// 如果没有找到匹配的角色类,返回0作为默认值
- }
-
- /// <summary>
- /// 可序列化的类,用于存储单个角色类(职业)的属性成长数据。
- /// </summary>
- [System.Serializable]
- class ProgressionCharacterClass
- {
-
- public CharacterClass characterClass;/// 角色类(职业)的引用。
- public float[] health;//存储该角色类在不同等级下的生命值数组
- }
- }
- }
复制代码
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 GetHealth()
- {
- return progression.GetHealth(characterClass,startingLevel);
- }
- }
- }
-
复制代码
|