一种基于Unity的人机对战游戏的设计与实现
发布时间:2018-07-01 来源: 幽默笑话 点击:
摘要:随着社会科技水平和经济水平的迅速发展,游戏逐步成为人们享受生活娱乐的一种流行的方式,Unity3D作为一款虚拟3D开发的软件正在逐步升温,他以其跨平台的优势,良好的界面环境,操作要求不高,强大的功能设计渐渐的被广大虚拟现实的设计者们所使用。
本文主要是设计一款能够在手机上操作的休闲类射击游戏,功能模块分为:敌机的生成与销毁模块,子弹的对象池,以及子弹与敌机的碰撞检测模块,还有最后的结束界面,用本地保存历史最高的分数。
关键词:Unity3D;射击游戏;安卓
就目前的游戏市场而已,很多人对unity3d游戏偏爱有佳,从事unity3d游戏开发前景广阔。在本次的毕业设计,用户能够在手机上通过自身的单手触屏的操作,享受游戏带来的快乐。而通过本次的射击游戏的开发,让我对与大型游戏的制作流程有了一个更加深入的了解,并且提高的我逻辑思维能力,代码能力,让我受益匪浅。
一、游戏的模块分析
新课程理念的核心在于充分发挥学生的思维能力,培养学生多元化的学习能力,进而实现国家人才培养的基本目标。新课程面对的一个重要问题就是如何提高课堂教学效益最大化,即初中化学教师应如何改善自身的教学方式,提高化学教学的有效性,促使初中化学教学能够达到预想的教学效果,实现现代化人才培养的宏伟目标。
(一)游戏主线模块
游戏中共有三种等级的敌机,小型敌机生命值和分值最低,移动速度最快,出现频率最高,中型敌机生命值和分值略多于小型敌机,移动速度略低于小型敌机,出现频率略高于小型敌机,大型敌机生命值和分值最高,移动速度最慢,属于BOSS,当只有消灭数量的敌机,达到一定分数的时候才会出现。敌机生命值耗尽则爆炸,飞出边界自动销毁。而玩家拥有主武器和副武器,在得到子弹奖励物品后,会在一定时间增强火力,玩家受到敌机碰撞会损失生命值,奖励物品同样在飞出边界后,或者过段时间后会自动销毁,敌机无法获得奖励物品,玩家每消灭一个敌机得到相应的分数,生命值耗尽则游戏结束如果和敌机发生碰撞或者与敌机的子弹发生碰撞,血量就会变少,当消灭一个敌机时,游戏右上方的分数会增加,敌机会有销毁的动画。由于本次采用是无尽深渊模式,就是一直刷怪,所以关数只有一关。同时,对于游戏的界面进行一些处理,要有进入游戏后的玩家角色界面,如血條,分数等,还需要结束游戏界面。
(二)游戏奖励物品模块
游戏中有多种奖励物品,为子弹奖励,通过一个脚本控制,Inspector属性面板中给定,由生成器根据不同频率周期控制生成,生成的地点也是随机的,奖励物品飞出边界后自动销毁,碰撞到玩家战机,则由玩家战机上面的脚本判断奖励类型,同时,奖励物品消失。奖励物品和敌机没有碰撞检测,当奖励物品和敌机位置重叠,奖励物品渲染层级在敌机上层,优先显示,不会被敌机遮挡
(三)敌机模块
游戏中有三种敌机,小型、中型和大型,三种类型的敌机都有同一个脚本控制,生命值(hp)、速度(speed)、分值,3个属性为公共变量(public),直接在Inspector属性面板中分别修改三种敌机的预制件(prefab)的属性,生成的敌机就拥有不同的属性。敌机的生成通过生成器(spawn)控制,生成器的脚本通过不同的频率控制生成器随机生成敌机,当然,敌机我也是为了重复利用,采用了对象池的技术,通过生成链表和死亡链表来重复使用。
二、游戏的实现
(一)主角飞机的移动
在本款游戏中,主要是在安卓端使用,所以主要是用在手机拖拽,所以调用了OnMouseDrag函数,并且要将鼠标点击的屏幕坐标转换为世界坐标来计算,只能限定在屏幕内拖动不能拖到屏幕外侧。
(二)主角的碰撞检测
碰撞检测的触发条件是,两个物体必须要有Box Collider或者Charater Controller,且至少一个Rigidbody组件。而在本次的游戏设计中,除了在主角物体的Inspector面板中的添加的Box Collider2D组件之外,还应该给主角添加Rigidbody2D,Rigidbody2D是刚体组件,使物体具有物理属性,将其中的Gravity Scale设置为0,这样物体不会受到重力影响,不会掉落,Box Collider2D是物体在2D环境中的碰撞体,可以用来检测是否发生碰撞,调整Box Collider2D的大小刚好包围飞机,勾选其中的Is Trigger,使其进行触发检测,但并不会产生物理碰撞效果。同时,将player的tag设置成为Player,同理,后面提到的子弹,敌机,奖励物品都会有Tag,以及Box Colloder2D及Rigidbody2D,是为了检测两者直接的碰撞检测,那么主角就会有两者情况,第一种是碰撞到敌机或者是敌机的子弹,首先要判断当前血量,如果血量大于0,那么主角的血量减少否则就播放主角的死亡动画,展开游戏结束的画面。所以,子弹和敌机的碰撞也是上述相同的道理。
(三)历史最高和最高分数
用Unity中的PlayerPrefs.GetInt方法来保存历史最高的,PlayerPrefs.SetInt方法来设置,具体的实现逻辑为第一次分数肯定是历史最高,然后保存在本地,当第二次失败之后,会将第二次的成绩跟历史最高成绩对比,如果第二次的成绩大于历史最高成绩,那么就把第二次的成绩变成历史记录显示出来,反之,则还是原来的历史分数
三、总结
本文主要实现了基于Unity开发人机射击游戏的详细基本开发流程。
首先分析了游戏行业的发展趋势及手游的市场的巨大前景,介绍了Unity开发工具的优势和特点,C#的优势,通过商业前景和发展趋势阐述了选择这个项目的意义。后面介绍了开发所在的系统环境和开发过程中用到的工具以及相关技术,接着就是此项目设计、实现具体步骤。
此项目基本实现了飞行射击游戏的功能,但是细节方面还远远不够,游戏难度控制也没有太多的体现,敌机类型只有三种,玩家飞机只有一种,奖励物品和细节动画特效都做得不够全面。旨在通过此项目的实现,熟悉Unity结合C#脚本开发手游的具体流程,掌握Unity开发工具的常用功能,以及对Unity开发虚拟现实手游的展望。在项目的实现过程中,也遇到了大大小小的问题,但都在导师、同学的帮助下逐一解决了。也使自己清楚自己的不足和局限性,尤其是在Unity的基础方面还需要大量的花费时间去学习,由于我才使用Unity不久,算是个初学者,此次项目的设计和实现还有欠缺和不足的地方,能有进一步改善的空间。
参考文献:
[1]金玺曾《Unity3D\2D手机游戏开发(第二版)》清华大学出版社2014年10月.
[2]Unity Technologies 《Unity4.X从入门到精通》中国铁道出版社 2013年11月.
[3](美)梅纳德, 瓦格斯特夫著,占红来译《Unity游戏开发实战(原书第2版)》机械工业出版社 2015年11月.
[4](美) Matthew Johnson,James A. Henley著 郭华丰 韦静 译《Unity2D游戏开发秘籍》清华大学出版社 2015年9月.
热点文章阅读