标题 | 基于Unity平台的三维坦克游戏设计与实现 |
范文 | 李慎亮 司占军 摘要:为了解Unity与三维建模软件的兼容问题,以及游戏的基本制作流程,以90坦克为原型,在3D Max中进行了建模、UV分展。在PS 中进行贴图制作,在Gold Wave中进行音乐切分制作;在Unity中综合运用各种资源,结合AI、刚体检测等技术实现了碰撞检测、键盘检测、爆炸等效果,最终制作出了一款操作性好、画面精良、具有一定趣味性的3维TPS游戏。 关键词:TPS;Unity;三维游戏;坦克游戏 DOIDOI:10.11907/rjdk.151403 中图分类号:TP319 文献标识码:A 文章编号文章编号:16727800(2015)008015203 0 引言 计算机软硬件技术的发展水平越来越高,画面简单、立体感差的二维平面游戏正在淡出人们的视野。立体感强、操作性好、画面精美的三维游戏越来越受到玩家和游戏厂商的喜爱。虚拟现实、体感检测等技术的发展更是为游戏产业的发展提供了良好的技术支持。 本文以三维坦克游戏的开发过程为例,介绍了Unity平台与其它软件之间的关联以及注意事项。 1 游戏设计 为了让游戏情节更好地展开,增加游戏的趣味性,本次实验设计了山区狙击战、城镇街道战及工厂会战3种游戏场景,游戏设计如图1所示。 2 预期效果 (1)键盘监听。能够监听键盘上的按键,根据玩家按下的不同按键作出相应反应。例如按下A、S、W、D键会让坦克向左、右、前、后行驶。 (2)摄像头跟随。摄像机跟随游戏中的角色移动。摄像机要有广阔的视野,以便玩家能够及时了解游戏的变化。 (3)坦克AI(人工智能)。标识为敌人的坦克能够在地图范围内随意走动,且能够自主判断在其范围内的其它坦克是否为敌人。 (4)爆炸效果。坦克的炮弹射出后击中目标产生爆炸效果,同时播放爆炸音效,模拟真实的爆炸情景。 (5)炮台转向。坦克静止后,坦克炮台随着鼠标的移动在一定角度范围内转向。 图1 游戏的基本元素与设计流程 3 实验流程 3.1 模型创建与优化 模型是游戏的基础,精致的三维模型能够提高游戏的真实性。Unity平台支持多个三维软件创建的模型,本实验选用上手相对较快的3D Max软件,在3D Max中利用多边形建模和Box模型拼接结合的方式对坦克建模。需要注意的是3D Max与Unity中单位之比为0.01:1,即在3D Max中的1cm就是Unity中的1m。为保证单位的统一,实验中将3D Max的系统单位设置为cm。一般来说,游戏中模型的面数越多,游戏所消耗的资源就越多,游戏的流畅度就会降低。因此需要在3D Max中使用线的分隔、点的焊接等命令将模型的面设置成三边面。 3.2 UV分展 如果说模型是三维游戏的骨架,那贴图就是游戏的衣服。精美的贴图使游戏画面更加绚丽、真实。画面的精美程度与游戏消耗的资源数是成正比的。因此,要减少游戏消耗的资源,不仅要减少游戏模型的画面数,还要利用高精度贴图的方法来制作游戏。高精度贴图的制作需要对高精度模型进行UV分展、烘培,然后导出到PS中进行贴图绘制。精细的UV划分能够让模型有着丰富的细节和变化,增加模型的真实感。在分展UV时,结合使用棋盘格材质以及松弛等方法,对UV进行分展、整合,最后渲染出UV模板,如图2所示。 图2 模型UV的分展、整合 将绘制完毕的贴图重新导入到3D Max中,并对创建完毕的低精度模型进行贴图。此时低精度模型与高精度模型的比例应为1:1。 3.3 模型导出导入 实验中直接导出fbx格式模型。在导出之前需要将每块模型的坐标归零。在3D Max中利用坐标调整工具调整坐标的方向及位置并保存。导出模型时,选择导出为fbx格式,并勾选嵌入媒体选项。 导出的模型直接拖入Unity中的资源面板就可以实现资源的导入,而且模型的贴图等数据也会一并导入到Unity中(Untiy的面板命令也可导入资源)。 3.4 地形与环境制作 选择菜单 terrain→create terrain,在工作区域中出现一个地形图(长方形),调整地形大小。选择菜单terrain→flatten heightmap,设置地形高度[1]。 Unity自带的地形编辑器具有上凸、下凹等命令,利用这些命令可以模拟出山川、丘陵、小岛等环境。 Unity中有两种添加花草树木的方法,一种是利用预制物体,将树木挨个向场景中添加;另一种是利用地形编辑菜单栏中的笔刷工具向场景中添加树木。 添加预制物体需要将树木变为预制物体,再拖拽到场景中进行布置。预制物体是指Unity中为了更有效地使用资源,在Unity内部创建的一个模板,该模板的所有副本都是它的一个实例。预制物体使用时需要将物体挨个拖入到场景中,对于场景较大的地方来说比较麻烦,而且不同的环境还要编写不同的代码来实现不同的效果,例如风吹的效果。由于预制是真实的三维模型,因而真实性更高。预制物体比较适合场景中树木的制作。 图3 Untiy的地形编辑命令面板 图4 游戏中的树木 笔刷工具添加的花草树木是利用二维贴图来模拟现实三维效果,与使用预制制作的树木相比更加适合大规模的树木制作,例如森林、草地等。 石块和房屋等资源需要在三维软件中创建模型,贴图制作后导入到Unity中使用,也可以去Unity Store中寻找需要的资源购买使用。 3.5 脚本编写 Unity是一个面向对象的游戏引擎,脚本是三维游戏开发的重要组成部分,是游戏引擎与游戏素材资源之间的纽带[2],游戏物体实现的各种效果都需要脚本来控制,例如坦克的移动: function Update () { if (Input.GetKey(KeyCode.Escape)){ move=false; } if (controlled&&move){ var x=Input.GetAxis("Horizontal")*Time.deltaTime*speed; var z=Input.GetAxis("Vertical")*Time.deltaTime*speed; transform.Translate(x,0,z); if(Input.GetKey(KeyCode.A)){ transform.RotateAround(rotate_point.position,Vector3.up,-rotate_speed); } if(Input.GetKey(KeyCode.D)){ transform.RotateAround(rotate_point.position,Vector3.up,rotate_speed); } } } AI伪码设计:①为坦克设置敌我标识Flag;②定义最远攻击距离D2,以及攻击角度;③定义与其它刚体最小的接近距离D3;4④射射线实时检测一定范围内的刚体;⑤能否攻击敌人B;⑥If(刚体Flag==敌人){ 计算距离D1 If (D1 B=false 调用计时函数; B=true; } } else { 计算距离D1 If(D1 } } 爆炸效果 function OnCollisionStay(collision:Collision){ Instantiate(boomFire,this.transform.position,this.transform.rotation); gameObject.renderer.enabled=false; gameObject.collider.enabled=false; play=true; playmusic(); } 3.6 炮塔转向 坦克建模时需要将坦克分为炮台和身体两个部分。因为炮台前后左右的移动要受到身体的限制,但是旋转只会受到鼠标的影响,因此需要在Unity中将其设置为父子关系,并分别设置脚本,炮台的脚本代码如下: function update(){ if(tank_controll.move){ checkMouseMove(); if(FirePoint==null){ return; } if(Input.GetMouseButtonDown(0)){ if(CurrBullet>0){ var clone:Transform; clone = Instantiate(BULLET.FirePoint.transform.position, FirtePoint.transform.ratation); Var fwd:Vector3= transform.TransformDirection(Vector3.right); } } } } function checkMouseMove(){ if(Input.GetMouseButton(1)){ var h:: float=2*Input.GetAxis("Mouse X"); transform.Rotate(0,h0); } } 4 完善和测试发布 游戏制作完成后,为了检查游戏是否完整,能否达到预期效果,需要对其进行调试和运行[3]。进入游戏后,首先测试游戏的基本操作,以及炮弹的发射、爆炸等功能,还要测试AI系统是否正常。 经过测试,游戏基本达到预期效果,各界面切换流畅,运行正常。 5 结语 使用3D Max软件建模,结合使用图像处理、声音处理等软件以及游戏引擎Unity,为该款游戏的实现搭建基本环境。通过模型创建、贴图制作、场景创建、规则制定并结合鼠标键盘检测、爆炸效果、碰撞检测等技术,制作了一款TPS游戏,经测试,运行效果良好。不足的是游戏的趣味性、可操作性较差,交互设计也较少,仍需作进一步的改进。 参考文献: [1] 王亚萍. 浅析Unity 3D 创建环境地形[J] .计算机光盘软件与应用,2012 ,19(2):175178. [2] 伍传敏,张帅,邱锦明.基于 Unity3D 的 FPS 游戏设计与开发伍[J]. 三明学院学报, 2012,29(2):3540. [3] 董健. 一款基于Unity3D的移动平台游戏的设计[J]. 软件工程师,2014,17(12):3435. (责任编辑:杜能钢) |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。