Unity挂载脚本中Component,GameObject,gameObject三者之间的关系

摘要

刚入门的同学,对三者关系总是分不清楚,Component,GameObject,gameObject三者关系是错杂在一起的,所以要彻底搞清楚三者关系,我们一定要搞清楚 Unity构成,一些定义,最后才能捋清楚三者之间关系。

注意:如果你是已入门者,请直接跳至④

①Unity游戏构成

Unity游戏是由多个场景(Scene)构成的
场景中又有多个游戏对象(gameObject,注意是小写g)
游戏对象身上挂载多个组件(实现功能)
组件内有多个属性(具体实现功能方法)

Unity挂载脚本中Component,GameObject,gameObject三者之间的关系
注意:上图中场景构成中多了组件和属性,组件即为生成一个游戏对象时自带或者可以通过“Add Component ”添加的组件,常见的有Transform、Box Collider,属性 类似于挂载脚本组件的属性,因为本文重在讨论挂载的脚本组件,所以不在继续深挖此二者,为了保持Unity游戏构成的完整性才将此二者列出

②一些定义

游戏对象:简单讲,游戏对象即为我们导入或者在游戏场景中创建的一些物体,比如在3D Object中创建的一个Cube
就是一个gameObject

gameObject:gameObject是一个对象,他由GameObject这个类定义

GameObject:是一个类,继承于Object类

Component:是一个类,继承于Object类

挂载的脚本组件:实际上和游戏对象身上的所有组件一样,挂载的脚本组件(C# Script)也是一个类,只是类中有很多

成员字段、成员方法、成员属性,并且由这三者实现了一个个功能,也就是所谓的“属性”

Unity构成图可更新为此:
Unity挂载脚本中Component,GameObject,gameObject三者之间的关系

③ 挂载的脚本,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类的属性访问器

上一篇:iOS 后台返回json解析出现的null的解决办法


下一篇:《算法导论》习题解答 Chapter 22.1-2(邻接矩阵与链表)