分享
分销 收藏 举报 申诉 / 41
播放页_导航下方通栏广告

类型工程实训说明书—基于Unity的3D机器人探险游戏.doc

  • 上传人:可****
  • 文档编号:3145037
  • 上传时间:2024-06-20
  • 格式:DOC
  • 页数:41
  • 大小:1.02MB
  • 下载积分:10 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    工程 说明书 基于 Unity 机器人 探险 游戏
    资源描述:
    XXXX 工程实训说明书 题目 基于Unity的3D机器人探险游戏 系(部) 计算机科学与技术 专业(班级) 姓名 学号 指导教师 起止日期 2014.06.11-2014.07.05 I 摘 要 本次工程实训的实训题目是基于Unity的3D机器人探险游戏。Unity是一款很强大3D游戏开发引擎。在用Unity实现3D机器人游戏的过程中,在软件使用方面,需要用到photoshop和3Dmax等美工或建模软件;在脚本语言编写方面,需要涉及JS或C#;本说明书从最初的3D探险游戏策划,到利用Unity相关技术实现场景物体绘制及渲染,再到3D探险游戏的测试,最后到游戏的完全实现及单机版的发布,对本次实训内容的实现和完成过程进行描述和说明。Unity探险游戏主要包括如下内容:场景、检查点、widget机器人、敌方角色。检查点用于widget机器人在游戏过程中的死亡后的复活。 关键字:Unity,3D,JS,C# 目 录 摘 要 I 1 引言 1 1.1 编写目的 1 1.2 项目背景 1 2 需求规约 3 2.1 任务概述 3 2.2 需求规定 3 2.3 运行环境规定 5 3 游戏实现过程 6 3.1游戏玩法设计 6 3.2游戏内容设计 6 3.3游戏界面设计 6 3.4关卡设计 10 3.5游戏基本架构和主要类设计 11 3.6数据结构与算法设计 13 4 技术说明 15 4.1 3D渲染 15 4.2 动画制作 15 4.3 数据存储 15 4.4 游戏特效 15 4.5 粒子系统 15 4.6 碰撞检测的实现 16 4.7 游戏AI 16 5 测试用例设计 18 5.1 测试用例编写目的 18 5.2 测试用例 18 5.3 测试总结和改进建议 20 总结 21 参考文献 22 附录 游戏核心代码 23 (1)机器人的角色控制核心代码 23 (2)机器人的状态处理核心代码 26 (3)AI控制核心代码 28 (4)拾取物品和背囊管理核心代码 32 (5)碰撞检测核心代码 35 1 引言 1.1 编写目的 本文档是进行项目策划、概要设计和详细设计的基础,也是编写测试用例和进行系统测试的主要依据。同时,该文档也是用户确定软件功能需求的主要依据。本文档的读者对象很多,例如,项目经理、设计员、程序员、测试员、销售员、用户、其他人员如公司领导等。因此,运用Unity进行3D探险游戏开发的开发人员在进行开发之前,需要仔细阅读该文档,明确需求分析,并对场景构思有较好的理解。 1.2 项目背景 1.2.1 Unity简介 Unity是一款跨平台的游戏开发工具,从一开始就被设计成易于使用的产品。作为一个完全集成的专业级应用,Unity还包含了价值数百万美元的功能强大的游戏引擎。Unity3D是一个让你轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎。 1.2.2 项目背景简介 本项目的名称为用Unity进行3D探险游戏开发。由软件工程(数字媒体)教研室提出,有数字媒体方向学生具体实现,实现过程包括:游戏策划、场景设计、3D建模、渲染贴图、测试、用户体验等。 进入21世纪后,游戏动漫设计已经成为全球十分热门的行业。游戏动漫产业的巨大影响力不仅凸显在我们的生活中,其发展过程中产生的经济效益也吸引了越来越多投资者的眼光,成为了新一轮经济发展的增长点。而本次工程实训3D场景渲染的开发,最终将获得一个小型的游戏或动漫3D场景,而现在的游戏或动漫中3D产品已经成为主流。 飞速发展的游戏和动漫产业在市场上已经带来了非常可观的收益。 从市场规模来看,2009年中国网络游戏市场规模达到258亿元人民币,同比增长39.5%。其中:国产网络游戏市场规模达到157.8亿元人民币,比2008年增长41.9%,占总体市场规模的61.2%。 从主要细分游戏市场来看:大型多人同时在线角色扮演游戏(MMORPG)是市场的主导力量,2009年MMORPG占整体网络游戏市场的比例约为79%,市场规模达到203.8亿元,较2008年增长35.2%;高级休闲游戏(ACG)的增长速度在加快,2009年高级休闲游戏占总体网络游戏市场规模的比例 约为13.8%,市场规模达到35.5亿元,较2008年增长49.7%。 因此,作为数字媒体专业的学生,在毕业前接触相关的游戏或动漫开发的案例,有利于熟悉游戏或动漫的开发流程,能为以后从事游戏或动漫方向的就业打下良好的基础。 2 需求规约 需求规约包括任务概述、需求规定、运行环境规定三个部分。任务概述将对Unity的3D探险游戏需要完成的任务做简要说明;需求规定将从业务需求方面对3D探险游戏的实现进行需求分析;运行环境规定,即实现3D探险游戏场景渲染需要的硬件和软件支持。 2.1 任务概述 Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的图型化开发环境为首要方式的软件其编辑器运行在Windows 和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone和Android平台。也可以利用Unity web player插件发布网页游戏手机游戏支持Mac 和Windows的网页浏览。 本次实训的题目为基于Unity3D的机器人探险游戏技术实现,旨在成功的设计出一款可以运行在智能手机和平板电脑上的探险游戏。 该项目主要界面和功能包括: (1)界面设计的美观有一种三维仿真的效果。 (2)系统中的模型进行移动和碰撞检测。 (3)场景中的树实现风吹动的效果。 (4)机器人对小兔子的攻击 (5)拾取功能、背囊管理。 2.2 需求规定 2.2.1 对功能的规定 本项目主要功能有:开始游戏,帮助,退出游戏,机器人的移动控制,背囊管理,小兔子的AI控制。 开始游戏,loading后用户进入游戏。 表1 游戏功能表 编号 功能名称 使用角色 功能描述 输入 系统响应 输出 1 开始游戏 玩家 点击按钮用户进入游戏选择模式 按钮输入 弹出游戏模式按钮 2 帮助 玩家 点击按钮用户进入游戏帮助 按钮输入 进入游戏帮助 3 退出游戏 玩家 点击按钮用户退出游戏,游戏结束 按钮输入 退出游戏,游戏结束 4 机器人的移动控制 玩家 Wasd键控制机器人的移动 键盘输入 根据玩家的输入机器人移动 5 背囊管理 NPC 保存玩家找到的奖品 无 奖品保存到背囊中 6 小兔子的AI控制 NPC 控制小兔子的状态 无 小兔子的运动状态 2.2.2 对界面的规定 本项目涉及界面包括开发菜单界面,游戏界面。菜单界面用于显示游戏的菜单,包括开始游戏,退出游戏。游戏界面用于3D显示游戏的各个场景,物体,地形等元素。 2.2.3 故障处理要求 软件可能出现的故障: 表2 游戏故障预测表 故障类型 故障处理 机器人无法正常操作 重新运行 2.3 运行环境规定 2.3.1 硬件要求 操作系统(Windows)XP、Vista32位、Win7。CPU主频 P4 1.4GHz及以上。内存256MB以上 。显存支持独立、集成显卡,要求显存32MB以上。硬盘大小2.2GB以上。屏幕分辨率800*600及以上。 2.3.2 软件要求 Unity4.0或4.0以上版本,photoshop和3Dmax等设计或建模软件,绘制类图软件StarUML,microsoft Word2003等等。 3 游戏实现过程 3.1游戏玩法设计 玩家进入游戏场景,玩家通过点击进入游戏,进入游戏界面后。我们会看到一个机器人。使用wasd键来控制机器人的行动方向。在界面的上方我们可以看到机器人的生命值。下面有可以使用的道具。明白以后你就可以开始我的探险游戏。在行走的过程中机器人会和山体树木发生碰撞,机器人的运动状态也会发生改变。该探险类游戏为单人游戏。该探险游戏的操作方式比较单一,主要是控制游戏角色的行走方向以及向敌人进行攻击。方向键盘包括上下左右,分别用于控制机器人的前进和后退,左右转角操作。而ctrl键用于攻击敌人。 3.2游戏内容设计 3.2.1 关于剧情 进入游戏后,玩家进入一个森林的游戏场景,玩家可以在道路上移动,在行走的过程中你可能会遇到一些物品,可以拾取到自己的背囊。还会遇到一个会攻击机器人的小兔子。在玩家战胜敌人后会有奖励。 3.2.2 关于角色 该游戏主要包括:玩家和兔子。 玩家控制机器人向上下左右四个方向移动,并对兔子进行攻击。兔子在遇到机器人的时候也会对玩家进行攻击。 3.2.3 关于场景 在unity中使用地形和模型的组合来雕琢游戏世界的空间,首先定制地形,在unity中可以使用高度图来创建高度,使用笔刷来绘制高度,绘制贴图等,并添加光照、阴影和天空盒和基于距离的无话效果,还有在地形上加入了水体。 3.3游戏界面设计 3.3.1游戏界面的框架设计 游戏框架设计必须符合游戏的玩法和所使用的工具,不同于大型的MMO Game,该游戏没有复杂的游戏系统,更加侧重游戏可玩性的设计,并且由于使用Unity3D引擎,省去很多底层模版的设计,其中核心的木板为:图形渲染,物理仿真,网络联机。游戏系统的框架结构图如下: 图1 游戏系统的框架结构图 3.3.2 界面设计 本游戏作为3D游戏,3D游戏界面中主要实现游戏中场景和各个部件的绘制和控制,包括地面,天空,山体、树木等。各种游戏模型及界面如下所示: 图2 机器人角色模型 图3 敌人角色模型 图 4 树角色模型 图 5 设置触发器 图6 设置着色器 图7 游戏菜单界面 图8 积分榜界面 图9 游戏主界面 3.4关卡设计 3.4.1 关卡及关卡中游戏元素 该机器人探险游戏设有一个关卡,关卡由地形,天空盒,光照和阴影,山体,道路,天空,水体等元素构成。 地形:Unity3D中的地形模块不但可以导入高度图,还可以用笔刷为绘制地形纹理,树木,草,大大减少了开发人员的工作量。 天空盒:在Unity中,天空盒是一个特殊的虚拟盒子,它包裹在场景周围;,在渲染设置中卫整个场景一次性指定一个天空盒。 光照和阴影:场景以光源的位置为视点被渲染,每个渲染图像的像素的深度值被记录在一个“深度纹理”中,被称为阴影贴图。 3.4.2 操作设计 关卡的操作是通过键盘实现坦克的运动和攻击。 3.4.3 运行时间 每关运行时间是由开始游戏为起点玩家的失败或者胜利最为结束点。 3.4.4 关卡设计流程 确定关卡的元素 关卡的元素的位置安排设计 关卡元素的绘制 关卡环境的美化 图10 游戏关卡流程 3.5游戏基本架构和主要类设计 3.5.1 游戏的基本架构 (1) 游戏的类框架 图11 游戏的类框架图 (2) 游戏界面的基本跳转 图 12 游戏界面跳转图 3.5.2 主要类的设计 游戏中开发的类比较多,为了让读者能够更好的理解各个类的在游戏中所扮演的角色,本节将按照前面的框架分类对各个类的功能进行简要介绍。 (1)公共类 MonoBehaviour类:每当想要在Unity中创建一个新的JavaScript脚本时,会自动从该类继承,是的脚本可以访问所有该类的内置函数以及继承而来的成员,它控制了和碰撞检测、鼠标事件、摄像机事件、组件获取以及比较相关的绝大部分函数。 Animation类:该类负责对动画剪辑进行播放、组合、和混合的所有功能。 (2)游戏相关脚本代码 Widget_Cntroller.js:用于处理部件的运动和玩家的输入 Widget_Status.js:用于处理widget的状态。 Widget_Camera.js:用于控制摄像头和使它顺利地跟随部件。 Widget_Inventory.js:这里包括所有部件的收集的项目更新。 Widget_AttackController.js:处理玩家的攻击输入和对目标敌人的伤害。 Widget_Animation.js:Widget的动画状态管理器。 WaypointBehavior.js:处理脚本在所有的waypoint StoreFront.js:在waypoint处理采购变化 PickupItems.js:处理所有widget可以拿起的部件 GUI_WaypointStore.js:用于交易存储接口处理 GUI_MainMenu.js:为场景增加背景和主要的导航按钮 GUI_HUD.js:显示pertinant信息窗口,他的项目,和任何现有的敌人。 GUI_CustomControls.js:为在别处使用gui_customcontrols 包含自定义复合控件类。 Enemy_RespawnPoint.js:附加到场景中去作为敌人的重生点。当玩家走到指定的区域,一个新的敌人将重生。 EBunny_Status.js:小兔子敌人的信息状态控制。 EBunny_AIController.js:用于处理电子兔子的AI和动画。 DamageTrigger.js: 一个简单的,可应用于任何类型的对象变量的损伤触发。用于检查损伤量的变化。 Checkpoint.js:静态声明变量。 3.6数据结构与算法设计 3.6.1 数据结构 链表,哈希表是常用的数据结构,在该游戏中未用到相关的数据结构。 3.6.2 算法设计 (1)算法一:判断玩家是否在攻击范围内 首先设置小兔子的攻击半径,当小兔子查看到自己离玩家的目标距离细雨它的攻击半径时,小兔子就开始攻击。 distanceToPlayer = transform.position - target.position; If(distanceToPlayer.magnitude<attackDistance) Return; Yield; (2)算法二:判断玩家和小兔子的相对角度,使他面向玩家并向玩家移动。 使用简单的三角函数恒等式,我们就可以找到对应的角度,在FacePlayer()函数中加入如下代码: var relativeLocation = transform.InverseTransformPoint(targetLocation); Var angle = Mathf.Atan2(relativeLocation.x, relativeLocation.z)* Mathf.Rad2Deg; 4 技术说明 4.1 3D渲染 绝大多数3D图形库实现都有相似操作顺序,一系列相关的处理阶段叫做3D图形的渲染管线,基于顶点的操作与基本装配:这个过程包括本地空间一世界空间一视图空间一背面拣选,主要是根据编程人员设置的摄像机位置、视锥属性和顶点索引对顶点数据进行一系列的数学运算,使3D图形的形状及位置得以正确显示。像素操作:该过程主要根据编程人员传入显卡的纹理及顶点的纹理坐标以及光照信息进行颜色计算、混合,并对线、面采用线性插值、二次线性插值等算法最终进行出像素的颜色。这个过程的计算一般由显卡固定管线的计算公式完成,如想得到更真实、更多样的效果,可采用可编程管线技术实现。 4.2 动画制作 Unity中的动画是由关键帧控制的。他们定义了动画曲线。关键帧基本上保存了一个给定对象在某个特定时刻的状态的快照,曲线定义为链接两个或多个关键帧,以便对给定对象的完整运动路径进行插值,一个对象的每个部分或者是组件都可以为任意给定的动画剪辑包含自己的关键帧和曲线。 4.3 数据存储 文件存储。 4.4 游戏特效 在游戏中,游戏特效用于制作火花效果,很引人注目。游戏特效使游戏画面更加充满艺术的真实感,使玩家得到实时的沉浸感,更酣畅淋漓地体验游戏的乐趣。在实时环境下有许多有趣并具有创造性的方法来实现游戏的特效,。下面主要介绍粒子系统。 4.5 粒子系统 粒子系统即一组从特定物体或者位置发射出小的颗粒,游戏中这些小的粒子通常用的是小的二位图形和点图形,这些图形都带有小的纹理和Alpha通道,另外粒子具有生命周期、速度等属性,并受重力等影响。粒子系统的应用是最为广泛的,游戏中常常用来表现烟花、炮火、喷泉等等。游戏中为widget的攻击设置了火花的效果。 4.6 碰撞检测的实现 在Unity3D中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。碰撞器的基本概念: (1)碰撞器是一群组件,它包含了很多种类,比如:Box Collider,Capsule Collider等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上。 (2)所谓触发器,只需要在检视面板中的碰撞器组件中勾选IsTrigger属性选择框。 (3)在Unity3d中,主要有以下接口函数来处理这两种碰撞检测:触发信息检测,碰撞信息检测。 在该游戏中,我们创建一个齿轮这个预制模型,在project是视图中选中它,并选择Component→Physics→Sphere Collider,为这个物品赋予一个新的Sphere碰撞体。在Sphere Collider组建的Radius设置上面,单机Is Trigger框把它设置为Ture。这样这个碰撞体现在的行为就和一个触发器形体一样。两个GameObject发生碰撞,要想检测到触发信息,最少要有一个碰撞器并且勾选了IsTrigger复选框,另一个最少要有一个碰撞器组件。 4.7 游戏AI AI的全称是Artificial Intelligence(人工智能),AI是计算机学科的一个分支,它主要模拟人的思维过程,使计算机可以像人一样行动和思考。 AI在游戏中就是所编写的代码,如在给定的情形下,当游戏有多种选择时,计算机控制的角色采取的是看起来比较聪明的决策,产生与之相关的有效和有用的行为。 在游戏中,AI一般用在以下几方面:游戏中智能体的设计(当游戏世界环境变化时,该智能体能够感知环境并自动做出相应的动作);游戏世界中的寻路或者导航;其他AI技术如模糊逻辑的运用。 游戏AI技术通常可以分为两种,定性和非定性。定性AI适用于环境完全确定的情况,但现在这样的环境其实是非常少的。非定性AI则可以适用于一些不确定的环境,但相对应的,其做出来的决策可能并不是最优的。 在以前,游戏中最广泛使用的AI技术就是作弊,例如在战争模拟游戏中,由计算机控制的玩家,可以得知对手的所有信息,这样根本就不需要侦察兵去收集这类情报。可是这样会造成游戏中很多的不公平,而导致可玩性的下降。现有的AI技术,以及某些人工生命技术,种类繁多,这里不再一一罗列。 在机器人探险游戏中,我们实现小兔子自由的四处游荡,直到它看到一个玩家并且上去追捕它。小兔子在设定的区域范围内转向并向目标移动,在与目标发生碰撞就开始攻击,当移动到范围外,继续游荡,如果被打败,丢下随机小物品并且消失。 AI在游戏中就是所编写的代码,如在给定的情形下,当游戏有多种选择时,计算机控制的角色采取的是看起来比较聪明的决策,产生与之相关的有效和有用的行为。 5 测试用例设计 5.1 测试用例编写目的 软件测试就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。软件测试就是在软件交付用户使用或投入运行前,对软件需求规格说明、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。 软件测试是为了发现错误而执行程序的过程。测试的最终目的是为了避免错误的发生,确保应用程序能够正常高效的运行。好的测试用例在于发现至今未发现的错误,而成功的测试是发现了至今未发现的错误的测试。好的测试工程师应该做到不仅发现问题,还能够帮助开发人员分析问题。该说明书通过一系列测试用例,达到测试游戏运行是否能够达到预想状态。 5.2 测试用例 5.2.1 被测试对象的介绍 被测试的对象为Unity3d机器人探险游戏,该端游戏是3D的,基于unity,探险类游戏。 5.2.2 测试范围与目的 表3 游戏测试范围 测试范围 测试目的 界面测试 检测界面是否正常运行 碰撞检测 检测机器人、小兔子之间的碰撞检测 机器人检测 检测机器人的移动,攻击 AI检测 检测初步具有AI的物体是否能够真的实现人工智能 5.2.3 测试环境与测试辅助工具的描述 测试的环境是:Unity引擎。 测试的辅助工具是:Window+Monodevelop。 5.2.4 功能测试用例 功能测试就是检测游戏的所需功能能否正常执行,如下表所示: 表4 功能测试用例 功能描述 菜单界面测试 用例目的 菜单各按钮是否能正确实现其功能 前提条件 程序运行正确 输入/动作 期望的输出/相应 实际情况 按下开始游戏按钮 进入游戏界面 进入了游戏界面 按下物品按钮 生命值增加 玩家的生命值增加了 功能描述 游戏胜利检测 用例目的 玩家胜利后是否可以获得物品奖励 前提条件 游戏胜利 输入/动作 期望的输出/相应 实际情况 按下开始游戏按钮 进入游戏 进入游戏 功能描述 机器人与小兔子的碰撞检测 用例目的 检测机器人与小兔子能够碰撞 前提条件 游戏正常运行,已进入游戏界面 输入/动作 期望的输出/相应 实际情况 攻击小兔子 玩家对小兔子进行强电流攻击 玩家对小兔子进行强电流攻击 功能描述 玩家对小兔子的攻击检测 用例目的 检测玩家是否能对小兔子进行攻击 前提条件 游戏正常运行,已进入游戏界面 输入/动作 期望的输出/相应 实际情况 拾取物品 将物品收入背囊,物品数增加 将物品收入背囊,物品数增加 功能描述 背囊管理检测 用例目的 检测是机器人否可以拾取物品 前提条件 游戏正常运行,已进入游戏界面 输入/动作 期望的输出/相应 实际情况 小兔子攻击玩家 玩家的生命值减少 玩家的生命值减少了 功能描述 小兔子对玩家的攻击检测 用例目的 检测小兔子能否对玩家发出攻击 前提条件 游戏正常运行,已进入游戏界面 输入/动作 期望的输出/相应 实际情况 点击背囊按钮 玩家的生命值增加 玩家的生命值增加了 功能描述 背囊管理检测 用例目的 检测背囊按钮能否增加玩家生命值 前提条件 游戏正常运行,已进入游戏界面 输入/动作 期望的输出/相应 实际情况 通过方向键盘,使机器人前进的方式靠近小兔子 机器人与小兔子发生碰撞,停止前进 机器人与小兔子发生碰撞,停止前进 功能描述 机器人与小兔子的碰撞检测 用例目的 检测机器人能否与小兔子发生碰撞 前提条件 游戏正常运行,已进入游戏界面 输入/动作 期望的输出/相应 实际情况 通过方向键盘,使机器人进入水体 电路短路机器人死亡 电路短路机器人死亡 功能描述 机器人的死亡检测 用例目的 检测机器人遇到水体时是否死亡 前提条件 游戏正常运行,已进入游戏界面 输入/动作 期望的输出/相应 实际情况 小兔子死亡 丢下奖励物品并消失 丢下奖励物品并消失 功能描述 玩家奖励检测 用例目的 检测小兔子死亡后是否能丢下奖励物品 前提条件 游戏正常运行,已进入游戏界面 5.3 测试总结和改进建议 在这次测试过程中发现了很多问问题,并及时的得到了解决了,使得游戏很多细节方面得到了改善。但是测试量还是有点大,很多不必要测试的数据被测试,走了弯路,以后可以更科学规划测试计划。 总结 本次工程实训的内容为基于Unity的3D机器人探险游戏。在本次实训之前,由于自己对Unity掌握的并不是很好,所以在实训开始的第一周,将主要的精力放在了对Unity基础操作和基本代码抒写的学习上,以及完成了探险游戏的策划。实训第二周,完成的任务主要是触发器和着色器的使用及相关代码的抒写。实训第三周运用Apache搭建服务器,完成了积分榜的界面设计和数据传输。实训第四周主要完成最终合成和游戏测试。 在实训的中期,当游戏开发小组在班上展示设计制作的作品时,说实话自己感受到了压力,因为他们做的比自己的好很多。但动力也是在压力下产生的,因此在实训后期,我加快了开发步伐,最终较好的完成了本次实训的内容。最终较好的完成了3D机器人探险游戏。 最后感谢老师在工程实训中的耐心指导以及班上同学的帮助与支持,我们相信,下一次再有机会进行Unity的3D游戏设计时我会做的更好。 参考文献 [1] 吴亚峰.Unity4 3D开发实战详解.北京:人民邮电出版社,2012. [2] 米歇尔.梅纳徳著,Unity游戏开发实战.北京:机械工业出版社,2012. [3] 李振,苏南.Java 5游戏开发.北京:机械工业出版社,2007. [4] 敖富江.3D游戏编程入门经典.北京:清华大学出版社,2006. [5] 白洁, 罗颖民.游戏开发与制作.北京:清华大学出版社,2007. [6] 汪永松. Android平台开发之旅.北京:机械工业出版社,2012. 附录 游戏核心代码 (1)机器人的角色控制核心代码 //Move the controller during the fixed frame updates function FixedUpdate() { //check to make sure the character is controllable and not dead if(!isControllable) Input.ResetInputAxes(); else{ if (grounded) { // Since we're touching something solid, like the ground, allow movement //Calculate movement directly from Input Axes moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); moveDirection = transform.TransformDirection(moveDirection); moveDirection *= rollSpeed; //Find rotation based upon axes if need to turn moveHorz = Input.GetAxis("Horizontal"); if (moveHorz > 0) //right turn rotateDirection = new Vector3(0, 1, 0); else if (moveHorz < 0) //left turn rotateDirection = new Vector3(0, -1, 0); else //not turning rotateDirection = new Vector3 (0, 0, 0); //Jump Controls if (Input.GetButton ("Jump")) { moveDirection.y = jumpSpeed; } //Apply any Boosted Speed if(Input.GetButton("Boost")){ if(widgetStatus){ if(widgetStatus.energy > 0) { moveDirection *= fastRollSpeed; widgetStatus.energy -= widgetStatus.widgetBoostUsage *Time.deltaTime; isBoosting = true; } } } //Duck the controller if(Input.GetButton("Duck")){ controller.height = duckHeight; controller.center.y = controller.height/2 + .25; moveDirection *= duckSpeed; isDucking = true; } if(Input.GetButtonUp("Duck")){ controller.height = normalHeight; //reset for after ducks controller.center.y = controller.height/2; //recenter for after ducks isDucking = false; } if(Input.GetButtonUp("Boost")){ isBoosting = false; } } // Apply gravity to end Jump, enable falling, and make sure he's touching the ground moveDirection.y -= gravity * Time.deltaTime; // Move and rotate the controller var flags = controller.Move(moveDirection * Time.deltaTime); controller.transform.Rotate(rotateDirection * Time.deltaTime, rotateSpeed); grounded = ((flags & CollisionFlags.CollidedBelow) != 0 ); } } function IsMoving(){ return moveDirection.magnitude > 0.5; } function IsDucking(){ return isDucking; } function IsBoosting(){ return isBoosting; } function IsGrounded(){ return grounded; } (2)机器人的状态处理核心代码 function ApplyDamage(damage: float){ health -= damage; //play hit sound if it exists if(hitSound) { audio.clip = hitSound; audio.Play(); } //check health and call Die if need to if(health <= 0){ health = 0; //for GUI Die(); } } function AddHealth(boost: float){ //add health and set to min of (current health+boost) or health max health += boost; if(health >= maxHealth){ health = maxHealth; } print("added health: " + health); } function AddEnergy(boost: float){ //add energy and set to nim of (current en + boost) or en max energy += boost; if(energy >= maxEnergy){ energy = maxEnergy; } print("added energy: " + energy); } function Die(){ //play death sound if it exists if(deathSound) { audio.clip = deathSound; audio.Play(); } print("dead!"); playerController.isControllable = false; animationState = GetComponent(Widget_Animation); animationState.PlayDie(); yield WaitForSeconds(animation["Die"].length -0.2); HideCharacter(); yield WaitForSeconds(1); //restart player at last respawn check point and give max life if(CheckPoint.isActivePt){ controller.transform.position = CheckPoint.isActivePt.transform.position; controller.transform.position.y += 0.5; //so not to get stuck in the p
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:工程实训说明书—基于Unity的3D机器人探险游戏.doc
    链接地址:https://www.zixin.com.cn/doc/3145037.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork