C#当我创建对象时,这个变量怎么可能不调用它的构造函数呢?
变量(myCharacterData)无法正确构造自身,我不明白这是怎么可能的 我这样调用我的实例化方法C#当我创建对象时,这个变量怎么可能不调用它的构造函数呢?,c#,unity3d,C#,Unity3d,变量(myCharacterData)无法正确构造自身,我不明白这是怎么可能的 我这样调用我的实例化方法 PlayerScript newPlayer = CustomInstantiatePlayerChar() as PlayerScript; //newPlayer.myCharacterData = new CharacterData(); //REQUIRED 它创建了一个新的游戏对象,并附加了正确的组件(PlayerScript)。但是,PlayerScript中的变量从未初始化。
PlayerScript newPlayer = CustomInstantiatePlayerChar() as PlayerScript;
//newPlayer.myCharacterData = new CharacterData(); //REQUIRED
它创建了一个新的游戏对象,并附加了正确的组件(PlayerScript)。但是,PlayerScript中的变量从未初始化。我必须自己初始化它(注释掉行“//必需”)
但是当我去我的PlayerScript课程时
public class PlayerScript
{
public CharacterData myCharacterData = new CharacterData();
无论何时创建任何PlayerScript对象,其myCharacterData是否应始终导致a=3,b=“fizz”
是否有可能使用myCharacterData创建一个PlayerScript,结果为null或a=0,string=“”
以这种方式声明myCharacterData是否可以确保每当我创建PlayerScript对象时,a=3&b=“fizz”?它将始终调用其构造函数?”
我很困惑,因为如果我不包括注释掉的行,那么结果是a=0&b=“”。好像我写为
public CharacterData myCharacterData = new CharacterData();
或
或
因为它们总是会导致a=0,b=“”。即使第一个代码段调用new CharacterData()。我对Unity不是很了解,但是我知道在很多情况下Unity会序列化和反序列化您的对象 当Unity反序列化您的
CharacterData
时,它不会调用构造函数,因此不会初始化私有字段。默认情况下,Unity不会序列化/反序列化私有字段(例如a和b)。如果您希望序列化您的a和b私有字段,则可以添加[SerializedField]
将属性设置为两个字段或将两个字段都公开,例如:
[SerializeField]
int a;
[SerializeField]
string b;
或
这是在和中记录的。尽管这是一个危险的假设,但我不明白为什么CustomInstancePlayerChar()会特意确保myCharacterData从不调用其构造函数,因为它必须创建一个新的PlayerScript对象(该对象将调用myCharacterData构造函数)。请显示
CustomInstancePlayerChar()的定义。
您应该提供一个。
public CharacterData myCharacterData = new CharacterData();
public CharacterData myCharacterData;
public CharacterData myCharacterData = null;
[SerializeField]
int a;
[SerializeField]
string b;
public int a;
public string b;