1.6 预设
Prefabs(预设)是一种可被重复使用的游戏对象,比如坦克游戏中的炮弹都源自一个炮弹模型的Prefabs(预设),当坦克发射炮弹时,就从Prefabs中实例化一个炮弹出来。总之如果要创建一些重复使用的东西,那么就该用到它了。
1.6.1 制作预设
只要在场景中制作了游戏对象,然后将它从层次面板拖曳到项目面板中,预设即被创建了(如图1-30所示),同时该对象在层次面板中也变成了蓝色,它成为了预设的一个实例化对象。
图1-30 预设
1.6.2 预设的实例化
如图1-31所示,将预设拖曳到场景面板中(或者在代码中使用Instantiate方法,1.6.4节会有介绍),便可实例化预设。实例化的对象(即拖曳出来的物体,包括之前创建的)依赖于预设,修改完预设后,实例化对象也随之被修改(如图1-32所示),删除预设后,这些实例化对象也会失效。
图1-31 实例化预设
图1-32 修改预设
1.6.3 使用预设的例子
本节将以一个用代码生成立方体的例子来说明预设的用途。创建一个名为PrefabCreate.cs的脚本,定义GameObject类型的变量prefab,用它指向图1-30中的方块。然后在Update方法中调用Instantiate方法创建一个实例,代码如下所示。
1)Instantiate方法有3个参数,第一个是需要实例化的预设,后两个是实例化之后游戏对象的位置和旋转角度。
2)Random.Range将产生一定范围内的随机数,这里用3个-10到10的随机数作为方块的位置
3)Quaternion.identity就是指Quaternion(0,0,0,0),即各个轴向的旋转角度都是0。
using UnityEngine; using System.Collections; public class PrefabCreate : MonoBehaviour { public GameObject prefab; void Update() { //位置 float x = Random.Range(-10, 10); float y = Random.Range(-10, 10); float z = Random.Range(-10, 10); Vector3 pos = new Vector3(x, y, z); //实例化 Instantiate(prefab, pos, Quaternion.identity); } }
将脚本附加到场景面板中的任意一个物体上面,然后将项目面板中的预设赋给prefab属性(将预设拖曳到脚本prefab属性上,如图1-33所示)。运行游戏,如图1-34所示,立方体将被逐一创建。
图1-33 将项目面板中的预设赋给脚本的prefab属性
图1-34 运行游戏,可以看到随机创建的立方体