我们在学c#基础的时候,大家都知道想要获取一个实例类里面的公有成员,就必须在调用的时候实例化这个类。
比如有一个A类
class A
{
public int age;
}
class Progress
{
void Main()
{
A a = new A();//实例化A类 也称实例化对象
a.name;
Console.WriteLine(name);
}
}
那么如果在Unity中你想实例化一个继承了MonoBehaviour的一个B类呢? 这样还可以吗?
比如有一个B类:
class B : MonoBehaviour
{
public int age;
}
class C : MonoBehaviour
{
B b; 声明
void Start()
{
b = new A();//实例化B类 也称实例化对象
b.name;
print(b.name);
}
}
如果像上面那样写的话,打印出来的b.name是空的,null。愿意很简单。
因为在Unity中除了对象之外都是组件,就是说继承了MonoBehaviour的类想要运行,那么必须要挂在游戏物体上(GameObject)。也就是说此时 B类 已经是一个组件了。
所以我们就要以GetConponent<B>(); 的形式去访问了。不能new。
当然你做一个单例 public static C _instance;//单例访问也可以,GameObject.FindObjectOfType<GameObject>();查找类型也可以。
方式有很多,我们这里说的是为什么不能new,大家明白这个意思就好了,个人理解,有错误的,遗漏的地方还请多多留言。