假设我有一个名为Bullet
的预制件,附带一个名为BulletControl.cs
的脚本。
我可以将其实例化为:GameObject bulletInstance = Instantiate(Bullet, transform);
或者我可以这样做:BulletControl bulletInstance = Instantiate(Bullet, transform);
我原本认为实例化为GameObject
只是一种更通用的类型,可以让您访问其他参数,例如transform。根据我的理解,实例化与使用new
关键字不同,所以当我声明bulletInstance的类型时,我不认为我正在创建类BulletControl的实例。这是怎么回事?
答案 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
,则必须使用Instantiate
或AddComponent
函数。有关详细信息,请参阅this帖子。