目录
版权声明:本博客涉及的内容是对本人游戏作品《战斗吧!勇士》项目的总结,发布在网络上,旨在大家交流学习、互相促进。严禁用于其他一切用途。
摘要
游戏开发技术概述
Unity 3D 游戏开发技术概述
游戏开发技术的未来走势
I 游戏设计思想
II 游戏开发流程
游戏开发需求分析与开发方向
游戏对象的期望效果策划
游戏对象的操作控制
图片裁切与游戏对象的 Animation 动画设计
游戏音频效果的添加
游戏的程序设计与分析
关键技术的应用与难点问题的解决
游戏存在的缺陷与不足
结语
摘要
Unity 是当下游戏开发的一个主流开发引擎。Unity 不仅开发功能强大,而 且拥有强大的游戏开发社区,更有甚者,其提供免费独立版本可供用户下载,这 对于游戏开发者以及游戏玩家来说,都是一个十分利好的消息。随着游戏行业的 高速发展,市场的需求进一步加大,使得游戏的更新迭代速度前所未有的快,同 时对游戏开发的质量要求、效率要求也就显得更重要,甚至说效率和质量决定了 游戏的发展前景。Unity 3D 游戏开发技术的深入掌握离不开大量动手实践,动 手能力决定一个人的实践水平,实践水平将反作用于动手实践能力,因此,作为 一门重要而核心的游戏开发技术,Unity 3D 势必有其独有的优势,相信通过动 手实践,加之对作品进行报告分析,能够更好的体会该技术所蕴含的核心开发理 念和技术应用理念。
关键词 游戏开发 Unity 3 D 项目实战 心得体会
游戏开发技术概述
伴随着互联网用户的进一步增长,各种游戏客户端也应运而生,且层出不穷。 在游戏开发行业,目前主流的游戏开发技术逐步与其独载的开发引擎协调搭配。 比如现有 OGRE、Unreal、Unity、Gamebryo Element 等主流开发引擎,由于论文 要讨论的核心问题不在此处,故下面仅对该几款主流开发引擎作简要介绍。 ORGE 开发引擎,其设计理念在于“以设计为主导”,并且该开发引擎注重质 量(品质)胜过数量,它采用灵活的类层次允许你为你所喜欢的任何游戏场景开 发与之对应的特定场景管理插件。总之,ORGE 对于热衷高质量、灵活性、清晰 文档的设计的开发者来说,是一个绝佳的选择。 Unreal 则是 Epic 开发的游戏引擎,是目前世界上知名授权最广的游戏开发 引擎,占有全球商用游戏引擎 80%的市场份额。提到该公司,必须要提到的就是 其旗下 Unreal Engine 3D 引擎,该引擎采用了当下最新的即时光迹追踪、HDR 光照技术、虚拟位移等新技术,而且能够实现每秒钟实时完成两亿个多边形运算, 是超级强大的一款开发引擎。 Gamebryo Element 是一款支持 C++编写的多平台游戏引擎,兼容很多系统, 并且会为部分客户及开发者提供开发所需的套件、强健的和模块化的开发工具, 以便开发者根据自身需要创造出独特的游戏。该引擎在游戏开发层面的重点比较 突出,追求灵活、先进、高品质。 Unity 3D 开发引擎是 Unity Technologies 公司开发的一个让玩家轻松创建 三维视频游戏、游戏动画、场景可视化的综合性的游戏开发引擎,并且完美的支 持综合编辑、资源导入、一键部署、着色器、创建地形、物理特效、音频和视频 等。Unity 3D 在上海召开了一次有关开发技术的研讨会,大会不仅对引擎技术 的介绍,更对引擎影响力的扩大,提供了坚实的基础。
Unity 3D 游戏开发技术概述
首先,谈到 Unity 3D 游戏开发,对于广大的游戏开发人员及爱好者来说, 是绝对不应该感到陌生的。Unity 3D 游戏开发引擎是由丹麦 Unity 公司设计的 一款很容易上手使用的跨平台游戏开发工具,Unity 3D 开发技术以跨平台性优 越、脚本语言简单、成本低、支持各种插件、文档齐全著称,Unity 3D 更关注 游戏的可玩性,给开发人员和游戏玩家带来不一样的全新体验。 其次,Unity 3D 游戏开发引擎具有如下特征:工具是在原有 Unity 平台上 的一个更新版本,具有更加清晰的画面;并且采用游戏开发行业中最顶级的光照 贴图技术,靠近时可以清晰观察到阴影和具体细节;此外,Unity 3D 技术最惊 艳的是其现今的延迟照明系统,可以允许开发者在自己的场景里创建多个光源, 并且保留充足完备性能;在游戏开发过程中,支持断点设置,逐行进行,及时处 理问题;支持音场区,对所有音频参数推出了可编辑衰减曲线,使开发者可以控 制声音环境;Unity 中可以剔除同时在线的移动设备、可以在网络和游戏机上运 行,而且最重要的是,没有额外费用产生;Unity 3D 可以很好的支持大型游戏 项目,内容管理器完全可以满足快速查找这一需求,并且可以通过预览的方式显 示所有内容,还可以标记和搜索。 总之,以上提到的都是 Unity 3D 开发平台的优势所在,Unity 3D 游戏开发 技术很受广大开发者喜欢,原因从其优势上可以清晰明了的看得出来,相信其用 途还将会有很大的用武之地,等待开发者进一步挖掘。而随着互联网的发展和电 脑、智能手机等终端设备的逐渐普及与更新换代,全球网络游戏市场规模进一步 扩大,增长速度保持在较高水平。随着用户体验、用户需求的不断改变,相信在 未来,Unity 3D 游戏开发引擎将会有更大的机会造福开发者,最终给游戏玩家 带来不一样的、全新的体验,同时也完全有理由相信,Unity 3D 游戏开发技术 将会愈来愈火爆。
游戏开发技术的未来走势
说起游戏行业的未来发展趋势,我倒是想先谈一下当下经久不衰的几个游 戏。广大游戏玩家热衷的游戏一般有王者荣耀、英雄联盟、绝地求生、荒野行动、 地下城与勇士。这些游戏,大多是别具特色,而新颖、团战、战术竞技、刺激、 心跳,这些关键词能够很好的覆盖这些游戏的特色。那么我想,在未来一段时间 内,游戏开发技术的发展趋势依然会与游戏体验的这几个关键词协同前进。下面 简要从以下方面说明: 未来游戏开发技术将注重开发效率大幅提高。时代的发展总是会催生新的事 物,而新事物必将取代旧事物,为满足瞬息万变的时代发展和玩家需求,游戏开 发必须提高效率,以更好地将游戏开发市场化规模扩大话,提高活力和竞争力。
未来游戏开发技术将注重场景效果的高度美化与实景化。就从现在来说,好 的游戏体验已经很大程度上离不开优美逼真的场景效果了,好的场景效果是玩家 的美好游戏体验的开始,所以这点也将是一大技术发展方向。 未来游戏开发技术将更广泛地融入虚拟现实技术,带给玩家更多的真实感体 验。虚拟现实技术现在已经造福人们,虚拟现实技术已经走进各大高新技术企业, 虚拟现实与游戏的结合也正在开始、正在发生。相信在未来,这一大潮流势必要 走进平常百姓家中,且势不可挡。 未来游戏开发技术将注重游戏场景与感觉器官的完美融合。现在社会的主要 矛盾已经变为人民日益增长的美好生活需要与不平衡不充分地生产力之间的矛 盾。游戏方面同样如此,游戏玩家的美好体验已经在以最大速度刺激游戏开发人 员进行大胆创新,同时,将真实感推上一个新的台阶、新的高度,将会是未来游 戏开发技术的方向。相信未来的游戏开发技术能在游戏体验与感觉器官深度融合 上得到大的发展与突破。 总之,未来的游戏开发技术将会是高新技术、高性能处理的综合应用、深度 融合、高度发展,让我们一同期待并见证未来游戏行业的发展。
I 游戏设计思想
开发这款游戏的一切工作,一切努力都围绕一个核心概念:休闲。在写 这份游戏计划书的时候,就始终在思考一个问题,游戏最根本上为什么而生? 为了赚钱谋利? 我想不是的,至少在最初游戏出现的时候,从根本上讲不是为了开发者 谋取利益,而是满足人们业余时间的休闲与放松。由此,项目开发的这款小 游戏,集“休闲”与当下火热的射击类游戏与一身,为了满足用户在疲倦之 际需要放松的需要,“战斗吧”小游戏,应运而生。
II 游戏开发流程
游戏开发需求分析与开发方向
游戏,是一个真实存在于我们身边的虚拟世界。作为一个计算机专业的 学生,我眼中的游戏,应当是为休闲娱乐而生的,沉迷游戏是我坚决反对的,对 于绝大部分人,只要不是以电子竞技为职业的人,那么游戏终归不是生活的主要 部分。其次,说到现在的信息技术类专业的学生,日常处理与技术相关的问题、 反复性的研究技术,难免会带来脑力不足,疲惫倦怠的时候,这时候如果有一款 休闲打发时间的小游戏就显得很必要。于是项目就瞄准了休闲小游戏这个方向, 众所周知,前段时间很火的游戏有一个“吃鸡”,属于射击类游戏,该游戏经由 网络发布之后,玩家激增,可见大家心中应该都有“军神”、“神枪手”的梦。 结合这点,最终将方向确定:休闲类射击游戏,并最终决定定名为“战斗吧”, 这也预示着同我一样面临考验和就业抉择的同学们,能够勇于面对挑战,不惧未 来,大胆做出自己的审慎的决定,并为之战斗。
游戏对象的期望效果策划
总的来说,我在这一点上花费的功夫相对较大,因为游戏效果的策划,直接 关系到玩家体验,而玩家体验有可以说是游戏的生命线。对一个游戏来说,如果 玩家体验不好,那就等于是白费周折,游戏本身就是用来在疲惫或心血来潮之余 休闲消遣的,体验不好,就意味着这一切休闲功用特性都无法实现,结果也就可 想而知。下面入正题: 关于主人公的构想,只有英雄和敌人。没有错综复杂的人物设置,当和室友 及朋友谈论起来这点的时候,就建议说既然是休闲游戏,不如就设置较简单的人 物,就比如开发奥特曼打小怪兽之类的游戏,画面清爽,人物简单,能打发时间, 这样就很好。 人物(英雄、敌人)角色效果:首先是人物角色应当能通过键盘输入控制其 移动,移动之余应伴随着动态效果,这样看起来才会很棒,画面才会逼真。归结 起来精简的讲:①移动起来要控制自如 ②移动要有动感 ③要逼真。 武器:英雄击败敌人要有武器,不能仅仅依靠肢体接触与肉搏。武器的设计 最终确定为发射子弹,而最终的效果要求大致是:①子弹发射要精准 ②控制要自 如 ③ 要有枪响的声音。 游戏背景:游戏背景比较简单,突出体现“战斗吧”游戏名称,在背景图上 三个大字站立于中央位置。其次,稍加了一些说明文字进行说明这是课程作业设 计,最终效果详见作品。
游戏对象的操作控制
这一部分主要说明游戏开发过程中的英雄与敌人的角色的实际控制,具 体体现在人物的移动控制、人物角色的生成机制、子弹的发射控制等。前面 已经提到,该游戏的开发建立在“休闲”这一核心概念上,对于游戏的控制, 一切从简。 英雄角色的移动:对英雄的移动采取常规的“上”、“下”、“左”、 “右”与“W”“S”“A”“D”相对应。由于在移动方向的设计上,采用的 为矢量表达,所以通过移动合成,会出现“左下”、“右上”等移动效果。 敌人角色的移动:本游戏中,将敌人这一对象定性为随机出现、自由移 动。但最终移动的方向是冲向英雄,通过与英雄角色碰撞,导致英雄角色的死亡。 子弹发射的控制:子弹将会负载到英雄人物对象上,通过英雄的子弹发 射行为,子弹发出,并伴随着枪响声,并将子弹数量定为无限。 这部分的程序部分,将在程序设计部分进行详细的解说。
图片裁切与游戏对象的 Animation 动画设计
所谓的裁切,其实很常见。由于我们制作的游戏的素材图片,往往不是单个 提供,而是给出整张包含多个图片的大图,由我们根据需要自行裁切,裁切的过 程其实也比较简单,这里不再赘述。 前面已经提到,人物对象的移动要有动态美感,只有如此,游戏画面才 显得比较逼真,这个模块将详细介绍动画制作部分的操作。由于英雄人物的动画 效果与敌人动画效果制作过程相同,而英雄移动本身的各个方向的动画效果也基 本相同,仅仅是配图动画的区别。所以这里仅对英雄人物动画中的“向下移动” 动画制作简要说明: 1. 选择人物对象英雄 hero 之后,在工具栏中依次打开:Window →Animation , 点击面板左上角的“空格键”,打开下拉菜单,选择 Create New Clip 选项;
2. 设置动画的名称为“WalkDown.anim”; 3. 设置 Sample 的选项值为 5,用于控制动画效果的切换频率; 4. 将裁切后的与向下移动效果匹配的裁切图拉入时间轴; 5. 全部拉入时间轴之后,点击录制按钮来停止录制,截至此刻,游戏对象用到 的动画便制作完毕。
游戏音频效果的添加
音频效果的加入,会使得我们游戏的开发效果添彩,显得更加绘声绘色, 好的音频效果,会给玩家带来莫大的游戏体验,令玩家心神愉悦,对游戏的 总体评价也会增色不少。 本游戏中,添加了子弹发射的声音效果,目的就是为了给玩家带来不一 样的体验,子弹音效能给玩家带来愉悦感。另外,游戏中插入了背景音乐, 旨在让游戏玩家在预约欢快的氛围中,放松自己,从而实现本游戏的设计价 值、体验价值。
游戏大环境预演书面脚本
在遥远的太空深处,有一个名为 M-873 的星球,其即将面临敌人毁灭, 而英雄在此刻为捍卫家园而战斗,由于敌人数量众多,英雄孤军奋战,寡不 敌众,迫于实际需要,英雄向地球发出了求救信号。 联合国太空救援工作司收到信号并转码解析了解到实际情况之后,经过 商议决定向该星球提供援助,并要求英雄要顽强抵抗一段时间,以便为救援 队伍到达提供时间支持。这段时间具体多久为无人可知,总之,联合国太空 救援工作司要求英雄要存活足够长的时间,这样,才有可能在 M-873 毁灭前 救援军抵达得到救援。英雄为家国而战,力争存活足够长的时间!战斗吧, 英雄!
游戏的程序设计与分析
1.随机生成敌人:
var enemy:Rigidbody2D;
function enemySpawn() { var enemyInstance:Rigidbody2D;
enemyInstance=Instantiate(enemy,Vector3(Random.Range(2,8),Random.Rang e(-4,4),0),Quaternion.Euler(new vector3(0,0,0))); /*限定敌人的出现位置坐标范围*/ }
enemySpawn();/*调用生成敌人函数*/
invokeRepeating(“enemySpawn”,3,3); /*InvokeRepeating()是内置函数,指定频率重复调用某个函数*/ /*游戏开始 3 秒之后,每个 3 秒生成一个敌人*/
2.敌人的移动:
上面“游戏对象的操作控制“中已经提到,敌人的移动是始终冲向敌人的,这里 买呢用到了一个核心函数,这仅指出该核心函数,其余代码则不予展示: var heroObj:GameObject; heroObj = GameObject.Find(“hero”); enemyAnimator = GetComponent(“Animator”); if(transform.position>heroObj.transform.position.y) /*如果敌人的位置在应英雄上方,则敌人会向下移动*/ { enemyAnimator.SetBool(“enemyLeft”,false); /*运动方向及匹配动画设置*/ /*enemyUp、enemyRight 等同 enemyLeft,不再写出代码*/ enemyAnimator.SetBool(“enemyDown”,true); enemyDown=true; /*其余三个方向为 false,不再写出代码以节省*/ transform.Translate(Vector3.down*enemySpeed*Time.deltaTime) /*其他情况不再赘述,仅作此例解说*/ }
3.射击子弹:
var orbInstance:Rigidbody2D;
if(Input.GetButtonDown(“Fire1”))
{ 省 略 }
/*子弹发射的关键部分在此处,点击鼠标左键进行子弹发射*/
4.移动
英雄移动与子弹的控制基本一致,前者是通过“W”、“A”、“S”、“D”按键
控制,后者通过鼠标左键控制,终归原理相同,代码设计类似,不再单独分析。
5.碰撞检测:
function OnCollisionEnter2D(other:Collision2D) { if(other.gameObject.name==”enenmy(Clone)”) { time.timeScale=0; destroy(gameObject); } } /*这部分代码用以实现敌人与英雄碰撞后,同归于尽,游戏结束*/
关键技术的应用与难点问题的解决
难点问题往往出现在关键技术上,这是我在这次项目开发中的最大体会。首 先,本项目中,关键技术有以下部分:素材图片的裁切与 Animation 动画设计、 对象预制体的母体处理、随机生成敌人功能的实现。 图片的裁切与动画设计这方面,最初的尝试使用,结果很不理想,不说对动 画的制作效果没有任何动态美感,更有甚者,基本的图片裁切都无法实现一次多 个。后来在网上查看了许多资料,才知道裁切的时候分 single 和 multiple 两大 类,最终这个弱智的问题得以解决。 其次,就是英雄与敌人 Animaton 动画的制作,最初的问题出现在运动方向 与动画的效果不匹配,修改多次无效,最后也是在网上查询过资料之后,得知 Animation 要与 Animator 的角色控制协调一致,最终也有了效果。
游戏对象预制体母体的处理,这一块在开发的过程中,最是头痛。为什么呢? 简单的说就是,随机生成的敌人对象是母体的克隆体,由于发射子弹导致母体消 失,最终无法继续进行敌人的生成,这就很难受,万事俱备,只欠东风。最终在 网上查询了很多资料没人任何解决方案。思来想去,怎么让母体不消失?最后终 于想了一个比较损的解决方案,那就是通过坐标设置把母体送到很远的地方,让 母体在游戏进行的时间内回不到游戏显示面板,这样,这个问题便得到初步解决, 暂时想不到比这个更有效的方法了。
敌人的随机出现,这一模块,最初想的比较简,把目标瞄准了有没有 Unity 的内置函数来实现这一功能,最终查询无果,也就想到了通过代码来实现这一功 能,但是代码的解决方案进展的也不是很顺利,也是在各种编译调试之后,才最 终实现预期功能。 不过好在这些关键技术上的难点问题有了初步的解决方案,虽然解决方案不 是最优的,但是对我来说,这确实是在项目进展过程中,通过摸爬滚打之后,能 得到的最好的解决方案了。
游戏存在的缺陷与不足
关于这点,我首先想到:游戏项目中所有的缺陷与不足,不过是理想期望与 现实开发之间的差距罢了。这句话很有道理。 “战斗吧”项目中,上存在的缺陷与不足有以下几点: 1. UI 界面做的比较简单,虽是在追求“休闲”这一核心,但是没有“休闲” 出那种无可言表的格调与美感,尚待改进; 2. 音效搭配不是特别完备,由于某种原因(之一就是:网上的音效大多都 收费,很无奈),游戏的音效只搭配了子弹的发射和背景音效,相对比 较单调; 3. 没有设计出更为动感、丰富的动画来增强游戏效果,这点上有些不足, 相信随着互联网免费资源的规模进一步扩大,我将能够有机会更好的完 善作品。
结语
Unity3D 平台是当前游戏开发市场上游戏开发人员所掌握的工具中最多占 比的,其用户规模也相当巨大。并因其跨平台易上手等诸多优点,成为游戏开发 者的必备工具,通过游戏项目实战,能加强对 Unity 3D 技术的训练与掌握,非 常有益于开发者进步与提高,这次我的收获很大。同时也相信,在未来 Unity 3D 游戏开发技术将会有更大的舞台和应用前景。