(unity/c#)反射为类赋值小工具

string参数为需要修改的变量,dynamic需要一个int/float数值,将从playvalue类中检索对应变量修改数值

 public static class playerValue
    {
        public static int MeleeDMG;//近战伤害
        public static int RangedDMG;//远程伤害
        public static int MagicDMG;//魔法伤害
        public static int DEF;//防御力
        public static int HP;//生命值
        public static int MP;//法力值
        public static float MagicSPD;//技能极速
        public static float MoveSpeed;//移动速度
        public static float ATKSpeed;//攻击速度
        public static float Suck;//吸血
        public static float Element;//元素加成
        public static float Penetrate;//护甲穿透
        public static float CRIT;//暴击率
        public static float CRITDMG;//暴击伤害
        public static float HPReply;//生命回复
        public static float MPReply;//魔法回复
    }
    

  void IncreaseValue(string variableName, dynamic amount)
     {
         System.Type type = typeof(playerValue);
         System.Reflection.FieldInfo field = type.GetField(variableName);
         
         if (field != null)
         {
             if (field.FieldType == typeof(int))
             {
                 int currentValue = (int)field.GetValue(null);
                 int newValue = currentValue + (int)amount;
                 field.SetValue(null, newValue);
             }
             else if (field.FieldType == typeof(float))
             {
                 float currentValue = (float)field.GetValue(null);
                 float newValue = currentValue + amount;
                 field.SetValue(null, newValue);
             }
             else
             {
                 Debug.LogError("Unsupported field type.");
             }
         }
         else
         {
             Debug.LogError("Field not found.");
         }
     }

猜你喜欢

转载自blog.csdn.net/qq_58804985/article/details/132512034