Unity3d之坦克大战(二)

Unity3d之坦克大战(二)



这只是一个非常非常初级的教程。 Unity3d之真机测试(上)我们创建了一个初级的坦克,今天继续坦克大战的游戏。下面开始吧:



1.

首先我们要创建一个炮弹。打开3DS Max,为了简单,就画一个胶囊好了。在右边栏的扩展几何体中选择胶囊。然后选中工具栏的移动工具,将胶囊移动(0,0)处,如下所示:




并保存为tankBullet.max,同时导出为tankBullet.3DS:






2.

将tankBullet.3DS放到Assets目录下,unity3d会自动导入。把它托入到Scene窗口中,并调整到合适位置和大小,如下所示:





3.

我们只是拖入了一个材质,下面需要创建对应的Entity。选择GameObject-->Create Other-->Cube 创建一个Cube,并调整到合适位置和大小。同时将第二步创建的tankBullet材质拖到Cube中,是它们成为一体。为了清晰,我们把Cube重命名成tankBulletCube。完成后结果如下:





4.

tankBulletCube增加物理感应。选中tankBulletCube,选择Component-->Physics-->Rigidbody。



5.

玩家按下空格键的时候发射导弹。我们用创建的导弹做Prefab(Prefab是大量重复的小Entity):

首先在Project窗口中创建一个Prefab文件夹,然后右击,选择Create-->Prefab,输入名称tankBulletPrefab,如下所示:




可以看到,一开始tankBulletPrefab前的图标是灰的:




把我们创建的tankBulletCube拖动到tankBulletPrefab中就会看到,图标变成蓝色的了:





6.

下面我们在Scripts文件夹下新建一个tankBulletFire.js脚本,用来控制导弹的发射,如下:

var FirePoint:Transform;
var Bullet:Rigidbody;

function Update ()
{
	if(Input.GetKeyDown(KeyCode.Space))
	{
		var clone : Rigidbody;
		clone = Instantiate(Bullet, FirePoint.position, FirePoint.rotation);
		clone.velocity = transform.TransformDirection(Vector3.forward * 100);
	}
}

代码中有两个变量:FirePoint和Bullet。前者是发射炮弹的起点,后者则是实际的炮弹。如果玩家按下空格,则我们在FirePoint的地方实例化一个Bullet,并设置它向前运动。




7.

下面我们创建发射炮弹的起点。选择GameObject-->Create Empty,并命名为FirePoint。同时将它的位置调整到坦克炮口前方(离炮口必须有一点距离,否则由于坦克和炮弹都是Rigidbody,一发射就会碰撞),同时还要把它加入到坦克Cube中。完成后如下所示:





8.

tankBulletFire.js脚本拖动到Cube,注意到此时FirePoint和Bullet还是None的:



FirePoint和tankBulletPrefab分别拖动到FirePoint和Bullet的,完成后如下所示:





9.

下面运行游戏,按下空格键,我们的炮弹就发射出来了(下图的小白点),同时注意到Hierarchy窗口中会出现大量的tankBulletPrefab





10.

炮弹发射后应该会有白光。选择GameObject-->Create Other-->Particle System创建例子系统,并命名为tankBulletParticleSystem,调整大小和数量,如下所示:





11.

tankBulletParticleSystem加入到tankBulletCube中。再次运行程序,我们的炮弹是不是漂亮很多了,哈哈:





12.

我们需要在炮弹打到物体或飞行一段距离后自动销毁。

新建一个tankBulletDestroy.js脚本,输入:

function OnCollisionStay(collisionInfo : Collision)
{
	//yield WaitForSeconds(2.0);  //等待2秒
	Destroy(gameObject);
}

OnCollisionStay这个函数会在物体发生碰撞后被调用。我们在碰撞后立即销毁。哈哈,测试一下。




13.

是不是单调了点?我们给发射导弹加上音效吧:

在Project窗口新加一个Audio文件夹,拖入声音文件,如下所示:






14.

给坦克Cube加入一个Audio Source。选择坦克Cube,选择GameObject-->Create Empty,命名为tankBulletFireSound。选中它,选择Component-->Audio-->Audio Source,然后将声音文件拖入Audio Clip一栏,并把tankBulletFireSound加入坦克Cube中,同时注意去掉Play On Awake复选框(否则程序一开始就会发声)






15.

下面我们修改tankBulletFire.js脚本来加入声音的控制:

var FirePoint:Transform;
var Bullet:Rigidbody;
var tankBulletFireSound:AudioSource;

function Update ()
{
	if(Input.GetKeyDown(KeyCode.Space))
	{
		var clone : Rigidbody;
		clone = Instantiate(Bullet, FirePoint.position, FirePoint.rotation);
		clone.velocity = transform.TransformDirection(Vector3.forward * 100);
		tankBulletFireSound.Play();
	}
}


同时将坦克Cube的tankBulletFireSound拖入脚本的tankBulletFireSound变量中:





16.

测试一下,发射导弹时,是不是也有声音啦,哈哈~~








完成!

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值