标题 | 一款基于Unity3D的移动平台游戏的设计 |
范文 | 董健 摘? 要:随着Android移动操作系统的迅速普及,针对Android平台游戏的移植开发需求日益增多。用平面设计软件构建虚拟场景和运动单元,在Unity3D引擎中进行模块封装、数据处理和交互控制,采用盒状碰撞检测机制及对象池的数据管理模式,实现了自动射击、关卡切换、视景特效及各种实体的动态效果,完成了一款手机射击类游戏。最后,实现游戏向Android手机的移植,游戏基本功能完善,运行流畅。 关键词:碰撞检测;Unity3D;手机游戏;Android 中图分类号:TP311.52?????????? 文献标识码:A 1?? 引言(Introduction) 信息化时代,智能手机等移动终端对人们来说已经不是一个陌生的词,因其强大的功能而越来越受人们的青睐。智能手机不再像过去的老式机一样只能简单地接听电话和收发短信了,而是更能迎合众多用户的需求,成为更多手机用户在工作、学习之余的一部方便灵巧、便于携带的休闲娱乐的移动设备[1]。智能手机拥有如此强大的功能,都是源于其完善的系统平台,其中Android系统平台就是其一,它因其良好的开放性而被很多手机厂商使用,在市场上占有相当高的比率。基于Android平台的应用中,游戏因其拥有强大的交互性、娱乐性以及能随时随地进行游戏的便利性而被人们所喜爱,让开发者看到了手机游戏在Android平台上的巨大的发展空间。 2?? 游戏功能分析(The game features analysis) 射击类游戏因其包含明显的动作游戏的特征,是动作游戏中的一类,其操作简单、易懂,是一类比较热门的游戏。该应用主要是通过Unity游戏引擎设计的一款适合于各阶层人士的射击类游戏并移植到Android移动平台。对游戏功能进行分析时,应集中注意要“做什么”而不是“怎么做”。通过对游戏的分析,根据游戏目标功能的用例图分析得到游戏的整体框架图,如图1所示。 图1 游戏框架结构图 Fig.1 Game framework structure 3?? 游戏功能模块的实现(Realization of the game function module) 3.1?? 游戏场景 就射击类游戏来讲,游戏的场景一般都会很大,因此无法在游戏的界面上完全显示出来,所以要给游戏的主界面背景添加一个UV动画。游戏中可以看到玩家控制的主角在不停地移动,而游戏背景总是在向下移动,让玩家感觉整个画面都在移动,呈现一种动态的视觉效果。 动态背景创建的原理就是将背景用一张图片进行循环滚动,从而形成一个动画的过程[2]。为了实现背景的循环滚动,则需得选择Loop,将其设为循环播放模式。 3.2?? 主角管理的实现 在游戏中,主角有循环移动/具备生命值/可以发射子弹/尾部火焰效果等功能,在设计时建立一个Player类,让它与主角关联,Player类中提供了一个Update函数,这个函数在程序运行时,每帧都会被调用,因此,在这个函数中添加主角移动的部分代码: if(Input.GetKey(KeyCode.UpArrow)){movev-=m_speed*Time.deltaTime;} //上移 if(Input.GetKey(KeyCode.DownArrow)){ movev+=m_speed*Time.deltaTime;}//下移 if(Input.GetKey(KeyCode.LeftArrow)){moveh+=m_speed*Time.deltaTime;}//左移 if(Input.GetKey(KeyCode.RightArrow)){moveh-=m_speed*Time.deltaTime;}//右移 this.m_transform.Translate(new Vector3(moveh,0, movev));//移动 ………………………………………… 在Player类中定义一个enum(枚举)状态,包含飞机的三种状态:Playing、Explosion、Invisible。再在子线程方法DestroyPlayer()中实现飞机被击中或与敌机发生碰撞后,飞机退出游戏窗口底部,然后再从游戏窗口底部返回到游戏界面,且闪烁一段时间才能被子弹击中的功能。 3.3?? 敌人管理的实现 敌机的类型主要分为三类,具体类型如图2所示。 图2 敌机类型说明图 Fig.2 Description of enemy plane type 为了能够不停的制造新的敌人,则需要创建敌人生成器。创建一个EnemySpawn脚本,为Update方法添加如下代码: m_timer-=Time.deltaTime; if (m_timer<;=0){ m_timer=Random.value*15.0f;?? //在5~15s之间随机生成一个敌人 if (m_timer<;5) m_timer=5;?????? //实例化敌人的位置 Instantiate (m_enemy,m_transform.position,Quaternion.identity); } 3.4?? 碰撞检测的实现 射击游戏中,为了判断前方是否有障碍物和子弹是否击中对方,就需要对两个物体进行碰撞检测,然后根据检验的结果采取相应的方法进行处理。游戏中的碰撞检测主要存在于主角与敌机、主角与敌机子弹、敌机与主角子弹之间。而物体要发生碰撞检测,主动运行的对象就必须是刚体,因此,需要添加一个刚体组件。检验碰撞通常有两种方法OnCollision-Enter和OnTriggerEnter。应用中采取的则是OnTriggerEnter方法[3]。检测中需要使用如下方法设置敌人位置: Destroy(this.gameObject); EnemyScript enemy=(EnemyScript)ontherObject.gameObject.GetComponent("EnemyScript"); enemy.SetPositionAndSpeed();//设置敌人出现的位置 4? 游戏的完成及测试(Completion and testing of the game) 在游戏制作完成后,为了检查游戏是否完整、能否达到预期的效果,则需要对其进行调试和运行,以发现游戏中可能有的不足并解决这些问题。进入游戏,按空格键,发射子弹;按上、下、左、右键,上、下、左、右移动;飞机在飞行中若吃到星星,则会获得一定的分数。若飞机撞到敌机或被敌机子弹集中,生命值会减一,当生命值减到零时,游戏失败,进入失败界面。 经过测试,游戏运行效果符合预先设计的游戏总体效果,各个界面之间的切换也都正确。此外,还重点测试了游戏过程中其他功能的实现,玩家控制的主角能正常移动并发射子弹,在吃到星星后,也能获得相应的分数。 5?? 结论(Conclusion) 游戏是以Unity游戏引擎为开发平台,并最终实现向Android的移植。 在游戏的设计与开发的整个过程中,由于对Unity和Android机制研究的还未深入,遇到过很多问题,有技术方面的,有关于游戏模型方面的,有界面设计方面的,还有程序运行时出现的各种异常,移植过程中软件无法打开、运行等问题。但是通过仔细研究Unity引擎及Android平台的开发方法,均得到解决,也为以后的继续开发提供基础。 参考文献(References) [1] 段海朋,关振华.3DS Max 2010完全学习手册[M].北京:清华大 学出版社,2010. [2] 林深华,等.基于Android平台Unity3D游戏设计与实现[J].企业 科技与发展,2013(10):40-42. [3] 宋浩.基于虚拟现实过程中的碰撞检测算法优化的研究[J].科 技向导,2013(03):152. 作者简介: 董? 健(1980-),男,硕士,讲师.研究领域:多媒体信息处理. 3.4?? 碰撞检测的实现 射击游戏中,为了判断前方是否有障碍物和子弹是否击中对方,就需要对两个物体进行碰撞检测,然后根据检验的结果采取相应的方法进行处理。游戏中的碰撞检测主要存在于主角与敌机、主角与敌机子弹、敌机与主角子弹之间。而物体要发生碰撞检测,主动运行的对象就必须是刚体,因此,需要添加一个刚体组件。检验碰撞通常有两种方法OnCollision-Enter和OnTriggerEnter。应用中采取的则是OnTriggerEnter方法[3]。检测中需要使用如下方法设置敌人位置: Destroy(this.gameObject); EnemyScript enemy=(EnemyScript)ontherObject.gameObject.GetComponent("EnemyScript"); enemy.SetPositionAndSpeed();//设置敌人出现的位置 4? 游戏的完成及测试(Completion and testing of the game) 在游戏制作完成后,为了检查游戏是否完整、能否达到预期的效果,则需要对其进行调试和运行,以发现游戏中可能有的不足并解决这些问题。进入游戏,按空格键,发射子弹;按上、下、左、右键,上、下、左、右移动;飞机在飞行中若吃到星星,则会获得一定的分数。若飞机撞到敌机或被敌机子弹集中,生命值会减一,当生命值减到零时,游戏失败,进入失败界面。 经过测试,游戏运行效果符合预先设计的游戏总体效果,各个界面之间的切换也都正确。此外,还重点测试了游戏过程中其他功能的实现,玩家控制的主角能正常移动并发射子弹,在吃到星星后,也能获得相应的分数。 5?? 结论(Conclusion) 游戏是以Unity游戏引擎为开发平台,并最终实现向Android的移植。 在游戏的设计与开发的整个过程中,由于对Unity和Android机制研究的还未深入,遇到过很多问题,有技术方面的,有关于游戏模型方面的,有界面设计方面的,还有程序运行时出现的各种异常,移植过程中软件无法打开、运行等问题。但是通过仔细研究Unity引擎及Android平台的开发方法,均得到解决,也为以后的继续开发提供基础。 参考文献(References) [1] 段海朋,关振华.3DS Max 2010完全学习手册[M].北京:清华大 学出版社,2010. [2] 林深华,等.基于Android平台Unity3D游戏设计与实现[J].企业 科技与发展,2013(10):40-42. [3] 宋浩.基于虚拟现实过程中的碰撞检测算法优化的研究[J].科 技向导,2013(03):152. 作者简介: 董? 健(1980-),男,硕士,讲师.研究领域:多媒体信息处理. 3.4?? 碰撞检测的实现 射击游戏中,为了判断前方是否有障碍物和子弹是否击中对方,就需要对两个物体进行碰撞检测,然后根据检验的结果采取相应的方法进行处理。游戏中的碰撞检测主要存在于主角与敌机、主角与敌机子弹、敌机与主角子弹之间。而物体要发生碰撞检测,主动运行的对象就必须是刚体,因此,需要添加一个刚体组件。检验碰撞通常有两种方法OnCollision-Enter和OnTriggerEnter。应用中采取的则是OnTriggerEnter方法[3]。检测中需要使用如下方法设置敌人位置: Destroy(this.gameObject); EnemyScript enemy=(EnemyScript)ontherObject.gameObject.GetComponent("EnemyScript"); enemy.SetPositionAndSpeed();//设置敌人出现的位置 4? 游戏的完成及测试(Completion and testing of the game) 在游戏制作完成后,为了检查游戏是否完整、能否达到预期的效果,则需要对其进行调试和运行,以发现游戏中可能有的不足并解决这些问题。进入游戏,按空格键,发射子弹;按上、下、左、右键,上、下、左、右移动;飞机在飞行中若吃到星星,则会获得一定的分数。若飞机撞到敌机或被敌机子弹集中,生命值会减一,当生命值减到零时,游戏失败,进入失败界面。 经过测试,游戏运行效果符合预先设计的游戏总体效果,各个界面之间的切换也都正确。此外,还重点测试了游戏过程中其他功能的实现,玩家控制的主角能正常移动并发射子弹,在吃到星星后,也能获得相应的分数。 5?? 结论(Conclusion) 游戏是以Unity游戏引擎为开发平台,并最终实现向Android的移植。 在游戏的设计与开发的整个过程中,由于对Unity和Android机制研究的还未深入,遇到过很多问题,有技术方面的,有关于游戏模型方面的,有界面设计方面的,还有程序运行时出现的各种异常,移植过程中软件无法打开、运行等问题。但是通过仔细研究Unity引擎及Android平台的开发方法,均得到解决,也为以后的继续开发提供基础。 参考文献(References) [1] 段海朋,关振华.3DS Max 2010完全学习手册[M].北京:清华大 学出版社,2010. [2] 林深华,等.基于Android平台Unity3D游戏设计与实现[J].企业 科技与发展,2013(10):40-42. [3] 宋浩.基于虚拟现实过程中的碰撞检测算法优化的研究[J].科 技向导,2013(03):152. 作者简介: 董? 健(1980-),男,硕士,讲师.研究领域:多媒体信息处理. |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。