加入收藏 | 设为首页 | 会员中心
您当前的位置:首页 > 产品中心

Unity 3D开发游戏的设计难点 VR开发心得

时间:2018-07-01 06:18:25  来源:本站  作者:

  nity 3D 引擎对于开发者来说,入手非常快,因为它采用的是 C# 作为开发语言,这也大大降低了开发者的门槛。但凡只要懂一门编程语言的人都能使用 Unity 3D 引擎开发,另外 Unity 3D 的内部架构设计非常好,采用的是组件开发,开发者能快速通过组件堆积出一个游戏。既然使用 Unity 3D 引擎开发游戏这么简单,那它有没有坑呢?答案是肯定的,比如开发游戏经常遇到的坑:被很多开发者吐槽的包体过大、游戏架构设计,热更新,包防破解问题等等,下面笔者分享在游戏开发中的坑及解决方案,为大家的学习之路提供一定的参考。

  Unity 引擎最突出的问题是包体比较大,尤其现在随着硬件的提升,游戏品质要求越来越高,游戏品质的提升主要是从两方面体现的:一是通过图片的精细和模型的面数,二是利用 GPU 提升模型材质的渲染。模型面数和材质图片会增加包体的容量,尤其对于大型游戏来说,一个包体至少 100M 以上,这对于用户来说很难接受。程序开发者使用了很多招数都无法减少包体大小,笔者也遇到类似问题,通常的做法是将大部分资源放到资源服务器上,程序启动时,将其下载到手机本地,这么做是解决了包体过大问题,但是前期的资源下载也会影响到用户体验。

  现在问题聚焦在解决资源下载问题,笔者使用了另一种解决方案:利用多线程断点续传解决资源下载问题,程序要事先打包一到两个关卡在包体中,保证玩家在断网的情况下或者是刚启动游戏时能够顺利的进入游戏。玩家在玩第一关卡的时间策划要计算好,这样可以保证在有 WiFi 网络的情况下,启动多线程在后台下载,可以同时启动两到三个线程,在玩家把关卡打完后其他关卡也会陆续保存在本地,这样可以保证游戏不会中断。当然如果出现断网的情况可以弹出提示让玩家打开 WiFi。再介绍一下断点续传功能,在下载资源的过程中防止网络中断导致下载的资源废掉,一旦网络检测不到,它会保存并记录已下载的资源字节位置,如果再检测到网络,线程自动继续下载,这跟我们使用的迅雷下载很类似。资源的下载是在用户不知情的情况下进行的,这样就不会妨碍用户体验,下面把多线程断点下载的流程图给开发者展示如下:

  实现思路是:客户端启动,首先判断是否有 WiFi,因为是网络游戏 WiFi 一般是打开的。如果检测到 WiFi,首先读取本地的版本文件,然后通过 读取服务器端的版本文件,二者会有一个对比,把需要下载的资源名字存放在下载队列中,需要下载的资源分两种:一种是替换旧的资源,做法是首先删除本地旧的,再下载新的,还有一种是本地没有的,需要从资源服务器上直接下载的。下载时会在后台启动多个线程,同时下载一个到两个资源,如果网络通畅很快会下载完,如果用户把资源自己清空了,那只能重新下载。

  多线程下载方案解决了包体大小问题,当然考虑到 WiFi 的带宽,对场景资源要求大小控制在 10M 左右,如果超过 10M 可以对其进行分包处理。另外需要注意的是对游戏图片的压缩,在这里推荐工具是:PhotoZoomPortable.exe。再推荐在线的图片压缩网址:,二者都可以对图片进行压缩,另外对于图集的使用,推荐图集工具:Texturepacker,相比 UI 自身的图集,Texturepacker 打出的图集更节省空间。

  关于架构设计,很多人对此褒贬不一,笔者认为架构设计还是非常重要的。Unity 提供了各种开发组件,导致很多开发者遇到问题不是想着如何解决而是先在网上搜索看看有没有别人实现的组件,这种做法不能说是错误的,至少你在使用别人组件时是否能够完全掌握它,能否看明白人家写的东西,开发游戏不难,难在游戏后期的版本更新维护。记得我朋友公司做了一个游戏项目,即将上线运营,但是遇到了各类问题,其中最严重的问题是版本迭代时,各个模块功能耦合性太紧,很难进行功能扩展,牵一发而动全身,导致项目迟迟上不了线。他特意邀请我过去帮他解决这个问题,我去他公司看了一下他们的项目程序,各个模块之间逻辑互相交叉,耦合性特别强,在某个模块增加一个功能会涉及到其他模块的修改,一不留神就出 Bug,程序每天为这样的事情闹的焦头烂额,疲于应付。我根据他们的项目分析了一下出现的问题,首先是它们在 UI 这块逻辑太乱,UI 上挂接了各种逻辑脚本,我们首先拿 UI 这块开刀,去掉挂接在 UI 上的各种脚本,换句话说,UI 不挂任何逻辑脚本。我选择的架构模式是 MVC,它是架构 UI 的不二选择,将 UI 的逻辑放到了对应的各个 View 脚本中,每个 UI 面板都有自己的 View 类,Controller 主要实现的是控制 View 的切换显示,每个 View 对应自己的 Controller 模块,Model 模块处理的是 UI 面板上的数据更新。

  思路理清了后,接下来就是整理逻辑代码,花了整整两个星期加班加点把这块逻辑重新写了一遍。接下来是理顺项目中各个系统的设计,这块主要体现在技能系统上,它是游戏核心与玩法直接有关系的。关于技能系统的设计方式也是很多的,以前我做的是把动作和技能系统放在一起,使用的是 FSM 有限状态机,这样设计也是可行的。关于我朋友公司的这个项目改造,由于它前期已经写好了,只是耦合性太高,只能在它原有的基础上进行修改,各个模块之间互相交叉,我对它们的改造采用的是模块化设计,用于降低耦合性,架构图如下所示:

  图中显示的各个技能系统是需要自己封装的,Router 是所有技能对外的逻辑接口,它是联系各个技能系统与对应角色逻辑的纽带。不论是 NPC 和玩家角色,它们都需要调用 Router 函数中的接口去实现技能逻辑。Router 与 NPC 和玩家之间的关联,我采用的是消息传送的方式,就是说如果需要用到 Router 中的函数可以通过消息发送的方式进行,这样减少了模块之间的耦合性。一旦有需求变化只需要维护好 Router 类即可。在这里友情的给读者提示一下注意事项,在重构代码时,不要把整个项目重构,那样很容易破坏项目的整体性而且容易造成功能细节丢失,导致经过重构后的项目被废弃。如果出现这样的结果,还不如不重构。一般重构代码时,先把需要重构的模块熟悉了才动手做,而且重构时以模块为单位去重构代码,采取各个击破的方式,重构后的游戏项目在扩展性方面明显改善。所以说游戏架构对于产品来说是非常重要的,游戏产品上线只是第一步,后期版本迭代才考验你产品架构设计的好坏。在这里不是给读者介绍如何架构好,而是做适合于你游戏产品本身的架构设计。

  游戏产品的热更新开发,网络上有很多人写过关于 Unity 的热更新的使用案例,笔者由于项目需求也使用热更新开发过游戏,在这里谈一下我的使用心得。我选择的实现方案是用 ulua 实现的热更新,使用热更新的主要目的是后期版本更新逻辑时用户无需重新安装程序包,把编写的逻辑和资源一起放在资源服务器上,可供程序启动下载。在这里推荐使用网上的 SimpleFrameWork 框架,网上有使用介绍说明,在这里就不啰嗦了,大家看一下 SimpleFramework 工程文档就明白了,使用 uLua 编写逻辑时,考虑到性能问题,一般都是用在 UI 上面,因为游戏上线运营后,各种活动的设计实现都是在 UI 层,如果核心玩法改变这个还是建议包体整体更新。每个 UI 逻辑都是使用 ulua 实现的,使用 ulua 的设计框架如下图所示:

  实现思路:客户端启动时,首先通过 Http 协议从服务器下载版本文件与本地的版本文件进行版本比较,把需要下载的资源加入到链表中。然后再通过 Http 协议去服务器请求资源下载,将资源从资源服务器下载存到手机本地供客户端加载使用。在 UI 加载时由于 ulua 自身的问题,程序直接加载 UI 资源比较缓慢,在这里我是用的预加载方式就是资源更新完成后,将 UI 资源大部分预加载到内存中并将其设置为不可见,在 UI 切换时直接设置为可见即可,明显提升了效率。还有一个问题是 ulua 的内存释放要及时,防止占用内存过多影响效率。

  包体被破解一直是困扰程序员的难题,由于现在破解技术的快速发展使得我们对产品的保护显的尤其重要。下面介绍一下防破解的技术:

  最常用的技术是对代码进行混淆,但是这个只是防治那些想破解代码的人,这样的防破解方式只防技术,现在很多上线的包被破解并不是采用这种方式实现的,盗版项目通常是将正版项目进行破解、篡改后重新打包生成的应用,也就是通常说的二次打包。如果移动端项目能够具备防反编译、防反破解能力,就可以有效的防止游戏项目被盗版。接下来介绍一下我的做法,架构如下图所示:

  实现思路:首先对客户端的代码进行混淆,避免代码的破解,再就是加了验证消息数据合法性,如果有玩家利用破解工具绕过付费,直接购买道具,这块交给服务器去处理,服务器会对你付费和不付费的数据做一个验证,如果数据合法会存入数据库,否则把数据丢弃掉,同时把账号封掉,加入数据库黑名单永不准登陆,目前这种方式可以满足需求。另外针对客户端的防破解,也给读者介绍一个比较靠谱的工具。

  在此推荐给大家的是 360 加固包,360 加固保专为开发者的应用提供免费安全加固服务,独创了多重防护方式,对应用程序深度加密处理;独有的程序文字信息加密功能,能有效防止应用被反编译和恶意篡改,保护应用不被二次打包,保护数据信息不会被黑客窃取。开发者无需任何开发成本,一键上传,即可在 5 分钟内完成应用加固,从而彻底防止应用在上线后被反编译、调试、破解、二次打包和内存截取等多种威胁。

  在使用 360 加固包时注意一个问题,就是在提交审核时,一旦加固包体,它里面的内容是无法被改变的,所以在使用时如果计费文件不是最新的,不要对其进行加固否则计费这块会出问题,因为经过加固的包是无法替换计费文件的,这也是笔者在使用 360 加固包时遇到的问题。

  使用 Unity 3D 引擎开发,虽然其上手容易,但是它的坑也很多,在此只是给读者列觉了几个重点问题,一些小问题并没有给读者介绍。作为程序员必须具备解决实际问题的能力,这就需要在实战中不断的磨砺自己,提升自己。

  Game234游戏门户网声明:Game234游戏门户网登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。部分图片及内容来自互联网,版权归原作者(原网站)所有,转载时请务必注明来源,若有侵权问题请及时与本站联系 。

  PayPal封禁校园题材FPS《Active Shooter》支付账户

  DNF:86版本神豪玩家氪金百亿得来的三件史诗装备,如今退居三线手游在哪里下载 最新下载地址安装教程

  王者荣耀:这个叫晚来疯的姜子牙线:行动进攻森林玩斟茶兵射爆对面!我永远喜欢李恩菲尔德

  这位家长竟用这招让孩子对游戏没了兴趣!4条脱网锦囊妙计,快收好

  黑客找到iOS11锁屏密码漏洞:连接数据线玩仙剑奇侠传”帧数偏低游戏效果不好的解法

  绝地求生搞笑时刻第306期——Shroud使用描边外挂!日本主播一个蹦蹦坐四个人!

  Dota2 OMG模式 梦里什么都有 vol. 102 【弧形闪电+余震+涤罪之焰+回音击】

  潜伏在学校的杀手,对面一个满编队伍死完了才发现我的位置。两分五十五秒开始是敌方的视角。

  《死神vs火影3.0》带土一个神奇的bug 我就想问谁打得过?(强力推荐!)

  为什么第一人称视角的VR连续镜头普遍不好? VR预告片中的虚拟电影制作方法

  怎么用Unity开发HTC Vive——操作GUIHTC Vive只需学会这 六步!

  AMD技术总监:如何用显卡帮助开发者打造更优质的VR内容 UOD 2017

  索尼中国之星多团队VR开发经验分享 Unreal Open Day 2017

  王者荣耀:水晶猎龙者花木兰前期逆风被揍,后期鸡血五杀!感受到花木兰的强势吧!

  2017 Facebook F8 大会总结:VR社交将如何发展? 干货分享

  “深入探讨Xbox One剧情类游戏创作”CD Projekt Red谈《巫师3》

  CD Projekt RED开启弗罗茨瓦夫的新工作室 工作室将会参与《赛博朋克2077》的制作

  阴阳师SSR式神——辉夜姬资讯专题报道 - Game234游戏门户网站

  火影忍者手游无差别格斗大赛资讯专题报道 - Game234游戏门户网站

  VR应用比非VR应用需要更强的计算,性能优化是一个很重要的任务。若目标平台是像GearVR这样的手机设备,优化就更重要了。以下是一些应该试着了解的性能指标:每只眼睛50次绘制调用。Unity5更精确地...[查看详情]

  PaulTice在3D扫描领域已经从业了20年的时间。这位专家预测3D扫描的发展终有一天会让3D建模成为历史。Tice是3D可视化及设计公司ToPa3D的执行总监。日前,小编发现他在LinkedI...[查看详情]

  产品设计实习生的总结。我越来越喜欢FB了,他们有社交,他们有VR,他们有JohnCarmack,他们有JulieZhuo,他们有坚实且越发具有影响力的产品设计与开发文化。下面进入译文。2016年夏...[查看详情]

  原标题:眼动跟踪vs手势识别谁更牛?VR需要的是“眼疾手快”眼部跟踪是未来?手势识别是伪应用?还是“手疾眼快”两个都得要?今天T...[查看详情]

  我们都认为Unity编辑工具是非常了不起的,是Uniy真正有用的部分。使用工具允许我们快速创建原型,构建原型也非常方便,增加物体更简单,还可以指定变量。极大的提升了我们的工作流程,随着Im...[查看详情]

  为什么第一人称视角的VR连续镜头普遍不好? VR预告片中的虚拟电影制作方法

  原标题:为什么第一人称视角的VR连续镜头普遍不好?VR预告片中的虚拟电影制作方法笔者在为《幻想装置》和《工作模拟》制作出混合现实的预告片以后,研究了更深层次的VR虚拟电影制作方法。他通过VR(虚拟...[查看详情]

  原标题:VR头显必备眼球追踪技术的5大原因VR开发心得在旧金山举办的2017年GDC游戏开发者大会上,来自瑞典的眼球追踪技术公司Tobii发表了一次演讲,向大家描绘了未来在虚拟现实头戴设备中嵌入眼球...[查看详情]

  原标题:如何让VR环境及体验更有趣逼真的UI小技巧VR开发心得VR设计师和开发者们开始着手如何让VR环境及体验更加有趣、逼真。以下是一些关于如何为room-scale(房间规模)VR交互式体验设计用...[查看详情]

  原标题:媒介、熟悉以及舒适度关于VR设计的三点思考不知不觉,2017已经过去2个多月了。随着天气一天天转暖,我们也收获了不少数据机构发布的各类报告,预测着今年VR市场的喜人潜力。在前不久,Supe...[查看详情]

  在使用Unity针对不同的平台开发虚拟现实应用程序时,我们会遇到一些问题。在此作者花费了一些时间将一款UnityGoogleCardboardApp移植到GearVR上,并将其中遇...[查看详情]

  原标题:《我希望你死》VR游戏开发者兼职当教授分享15年VR项目经验虚拟现实和增强现实可能看起来像是新的媒介,随着Rift、Vive和HoloLens等产品的上市,这两种技术仿佛是从天而降。但在过去...[查看详情]

  VR:怎样用VR讲好一个故事?视界君的成长过程里,一路听过很多故事:从小时候的睡前童话,舞台剧,到黑白彩色电视影像,手绘动画片,三维动画及合成特效,再到3D电影,都是在讲故事。而小时候的西游记(微博)...[查看详情]

  你是不是曾经很多次因为要重复性的做一件事而感觉无聊或者失望,或许经常回这样但是你不用再担心了!比尔盖茨曾说过:“我选择做一个高难度工作的懒汉。因为一个懒人会选择...[查看详情]

  原标题:VR故事剧本要怎么写?故事对人类来说十分重要。这是我们把日常生活的随机数据组合成记忆、分享人生和建立联系的方式。写作是我们把头脑中的原始信息转化为这些故事的第一步。无论科技发展到何处,故事仍将...[查看详情]

  剧本创作是每一个故事被视觉化描述的起源。每天都有无数的剧本诞生。编剧们无一不梦想着有一天自己能接过学院的小金人,或者看着自己的故事在百老汇舞台上长盛不衰。剧本创作作为一门艺术,已经形成自己的写作规范,...[查看详情]

  怎么用Unity开发HTC Vive——操作GUIHTC Vive只需学会这 六步!

  HTCVive是由HTC与Valve联合开发的一款VR头显(虚拟现实头戴式显示器)产品,想必大家都玩到很多VIVE上的VR游戏了,那么如何使用Unity来进行VIVE上的VR游戏开发呢?第一步...[查看详情]

  原标题:VR影视制作要如何击中观众的三要素此前视界君编译过英国VR工作室BreakingFourth的文章,讲述VR剧本创作的秘密和如何让观众产生沉浸感。而关于VR创作,曾经制作过VR短片《Ctr...[查看详情]

  原标题:VR交互动画短片《拾梦老人》的开发经历来自张言丰VR动画开发者的VR动画案例分享。今年笔者在PintaStudio,这是我在中科院的同学创立的一家VR电影工作室,我们希望用游戏引擎实时渲染的方...[查看详情]

  原标题:谷歌UI工程师分享如何设计优秀的VR应用VR不仅对于普通大众而言是个新兴的技术,对于从业者来说也是如此。随着VR普及率的不断增长,各位VR设计师也要不断地学习新的东西,包括如何制作出优秀且舒...[查看详情]

  原标题:为何VR游戏一定要第一人称视角?说起VR的优势,很多人首先想到的便是沉浸感和代入感,而对于VR游戏,我们需要充分发挥这些特性的优势,因此出现了五花八门的射击、射箭以及恐怖题材的游戏...[查看详情]

  7 03到现在刚刚更新一天,相信不少水友们已经在鱼塘里牛刀小试了,对于新版本的改动,大家怎么看呢?下面就和小编一起来看看zhou神是怎么理解的吧。

  在今天的比赛中,Rookie带病上场,带领iG成功翻盘,在第二局比赛中,他用劫拿下了10 1 8的完美数据。这是他本赛季第7次击杀上双(超过10),这一数据遥遥领先LPL其他选手。排名第二的是Condi、GimGoon、Scout,各有两次击杀上双。

来顶一下
近回首页
返回首页
推荐资讯
相关文章
    无相关信息
栏目更新
栏目热门