C# 获取错误字段`BaseStats.BaseStats.hp';必须在控件离开构造函数之前完全赋值

C# 获取错误字段`BaseStats.BaseStats.hp';必须在控件离开构造函数之前完全赋值,c#,unity3d,C#,Unity3d,我试图弄明白这一点,但一直没能弄明白。无法将类型int隐式转换为BaseStats.Stat using UnityEngine; using System.Collections; public class BaseStats : MonoBehaviour { public struct baseStats { public string name; public int level; public Stat hp; public int ap;

我试图弄明白这一点,但一直没能弄明白。无法将类型
int
隐式转换为
BaseStats.Stat

using UnityEngine;
using System.Collections;

public class BaseStats : MonoBehaviour {

    public struct baseStats {
    public string name;
    public int level;
    public Stat hp;
    public int ap;

    public int strength;
    public int toughness;
    public int agility;
    public int intelligence;
    public int willPower;
    public int luck;

    public int attack;
    public int hitPercentage;
    public int defence;
    public int evasionPercentage;
    public int abilityAttack;
    public int abilityDefence;
    public int abilityDefencePercentage;

    public int exp;

        public baseStats(string Name, int Level, int Hp, int Ap, int Strength, int Toughness, int Agility, int Intelligence, int WillPower, int Luck, int Attack, int HitPercentage, int Defence, int EvasionPercentage, int AbilityAttack, int AbilityDefence, int AbilityDefencePercentage, int Exp) {
            name = Name;
            level = Level;
            hp = Hp;
            ap = Ap;

            strength = Strength;
            toughness = Toughness;
            agility = Agility;
            intelligence = Intelligence;
            willPower = WillPower;
            luck = Luck;

            attack = Attack;
            hitPercentage = HitPercentage;
            defence = Defence;
            evasionPercentage = EvasionPercentage;
            abilityAttack = AbilityAttack;
            abilityDefence = AbilityDefence;
            abilityDefencePercentage = AbilityDefencePercentage;

            exp = Exp;

        }
    }

    public class Stat {
        int current;
        int max;
    }

    void Start() {

        baseStats mainChar = new baseStats( 
            "Truth",
            99,
            9999,
            999,
            255,
            255,
            255,
            255,
            255,
            255,
            255,
            255,
            255,
            100,
            255,
            255, 
            100,
            7777777);

        print(mainChar.level);

    }
}
public Stat hp;

我正试图让惠普有一个电流和最大值,这就是教程教我的方法。不幸的是,本教程在unityscript中,而我想用c#和

在构造函数中进行编码,您要指定:

hp = Hp;
其中,您的参数
HP
类型为
int
,并且您已将字段
HP
定义为
Stat

using UnityEngine;
using System.Collections;

public class BaseStats : MonoBehaviour {

    public struct baseStats {
    public string name;
    public int level;
    public Stat hp;
    public int ap;

    public int strength;
    public int toughness;
    public int agility;
    public int intelligence;
    public int willPower;
    public int luck;

    public int attack;
    public int hitPercentage;
    public int defence;
    public int evasionPercentage;
    public int abilityAttack;
    public int abilityDefence;
    public int abilityDefencePercentage;

    public int exp;

        public baseStats(string Name, int Level, int Hp, int Ap, int Strength, int Toughness, int Agility, int Intelligence, int WillPower, int Luck, int Attack, int HitPercentage, int Defence, int EvasionPercentage, int AbilityAttack, int AbilityDefence, int AbilityDefencePercentage, int Exp) {
            name = Name;
            level = Level;
            hp = Hp;
            ap = Ap;

            strength = Strength;
            toughness = Toughness;
            agility = Agility;
            intelligence = Intelligence;
            willPower = WillPower;
            luck = Luck;

            attack = Attack;
            hitPercentage = HitPercentage;
            defence = Defence;
            evasionPercentage = EvasionPercentage;
            abilityAttack = AbilityAttack;
            abilityDefence = AbilityDefence;
            abilityDefencePercentage = AbilityDefencePercentage;

            exp = Exp;

        }
    }

    public class Stat {
        int current;
        int max;
    }

    void Start() {

        baseStats mainChar = new baseStats( 
            "Truth",
            99,
            9999,
            999,
            255,
            255,
            255,
            255,
            255,
            255,
            255,
            255,
            255,
            100,
            255,
            255, 
            100,
            7777777);

        print(mainChar.level);

    }
}
public Stat hp;

这就是您出现错误的原因,我相信您也希望将字段定义为
int
。另外,如果您遵循

则更好。问题是您通过构造函数传递一个
int
Hp
),然后将其分配给类型为
Stat
Hp
)的变量:

将构造函数更改为:

public baseStats(string Name, int Level, Stat Hp /*...*/){
    //...
}
编辑:

参数#3'无法将int'表达式转换为BaseStats.Stat类型' 以及与之匹配的最佳重载方法 BaseStats.BaseStats.BaseStats(字符串,int,BaseStats.Stat,int,int, int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int 一些无效的参数

第二个问题是,更改构造函数时还必须将正确的对象传递给构造函数:

baseStats mainChar = new baseStats( 
            "Truth",
            99,
            9999, //It's an int and you have to pass an object of type Stat
            999,
            255,
            255,
            255,
            255,
            255,
            255,
            255,
            255,
            255,
            100,
            255,
            255, 
            100,
            7777777);
将其更改为:

Stat myStat = new Stat(); //create the object needed

baseStats mainChar = new baseStats( 
            "Truth",
            99,
            myStat,  //pass it!
            999,
            255,
            255,
            255,
            255,
            255,
            255,
            255,
            255,
            255,
            100,
            255,
            255, 
            100,
            7777777);

首先,根据您提供的用法,
Stat
应该是
Enum
,而不是
class
-

public enum Stat
{
   int current;
   int max;
}
这是一个类型转换问题。将参数作为枚举(Stat)传递-

或在赋值前将其键入枚举(Stat)-

hp = (Stat)Hp;

@用户2279258,也可以根据您的要求将字段定义为
int
类型。但是从调用来看,似乎您正在传递一个整数如果我将hp定义为int,我如何将Stat传递给hp以使hp具有当前值和最大值?非常感谢你!好的,我将int-Hp更改为Stat-Hp,现在获取参数
#3'无法将
int'表达式转换为类型
BaseStats.Stat',并且最好的重载方法匹配
BaseStats.BaseStats.BaseStats(字符串,int,BaseStats.Stat,int,int,int,int,int,int,int,int,int)“有一些无效的论点,谢谢!现在,我如何添加当前和最大Hp的实际数量。ps,摆脱了错误!!!好的,伙计们,非常感谢,我想在我解决这个问题之前,我需要做更多的研究,我只是不明白,哈哈,再次感谢!!!!!您必须将字段设置为公共:
public int current;//。然后在创建对象后,为它们指定一个值:
myStat.current=10;//。我明白了,为什么图坦卡蒙中的家伙不创建一个hp current和hp max呢?我不明白哈哈,但你帮了这么多忙。幸运的是,由于
Stat
被定义为
类而不是
enum
。哦,我明白了。我没注意到。这应该是enum,但根据它的用法。我知道我会尝试将类更改为enum也为了澄清,我跟踪一个unityscript tut试图将其转换为c,他将他的Stat定义为一个类,所以我可能会出错。。。谢谢大家的帮助!!!