在Unity场景中出现的所有物体都属于游戏对象(GameObject),当用户把一个资源放置到场景中之后,Unity3D便会通过GameObject类来生成对应的游戏对象。该类包括了游戏对象所需要的目标方法,例如提供了Find()系列方法来找到场景中的某个对象,通过GerComponent()系列方法来获得该游戏对象中的某个组件,同时使用AddComponent()方法来添加某个组件等。
1. 通过名称来查找
使用函数GameObject.Find,如果场景中存在指定名称的游戏对象,那么返回该对象的引用,否则返回控制Null;如果存在多个重名的对象,那么返回第一个对象的引用。
(1)打开工程TestDemo,新建一个场景“Find”,并在场景中创建一个Cube,一个Sphere,一个Capsule。
(2)新建一个C#脚本,名为“FindObject”,挂载给Main Camera,输入如下代码:
(3)运行程序,此时在控制台中输出三个游戏对象的名称,同时在Find Object组件下,原来为None 的字符也变为对应的游戏对象的名称,如图5-7 和图5-8 所示。
图5-7 对象添加脚本
图5-8 脚本运行结果
2. 通过标签来查找
使用GameObject.FindGameObjectWithTag()方法在场景中查找对象,场景中的每个对象都可以设置标签,如果场景中存在指定标签的游戏对象,那么返回该对象的引用,否则返回空值Null。如果多个游戏对象使用同一个标签,那么返回第1 个对象的引用,如果想获取场景中使用相同标签的游戏对象,可以通过GameObject.FindGameObjectsWithTag()方法获取游戏对象的数组。
(1)打开工程TestDemo,新建一个场景“FindTag”,并在场景中创建一个Cube,一个Sphere,一个Capsule。
(2)选择场景中的Cube对象,在Inspector视图中点击“Untagged”按钮,弹出一个浮动菜单,选择“Add Tag...”,如图5-9所示。在弹出的Tags&Layers面板中点击“+”按钮,输入“Enemy1”,点击“Save”。继续点击“+”按钮,添加“Enemy2”和“Enemy3”标签,如图5-10 所示。
图5-9 打开标签菜单
图5-10 新建标签(www.xing528.com)
(3)重新选择Cube,点击“Tag”属性,此时,刚才输入的三个标签已经添加到Tag的下拉菜单栏,点击“Enemyl”,Cube便加上了Enemy1标签,如图5-11所示,用同样的方法给Sphere添加Enemy2标签,给Capsule添加Enemy3标签。
图5-11 为对象添加标签
图5-12 挂载脚本组件
图5-13 脚本运行结果
(4)新建一个脚本“FindTagObject”,挂载给Main Camera,如图5-12所示,代码如下:
(5)运行程序,此时控制台输出游戏对象的名字,如图5-13 所示。
(6)在场景中新建两个Cube对象,把它们的标签都改为“Enemy1”,新建一个脚本“FindTagsObject”,挂载给Main Camera,同时取消激活“FindTagObject”脚本组件,如图5-14所示,代码如下:
(7)运行程序,此时控制台输出游戏对象的名字,如图5-15 所示。
上述的几个函数比较耗时,应避免在Update中调用这些获取组件的函数,而应该在初始化时(Awake 方法或者Start 方法)把组件的引用保存在变量中。
图5-14 代码的失效与挂载
图5-15 脚本运行结果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。