1
2
3
4
5
6
7

GameObject类

发布时间:2018-12-15 11:46   发布人:焦卫峰   浏览次数:576

1.GameObject类

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;

2.再谈Transform类

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。