Unity3D入门 第叁章:Prefabs(预设)与 Instantiate(实例化)
Prefabs(预设)的概念
Prefabs(预设)是一种可重复使用的资源类型,本质上是游戏对象。它具有很高的灵活性,既可以被置入多个不同的场景中,也能在同一个场景里多次使用。当我们在某个场景中添加一个Prefabs时,实际上就是对该Prefabs进行了实例化操作。所有由同一个Prefabs实例化出来的对象都是该Prefab的克隆体,一旦Prefabs原型发生改变,所有基于它创建的Prefabs实例都会相应地产生变化。
Prefabs的使用场景
如果我们需要创建一些需要重复使用的东西,那么就可以使用Prefabs。接下来,我们通过一个小例子来详细介绍如何使用Prefabs。
具体操作步骤
1. 搭建场景
首先,搭建如下场景:创建一个地板和一个用于下落的立方体,同时调整摄像机的角度和位置,添加一个平行光。位置参考Scene窗口,最终效果如Game窗口展示的那样。此外,需要给立方体添加刚体属性,具体操作是选择立方体对象,然后通过菜单“Component -> Physics -> Rigidbody”来添加。添加刚体属性后,可以调整一下立方体的角度,运行游戏,观察立方体滚动的效果。
2. 创建Prefabs
在Project窗口中,点击“Create -> Prefab”,此时会在Project窗口中创建一个新的Prefab对象。接着,从Hierarchy窗口中将之前创建的立方体拖到Project窗口新创建的Prefab上。当Hierarchy中的立方体变成蓝色时,说明Prefabs已经完成填充。之后,将Project窗口中创建好的Prefabs拖入Scene窗口中并运行游戏,此时就完成了一次克隆操作,新创建的对象和原立方体就像双胞胎一样。
3. 使用Instantiate通过代码创建多个Prefabs实例
Instantiate的功能
Instantiate的主要作用是克隆原始物体,并且可以设置克隆物体的位置和角度。如果传入一个对象、组件或脚本实例,它会克隆整个对象的层次结构以及所有子对象。
创建脚本
在Project窗口中点击“Create -> Javascript”创建一个脚本。这里可以使用类似AS3的写法来编写JavaScript代码,示例代码如下:
// 在编辑器中用来绑定的Prefabs
public var Pre:GameObject;
private function Update ():void {
var instance:GameObject = Instantiate(Pre, transform.position, transform.rotation);
// Instantiate用法,注意参数
// Pre 用来克隆的Prefabs
// transform.position 脚本绑定对象的位置,类似于this.transform.position
// transform.rotation 脚本绑定对象的角度,类似于this.transform.rotation
}
4. 绑定脚本到对象
写完脚本后,需要将其绑定到一个对象上。我们可以先删除Hierarchy窗口中的立方体,然后创建一个空的游戏对象,操作方法是通过菜单“GameObject -> Create Empty”,并将其放置到原来立方体的位置上。最后,将脚本拖放到Hierarchy窗口中新创建的空对象上,让该对象来执行代码。
5. 绑定脚本变量
在Hierarchy窗口中单击空对象,在它的Inspector窗口中可以看到绑定的脚本。将早前创建的Prefabs拖到脚本中“Pre”右边的框上,这样就完成了脚本中变量的绑定。
6. 运行游戏
点击运行按钮(小三角),此时会看到类似粒子效果的场景,非常有趣。
资源下载
本文示例代码的下载链接:http://pan.baidu.com/s/1bnrUxWj