Udemy-Unity制作类暗黑破坏神游戏记录-P127

2024-09-28
145看过
创建角色的状态系统,教程中为了后续分类,将Health的命名空间改为 RPG.Resources,修改完成之后注意修复引入错误

CharacterClass

  1. namespace RPG.Stats
  2. {
  3.    public enum CharacterClass
  4.     {
  5.         Player,
  6.         Grunt,
  7.         Mage,
  8.         Archer
  9.     }
  10. }
复制代码
Progression

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. namespace RPG.Stats
  5. {
  6.     /// <summary>  
  7.     /// 角色属性成长系统,用于定义不同角色类(职业)在不同等级下的属性值。  
  8.     /// </summary>  
  9.     [CreateAssetMenu(fileName = "Progression", menuName = "Stats/New Progression", order = 0)]
  10.     public class Progression : ScriptableObject
  11.     {
  12.         /// <summary>  
  13.         /// 存储不同角色类(职业)及其对应的属性成长数据。  
  14.         /// </summary>  
  15.         [SerializeField] ProgressionCharacterClass[] characterClasses = null;
  16.         /// <summary>  
  17.         /// 根据角色类(职业)和等级获取生命值。  
  18.         /// </summary>  
  19.         /// <param name="characterClass">角色类(职业)</param>  
  20.         /// <param name="level">角色的等级</param>  
  21.         /// <returns>返回指定角色类和等级下的生命值。</returns>  
  22.         public float GetHealth(CharacterClass characterClass,int level)
  23.         {
  24.             // 遍历所有角色类成长数据
  25.             foreach (ProgressionCharacterClass progressionClass in characterClasses)
  26.             {
  27.                 // 如果找到匹配的角色类  
  28.                 if (progressionClass.characterClass == characterClass)
  29.                 {
  30.                     // 返回该角色类在指定等级下的生命值  
  31.                     // 注意:数组索引从0开始,但等级可能从1开始,因此使用level-1作为索引
  32.                     return progressionClass.health[level - 1];
  33.                 }
  34.             }
  35.             return 0;// 如果没有找到匹配的角色类,返回0作为默认值  
  36.         }
  37.         /// <summary>  
  38.         /// 可序列化的类,用于存储单个角色类(职业)的属性成长数据。  
  39.         /// </summary>  
  40.         [System.Serializable]
  41.         class ProgressionCharacterClass
  42.         {
  43.               
  44.             public CharacterClass characterClass;/// 角色类(职业)的引用。
  45.             public float[] health;//存储该角色类在不同等级下的生命值数组
  46.         }
  47.     }
  48. }
复制代码
BaseStats

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. namespace RPG.Stats
  5. {
  6.     // 基础状态类,用于存储和计算角色的基础属性
  7.     public class BaseStats : MonoBehaviour
  8.     {
  9.         [Range(1,99)]
  10.         [SerializeField] int startingLevel = 1; /// 角色的起始等级
  11.         [SerializeField] CharacterClass characterClass; /// 角色的职业
  12.         [SerializeField] Progression progression = null;/// 角色的属性成长系统
  13.         // <summary>  
  14.         // 获取角色的当前生命值。  
  15.         // 该方法通过Progression类的GetHealth方法,根据角色的职业和起始等级来计算生命值。  
  16.         // </summary>  
  17.         // <returns>返回计算后的生命值。</returns>  
  18.         public float GetHealth()
  19.         {
  20.             return progression.GetHealth(characterClass,startingLevel);
  21.         }
  22.     }
  23. }
复制代码


回复

举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表