Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#当我创建对象时,这个变量怎么可能不调用它的构造函数呢?_C#_Unity3d - Fatal编程技术网

C#当我创建对象时,这个变量怎么可能不调用它的构造函数呢?

C#当我创建对象时,这个变量怎么可能不调用它的构造函数呢?,c#,unity3d,C#,Unity3d,变量(myCharacterData)无法正确构造自身,我不明白这是怎么可能的 我这样调用我的实例化方法 PlayerScript newPlayer = CustomInstantiatePlayerChar() as PlayerScript; //newPlayer.myCharacterData = new CharacterData(); //REQUIRED 它创建了一个新的游戏对象,并附加了正确的组件(PlayerScript)。但是,PlayerScript中的变量从未初始化。

变量(myCharacterData)无法正确构造自身,我不明白这是怎么可能的

我这样调用我的实例化方法

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;