如何从Unity3D中的程序集访问添加到游戏对象的脚本组件

时间:2015-06-18 15:31:29

标签: c# unity3d .net-assembly

在我的Unity项目中,我正在创建一个游戏对象,然后在运行时向其添加一个脚本。脚本(在本例中称为Part)是从程序集中添加的。最终在检查员看起来像这样: enter image description here 这不是我以前在检查器中的脚本组件上看到的外观。 (注意Unity徽标图标。)脚本确实按预期运行,因此该部分有效。问题是当我尝试从另一个脚本访问此GameObject上的Part脚本组件时,使用以下代码:

GameObject newPart = Instantiate(ContentManager.LoadPart(part), loc, Quaternion.Euler(rot)) as GameObject;
newPart.GetComponent<Part>().Load(N["Parts"][i]);

我收到屏幕截图中显示的错误,指示“Part”为空。

我的第二个问题是使用这种方法(从程序集中添加脚本)将阻止我对基类类型进行GetComponent调用,并让它成功访问从所请求的基类类型继承的任何脚本。

那么如何从程序集中访问在运行时添加的脚本组件?它也能用于继承吗?

1 个答案:

答案 0 :(得分:0)

如果您在运行时添加脚本,则必须在实例化后完成,就像实例化游戏对象之前一样,它不存在于游戏层次结构中。

GameObject newPart = Instantiate(ContentManager.LoadPart(part), loc, Quaternion.Euler(rot)) as GameObject;

newPart.AddComponent<Part>();

newPart.GetComponent<Part>().Load(N["Parts"][i]);