Prefabs(预设)是一种可以被重复使用的游戏对象。当需要创建一些需要重复使用的对象时,就可以使用预设体。此篇博客将指导如何制作一个预设体,并且通过代码来实例化多个此预设体的对象。
制作预设
只要在场景中制作了游戏对象,然后将它层次面板拖拽到项目面板中,预设即被创建了,同时该对象在层次面板中也就变成了蓝色。此时场景中的游戏对象就成为了预设的一个实例化对象。
此处以在层次面板(Hierarchy)中创建立方体(Cube)为例,在场景中创建好立方体之后,将立方体拖拽到项目面板(Project)中 ,可以发现该立方体变成蓝色。
预设实例化
方法一:
将刚才蓝色的预设体直接拖拽到场景面板中(或者直接拖拽到层次面板中),便可以实例化预设。实例化的对象(即拖拽出来的物体,包括之前创建的)依赖于预设,修改完预设后,实例化对象也随之被修改,删除预设后,这些实例化对象也会消失。
方法二:
通过代码来创建预设体的实例化对象。下面以一个代码生成立方体的例子还说明预设的用途。
创建一个名为PrefabCreate.cs脚本,在该脚本中定义一个GameObject类型的变量Prefab,用它来指向刚刚创建的立方体。然后在Update方法中调用Instantiate方法创建一个实例,代码如下:
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);
}
}
- Instantiate方法有3个参数,第一个是需要实例化的预设,后两个是实例化后游戏对象的位置和旋转角度。
- Random.Range将产生=一定范围内的随机数,这里用3个-10到你0的随机数作为立方体的位置。
- Quaternion.identity就是指Quaternion(0,0,0),即各个轴向的旋转角度都是0 。
最后将脚本附加到场景面板中的任意物体上(我挂在了相机上面,且创建预设体后,我把层次面板中的Cube删除了)(见下图),然后将立方体预设拖拽到脚本prefab属性上即可。运行游戏后,立方体被逐一创建。