Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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# 为什么MonoBehavior Start()上的类引用丢失_C#_Unity3d - Fatal编程技术网

C# 为什么MonoBehavior Start()上的类引用丢失

C# 为什么MonoBehavior Start()上的类引用丢失,c#,unity3d,C#,Unity3d,我用静态方法创建了一个新游戏对象的实例,在这里我设置了所有游戏对象字段。但是,当我尝试从Start()获取字段时,引用属性为空 公共类英雄:MovableStrategicObject { 公共字符串名称; 公共玩家CONRTOLINGPLAYER; 受保护的新空开始() { base.Start(); Debug.Log(“2-英雄名称:”+heroName); Log(“2-控制播放器存在:”+(conrtollingPlayer!=null)); Log(“2-Tile存在:”+(curr

我用静态方法创建了一个新游戏对象的实例,在这里我设置了所有游戏对象字段。但是,当我尝试从Start()获取字段时,引用属性为空

公共类英雄:MovableStrategicObject
{
公共字符串名称;
公共玩家CONRTOLINGPLAYER;
受保护的新空开始()
{
base.Start();
Debug.Log(“2-英雄名称:”+heroName);
Log(“2-控制播放器存在:”+(conrtollingPlayer!=null));
Log(“2-Tile存在:”+(currentTile!=null));//继承的属性
}
公共静态游戏对象生成(平铺、玩家、字符串名称、字符串预设路径=“英雄/HeroPrefable”)
{
GameObject o=MovableStrategicObject.Spawn(预制路径,平铺);
var scripts=o.GetComponents(typeof(monobhavior));
英雄=空;
foreach(脚本中的monos)
{
如果(s是英雄)
英雄=英雄;
}
如果(英雄!=null)
{
实例化(o,(Vector2)tile.gameObject.transform.position,Quaternion.identity);
o、 GetComponent().conrtollingPlayer=player;
o、 GetComponent().heroName=name;
Log(“1-英雄名称:+o.GetComponent().heroName”);
Log(“1-控制播放器存在:”+(o.GetComponent().conrtollingPlayer!=null));
Debug.Log(“1-Tile存在:”+(o.GetComponent().currentTile!=null));//继承的属性
返回o;
}
其他的
{
Log(“对象(“+prefablePath+”)没有附加英雄脚本。”);
返回null;
}
}
}
结果:


另外,您可以确保它是正确的游戏对象,因为英雄名称和所有派生属性都已正确分配。

问题就在这一行:

实例化(o,(Vector2)tile.gameObject.transform.position,Quaternion.identity);
因为此对象是GameObject的新实例,所以与前一个对象的所有分配都不会影响此实例。因此,解决办法是:

gameobjecth=实例化(o,(Vector2)tile.GameObject.transform.position,Quaternion.identity);
h、 GetComponent().conrtollingPlayer=player;
h、 GetComponent().heroName=name;
返回h;
新对象已具有此信息