首页 理论教育 Unity3D游戏开发项目教程:GameObject类介绍

Unity3D游戏开发项目教程:GameObject类介绍

时间:2023-11-16 理论教育 版权反馈
【摘要】:在Unity场景中出现的所有物体都属于游戏对象,当用户把一个资源放置到场景中之后,Unity3D便会通过GameObject类来生成对应的游戏对象。如果多个游戏对象使用同一个标签,那么返回第1 个对象的引用,如果想获取场景中使用相同标签的游戏对象,可以通过GameObject.FindGameObjectsWithTag()方法获取游戏对象的数组。

Unity3D游戏开发项目教程:GameObject类介绍

在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 脚本运行结果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈