Unity3D / C# - 将预制件实例化为GameObject与组件类之间的区别是什么?

时间:2017-05-30 23:49:55

标签: c# unity3d

假设我有一个名为Bullet的预制件,附带一个名为BulletControl.cs的脚本。

我可以将其实例化为:GameObject bulletInstance = Instantiate(Bullet, transform); 或者我可以这样做:BulletControl bulletInstance = Instantiate(Bullet, transform);

我原本认为实例化为GameObject只是一种更通用的类型,可以让您访问其他参数,例如transform。根据我的理解,实例化与使用new关键字不同,所以当我声明bulletInstance的类型时,我不认为我正在创建类BulletControl的实例。这是怎么回事?

1 个答案:

答案 0 :(得分:1)

Instantiate函数以Object为参数。

在Unity中,每个GameObject和组件/脚本都直接或间接地从Object继承。

我们假设您的脚本名称为YourScript

YourScript继承自MonoBehaviour

public class YourScript : MonoBehaviour
{

}

然后MonoBehaviour继承自Behaviour

public class MonoBehaviour : Behaviour
{

}

Behaviour继承自Component

public class Behaviour : Component
{

}

最后,Component继承自Object

public class Component : Object
{

}

对于GameObject,它直接从Object继承。

public sealed class GameObject : Object
{

}

因此,任何继承自Object的类都应该能够使用Instantiate函数进行实例化。

  

根据我的理解,实例化并不像使用新关键字

如果您的脚本不是从MonoBehaviour继承,那么您可以使用new关键字创建它的新实例,就像普通的C#程序一样。如果它继承自MonoBehaviour,则必须使用InstantiateAddComponent函数。有关详细信息,请参阅this帖子。