首页 > 代码库 > unity3D游戏开发学习之使用perfab(预设)创建很多导弹并发射

unity3D游戏开发学习之使用perfab(预设)创建很多导弹并发射

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,如下图。


至此,我们就可以发射导弹了。运行场景,点击空格键,便可以发射无数导弹了。



unity3D游戏开发学习之使用perfab(预设)创建很多导弹并发射