1)GameObject是一个类型,所有的游戏物件都是这个类型的对象。gameObject是一个对象,就跟this一样,指的是这个脚本所附着的GameObject。
2)查找场景中的其他GameObject
GameObject.Find 从Scene下开始查找,根据GameObject的名字进行查找,允许使用"/"穿越层次查找
静态方法,可以使用类名直接调用
如果查找不在最上层,建议合理使用路径查找
无法查找隐藏对象(active是false),如果路径查找中的任何一个父节点active=false,这个对象都将查找不到
此查找相当于递归遍历查找,使用方便但效率低下
如何查找GameObject:
直接拖拽赋值,public一个gameObject类型变量,然后把游戏对象拖进去赋值
查找(比较耗时)
GameObject.Find 直接查找名字,需要保证名字是唯一的,返回找到的这个GameObject
GameObject.FindGameObjectsWithTag 通过标签查找游戏物体,并以数组形式返回所有找到的结果
GameObject.FindWithTag 通过标签查找一个游戏物体,并返回找到的GameObject
GameObject的name和Tag可以直接设置,但Tag需要在标签管理器先定义一个Tag,这个Tag才可用,不能将一个未定义的Tag赋给GameObject的Tag变量。
3)获得GameObject组件的方法
对于GameObject上的组件,如果是Transform组件,可以直接使用游戏对象.transform直接来访问,对于其他的Component,需要利用泛型,使用GetComponet<XXX>(),来返回GameObject上挂载的Component
gameObject.GetComponent<Rigidbody>()
GetComponent找到一个符合条件的之后就返回找到的这个并且不再寻找,GetComponents会找出所有符合条件的,并做成一个数组返回。
GetComponentInChildren
GetComponentInParent
4)SetActive方法
激活/停用此游戏对象(改成将对象移到屏幕外,激活时将对象移回屏幕内,性能就好多了)
5)静态方法CreatePrimitive
6)其他方法
AddComponent
BroadcastMessage
SendMessage
讲解
SphereCollider sc = gameObject.AddComponent(typeof(SphereCollider)) as SphereCollider;
transform.find
通过查找子对象的名字返回Transform。
如果没有查找到子对象名字,将返回null。如果名字包含“/”字符它将向路径一样穿越层次(如果没有/,只查找当前transform下一层的子对象)
与GameObject.Find的区别:
GameObject.Find是静态方法,返回值是GameObject。适用于整个游戏场景中名字为name的所有处于活跃状态的游戏对象。找不到出错。
Transform类的Find方法不是静态方法,返回值是Transform。适用于查找游戏对象子对象名字为name的游戏对象,不管该游戏对象是否是激活状态,都可以找到。只能是游戏对象直接的子游戏对象。找不到返回null。
在Unity中,父子关系实际上是transform的父子关系,可以使用transform对象的GetChild方法、parent属性返回子、父Transform对象,可以使用childCount属性,也可以通过遍历找到该transform对象下所有子对象的transform。