UnityAPI之GameObject
GameObject是所有游戏实体的基类,也是组件所挂载的实体,关于他们的继承关系请参考:Component
你可以在初始化的时候给这个游戏物体指定组件和姓名,他的形状由MeshFilter组件决定:
obj = new GameObject();
//创建一个空的游戏物体
obj=new GameObject("gameobject-name");
obj=new GameObject("name",typeof(MeshRenderer));
Type[] types = { typeof(MeshRenderer), typeof(MeshFilter), typeof(BoxCollider) };
obj = new GameObject("name", types);
其中指定组件要传递组件的类型,可以传入一个数组
activeInHierarchy:表示在hierarchy面板中的激活状态,即实际场景的中激活状态
activeSelf:表示在inspector面板中的激活状态
Debug.Log(gameObject.activeInHierarchy);
//场景中物体的实际激活状态
gameObject是一个对象
Debug.Log(gameObject.activeSelf);
//inspector面板中激活状态(是否可以监视)
gameObject.SetActive(true);
inspector面板中的激活状态可以通过这个✔️来调节,实际的激活状态可以通过gameObject.SetActive(true)方法来进行调节.
GameObject类中同时提供一系列的Find方法,通过一般的算法分析的学习我们可以知道一个常识,对数据结构增删改查的操作不可能都是高性能的,所以这个方法十分吃性能.
obj = GameObject.Find("");
//find查找,消耗性能
GameObject.FindGameObjectWithTag("");
GameObject.FindGameObjectsWithTag("");
你也可以按照标签查找,标签是游戏物体的属性,可以通过上图中的tag面板进行设计,也可以在程序中设计(这个属性是可读可写的),注意加不加s表示返回的是一个物体还是一个数组.
print(tag);//标签
当然也可以根据类型查找物体,这个类型可以是游戏物体的类型,也可以是他含有的组件类型
FindObjectOfType<NewBehaviourScript>
FindObjectsOfType<MeshRenderer>
这里游戏物体的类型不是说他是正方体还是平面或者是敌人还是树木,是什么形状是由组件决定的,游戏物体的类型就是他挂载的公有类.
也可以在代码中销毁游戏物体,或者生成游戏物体
Destroy(gameObject);
Instantiate(gameObject);
注意这里"自己生成自己"的代码是可以运行通过的,但是会同时生成所挂载的脚本,相当于无限生成,你必须给这个生成一种控制.
下面我们区分一下GameObject和gameObject,前者是游戏物体的基类后者是一个属性指的就是当前物体.
在unityengine库中也有一个自己定义的Object类他是所有类的基类,当然我们知道在c#system库中所有类都自动继承Object类,所以在引用了unityengine库中的程序中一定注意这个问题,用.号进行区分.