摘要
刚入门的同学,对三者关系总是分不清楚,Component,GameObject,gameObject三者关系是错杂在一起的,所以要彻底搞清楚三者关系,我们一定要搞清楚 Unity构成,一些定义,最后才能捋清楚三者之间关系。
注意:如果你是已入门者,请直接跳至④
①Unity游戏构成
Unity游戏是由多个场景(Scene)构成的
场景中又有多个游戏对象(gameObject,注意是小写g)
游戏对象身上挂载多个组件(实现功能)
组件内有多个属性(具体实现功能方法)
注意:上图中场景构成中多了组件和属性,组件即为生成一个游戏对象时自带或者可以通过“Add Component ”添加的组件,常见的有Transform、Box Collider,属性 类似于挂载脚本组件的属性,因为本文重在讨论挂载的脚本组件,所以不在继续深挖此二者,为了保持Unity游戏构成的完整性才将此二者列出
②一些定义
游戏对象:简单讲,游戏对象即为我们导入或者在游戏场景中创建的一些物体,比如在3D Object中创建的一个Cube
就是一个gameObject
gameObject:gameObject是一个对象,他由GameObject这个类定义
GameObject:是一个类,继承于Object类
Component:是一个类,继承于Object类
挂载的脚本组件:实际上和游戏对象身上的所有组件一样,挂载的脚本组件(C# Script)也是一个类,只是类中有很多
成员字段、成员方法、成员属性,并且由这三者实现了一个个功能,也就是所谓的“属性”
Unity构成图可更新为此:
③ 挂载的脚本,GameObject继承关系
GameObject
GameObject–>Object
GameObjec这个类直接继承于Object类
挂载脚本
挂载脚本–>MonoBehaviour–>Behaviour–>Component–>Object
挂载脚本间接的继承于Object
④ 最终关系梳理
gameObject代表着挂载这个脚本组件的游戏对象
gameObject是由GameObject类定义的对象。
gameObject是Component类的一个属性访问器。
到这里大家就有点懵了,毋庸置疑,gameObject代表游戏对象,但他为什么和GameObject类和Component类都有关?
gameObject是GameObject类定义的对象,同时也是Component类的一个属性访问器,那gameObject到底是啥?
其实,我们不妨这样来看
由GameObject类定义的对象,我们称作 gameObject
Component类的属性访问器名 我们定义为 gameObject1
同时Component的gameObject1属性访问器是这样定义的:
public class Component
private GameObject gameObject;
//这是Component的gameObject1方法
public GameObject gameObject1
{
get
{
//返回值为GameObject类定义的对象gameObject
return gameObject;
}
}
从上面的一个属性定义中大家看出来了吗?
Component.gameObject 获得的返回值gameObject游戏对象
而Component.gameObject中的gameObject只是定义的一个属性名
属性名与GameObject类定义的gameObject对象没有任何关系
只是Component调用他的(属性名)gameObject属性访问器
得到的gameObject返回值才与GameObject类定义的gameObject对象相同
所以大家常说,
gameObject是GameObject类的对象
gameObject是Component类的属性访问器