unity中,perfab是一个很重要的知识点,它是可重复利用的Game Object。这使我联想到cocos2dx中的CCSpriteBatchNode批次渲染可以大大提高渲染效率。同样,unity中的perfab使用批量物体的渲染如大量子弹、城墙等。好,下面我们来在unity中创建导弹。
一、导入3D模型
如果还不知道如何制作简单的3D导弹模型,或者没有该模型的,可以参考这篇文章: http://blog.csdn.net/wangbin_jxust/article/details/24678873
3D模型下载: http://download.csdn.net/download/wangbin_jxust/7269663
直接将fbx格式的3D模型拖入到unity的project面板的assets文件夹下,即可完成导入(好像我说的是废话.,)。
二、创建场景、灯光、地形、物体
三、场景中创建导弹
创建一个cube,添加Rigidbody属性,使其具有重力属性。将assets中的导弹模型拖动给该cube ,使导弹模型是cube的子对象。在scene视图中,分别选中的x,y ,z坐标,并且旋转导弹的角度,调整导弹至cube的大小。
四、创建预设(perfab)
project面板中点击create->perfab
很明显,填充过的预设是蓝色,而我们刚刚创建的预设New Perfab3则是白色的,如何填充预设呢?直接将Hierarchy中的cube拖动给New Perfabs就OK啦。
五、编写导弹发射脚本
在assets目录下,新建一个scripts文件夹用来存放脚本,在scripts文件夹中创建一个c#脚本,命名为fire。使用Mono编辑器打开该脚本:
先创建两个变量FirePoint 和 Missile:
然后在update函数中添加导弹创建代码,整个文件的代码如下:
using UnityEngine; using System.Collections; public class Fire : MonoBehaviour { public Transform FirePoint; public Rigidbody Missile; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetKeyDown(KeyCode.Space)) { Rigidbody clone = (Rigidbody)Instantiate(Missile ,Missile.position ,Missile.rotation); clone.velocity = transform.InverseTransformDirection (Vector3.forward * 100); } } }
Instantiate是一个静态函数,用于克隆perfab。所以,这里的Missile变量应该是一个perfab。
脚本写好了?我们让谁来执行这段脚本呢?
此时,我们使用ctrl + shift + N创建一个空的对象,命名为player,将脚本拖动给这个空对象。
然后创建一个空对象,命名为FirePos,用来作为发射导弹的位置标记。将FirePos拖动给脚本中的FirePoint对象,将我们之前创建的预设New Perfab3拖动给脚本中的Missile,如下图。
至此,我们就可以发射导弹了。运行场景,点击空格键,便可以发射无数导弹了。