今天我们来学一下UnityD中预设Prefab的使用方法,首先来了解一下预设:在Unity3D项目中,Prefabs(预设)是一种可被重复使用的游戏对象。具有以下特点:
1. 它可以被置入多个场景中,也可以在一个场景中多次置入。
2. 当你在一个场景中增加一个Prefabs,你就实例化了一个Prefabs。
3. 所有Prefabs实例都是Prefab的克隆,所以如果实在运行中生成对象会有(Clone)的标记。
4. 只要Prefabs原型发生改变,所有的Prefabs实例都会产生变化。
如果需要创建一些想要重复使用的东西,如游戏中的子弹等,就应该使用Prefab了。下面介绍一下使用方法。
新建一个工程,我们取名"Test",然后新建一个平面Plane,一个长方体Cube,一个球体Sphere。如下图所示:
我们要实现的效果是当小球落到平面上时,销毁小球,接着从小球的原始位置重新创建一个小球,使其下落,重复下去,使空中一直有小球下落。
我们还要设置平面上的长方体的组件属性和小球的组件属性,分别如下所示:
可以看到去掉了长方体Mesh Render组件的对勾,使其透明化,增加了Box Collider组件,使它接受碰撞,并在是否触发 Is Trigger上打了对勾;然后小球我们增加了重力感应组件Rigidbody,使其能够下落,然后增加了球体碰撞Sphere Collider。这里要注意的是碰撞双方不能都是Mesh Collider,否则检测不到碰撞。如果非要用两个Mesh Collider检测碰撞,则可勾选其中之一的Mesh Collider下的Convex属性。
接下来创建预设Prefab,我们先在Project面板下新建一个文件夹“resources”,然后Create-->Prefab,重命名为“ball”,然后将Hierarchy下的ball对象拖拽到上面,可以发现它前面原本灰色的图标变蓝了。好了,最后让我们编写c#脚本代码,源代码如下:
using UnityEngine; using System.Collections; public class script : MonoBehaviour { //定义小球预设 private GameObject prefab; // Use this for initialization void Start () { } // Update is called once per frame void Update () { } //触发进入检测函数 void OnTriggerEnter(Collider col) { //注意此处第一个小球的名字为ball,而后来克隆的小球名字都为ball(Clone) if (col.gameObject.name == "ball" || col.gameObject.name == "ball(Clone)") { //销毁小球 Destroy(col.gameObject); } //实例化小球预设,我们从resources文件夹下载入预设,注意预设资源必须放在 //Assets目录下新建的resource文件夹,否则不识别 prefab = (GameObject)UnityEngine.Object.Instantiate(Resources.Load("ball")); } }
最后附上项目资源下载地址:点此下载