游戏开发论坛

 找回密码
 立即注册
搜索
查看: 11585|回复: 1

用Unity快速开发太空飞机大战实战经验分享(上)

[复制链接]

1万

主题

1万

帖子

3万

积分

论坛元老

Rank: 8Rank: 8

积分
36572
发表于 2015-12-25 14:51:23 | 显示全部楼层 |阅读模式
本帖最后由 小篱 于 2015-12-25 14:54 编辑

QQ截图20151225145043.jpg

  文/vian

  用unity动手先来试试一个简单的太空飞机大战吧。看官请继续往下。。。

  最终效果,可控制己方战机,朝目标敌机发射子弹,打飞机~~~!伴随想象,慢慢呈现这个太空飞机大战游戏。

  1、 新建打飞机unity工程,建好资源分类目录,导入飞机FBX模型文件以及贴图,射击和爆炸等声音文件等等。

1.jpg

  2、 新建场景game.unity,下面大部分工作都在这个场景里完成!

  3、我们想要游戏场景背景里显示一个火星球和星空的效果,这样更真实。新建一个平面体Plane作为火星背景模型;然后创建一个材质球命名为Background,指定好之前导入的火星贴图文件。操作如下:

2.jpg

  4、 好,上面都是一个个来选择,来个拖动方式来进行一次关联操作。Unity几乎所有的关联操作都可以通过拖动方式完成!现在准备设置平面体即我们的火星背景模型材质,选中刚建好的Background材质球拖放到火星模型上。如图:

3.jpg

  5、创建另一个平面体,放到火星后面,准备做一个星空的效果。同样创建星空材质球设置好贴图操作同上。然后将星空材质球拖到新的平面体。Ok,我们可以看到星空中的火星了。。。

4.jpg

  6、 想让星空在运行游戏时缓动起来,产生动画效果,让你感觉星动~

  这里先不详述UV动画以及动画制作过程。准备了个.anim动画文件,选中星空模型添加animation组件设置下动画文件为.anim文件,使星空有缓动效果。

5.jpg

  7、上面步骤,已经将游戏需要模拟太空背景的效果处理差不多了,接下来需要调整试图角度,我们需要从上向下展望火星和星空。我调整了下摄像机视角和视野大小。选中Main Camera,选择GameObject里Align With View使摄像机视角与当前试图一致。现在就可以看到太空的火星和星空了,如图效果:

6.jpg

  8、接下来,准备创建己方战机了,这就是我们要控制的主角了。把准备好的主角战机Fbx拖入场景里,调整下战机朝向:

7.jpg

  9、让战机动起来。这里我们主要用到的是Input包装了输入功能的类,包括了很多键盘、鼠标或触控操作函数;Transform组件主要功能是和移动、旋转、缩放游戏体有关的。

  选中我的战机模型,添加一个脚本给它,我们将在脚本里还需要做:

  1.控制战机上、下、左、右来移动,控制移动速度;

  2.控制战机发射子弹,以及子弹发射间隔;

  3.控制战机生命值,设置战机爆炸声音和爆炸效果等等。

  添加脚本,选中战机,将对应脚本拖到战机上即可,如下:

8.jpg

  10、创建子弹

  子弹是游戏中需要重复使用的游戏体,需要创建prefab。

  将子弹Fbx拖入场景里,新建一个子弹的prefab,选中Hierarchy子弹游戏体拖入prefab上,如图示:

9.jpg

  子弹主要是控制飞行、造成伤害值、自身生存时间。我们给子弹添加脚本

10.jpg

  然后可删除场景里的子弹。

  11、让我的战机能发射子弹,设置Player脚本参数,rocket就是我们创建的子弹prefab,设置0.1s发射间隔,另外还给了一个战机发射子弹的声音,如下:

11.jpg

  上面说道了声音,凡是要发声的物体,需要添加audio source这个组件!

  12、子弹主要是飞行然后消失。消失分两种情况,一是碰撞了敌机,二是生存时间到了自动消失。这里提到碰撞和OnTriggerEnter事件,后面再说。脚本:

12.jpg

  战机的话主要是移动,输入控制发射子弹,并伴随射击声音,脚本如下:

13.jpg

  这里Instantiate是unity中函数实例化,不是我们常用的new!!!

  13、现在仅有了主角战机、子弹,暂无其他交互了。运行中,我们可以看到实例化出来的子弹,以及其被delete的过程,截了一张运行时的图,详细如下:

14.jpg

  14、好了,准备创建敌战机了。敌机也需要重复使用,先创建敌机的prefab,给敌机增加控制脚本,如图:

15.jpg

  首先这种敌机我们不给其具有攻击性,不让其发射子弹,它就能移动,我方战机可以发射子弹打掉它。先整个简单点的敌机、简单点交互哈!

  15、上面有提到碰撞和OnTriggerEnter事件,现在处理打掉敌机就需要运用了。

  给敌机增加Box Collider组件,它是立方体碰撞组件,选中trigger使其有触发作用,简单说这个就能使OnTriggerEnter有响应了。

16.jpg

  给敌机增加刚体组件。所有参与物理计算的游戏体都需要有一个刚体才能正常工作!不选use Gravity使其不受重力影响,选中Is Kinematic使其运动不受物理模拟影响。(以上改动都会自动更新与prefab一致)

17.jpg

  同样,按上面所示给子弹、主角战机也添加Box Collider组件、刚体。

  16、设置好敌机、子弹、主角战机的tag标志, 以下就是我们需要在各脚本OnTriggerEnter需要处理的逻辑!

  敌机碰到子弹会损失生命直到为零就自动销毁;敌机撞到主角战机直接挂掉销毁;

18.jpg

  2.子弹碰到敌机就自动销毁;

19.jpg

  3.主角战机碰到非自己射出的子弹就减少一条命,直到为零自动销毁游戏结束!

20.jpg

  17、为了防止敌机未被消灭会一直存活下去,我们可以在屏幕下方放置一个空的碰撞体,敌机碰到它就自动销毁咯。

21.jpg

  18、通过上面所有步骤,我们就能控制战机移动、发射子弹攻击或直接撞击敌机。一个太空飞机大战游戏初期形式到此已基本完成!

  后面,我们可以在这基础上动手去增加扩展:

  超级敌机,继承自普通敌机,它将具备攻击能力,生命也更强,可以自动朝主角战机发射子弹,被其子弹命中可以减少主角生命值;

  敌人生成器;

  用GUI来展示游戏信息,比如战机生命值、当前得分,游戏失败状态等等;

  可以加个start.scene新场景,加开始游戏按钮,点击后才进入game.scene;

  可以改下战机移动,除方向键外,增加鼠标移动的控制,方便发布到手机上。

  遇到的坑:我确认都已经将子弹、敌机、主角战机都加好了刚体等,也激活了碰撞等等,运行时候总是不能触发OnTriggerEnter,无奈打不了飞机。后来发现是子弹、敌机、主角战机三游戏体的position里y不一样导致的!虽是一个简单的错误,可能很多时候都没注意导致小有纠结!所以这里注意下咯~

  就先分享以上内容......

  结束语:

  简单的一个游戏,这里涉及到unity制作游戏的很多基础内容,包括unity编辑器基本使用、资源管理、编写控制脚本、添加各种组件、声音、使用物理功能等等,还有碰撞、prefab等等。除了上面说的扩展,我们还可以为这个游戏添加更多细节要素,更好的流程体验!

  待续......

via:GAD

0

主题

1

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2015-12-29 16:43:26 | 显示全部楼层
你写的代码就是一陀屎
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-25 12:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表