我们今天要学的是UnityD中预设Prefab的使用方法,下面我们就具体的来看。
首先来了解一下预设:在Unity3D项目中,Prefabs(预设)是一种可被重复使用的游戏对象。具有以下特点:
       1.  它可以被置入多个场景中,也可以在一个场景中多次置入。
       2.  当你在一个场景中增加一个Prefabs,你就实例化了一个Prefabs。
       3.  所有Prefabs实例都是Prefab的克隆,所以如果实在运行中生成对象会有(Clone)的标记。
       4.  只要Prefabs原型发生改变,所有的Prefabs实例都会产生变化。

       如果需要创建一些想要重复使用的东西,如游戏中的子弹等,就应该使用Prefab了。

下面介绍一下使用方法。

       新建一个工程,我们取名"Test",然后新建一个平面Plane,一个长方体Cube,一个球体Sphere。如下图所示:

unity3d prefab使用

       我们要实现的效果是当小球落到平面上时,销毁小球,接着从小球的原始位置重新创建一个小球,使其下落,重复下去,使空中一直有小球下落。

       我们还要设置平面上的长方体的组件属性和小球的组件属性,分别如下所示:

                                 unity3d prefab使用

                                  unity3d prefab使用

       可以看到去掉了长方体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#脚本代码,源代码如下:
[csharp] view plaincopy
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"));
}
}

将脚本拖放到cube对象上,运行游戏,效果如下:

unity3d prefab使用