去年11月,上海火溶网络CEO王伟峰以其第一款3d手游产品《啪啪三国》为例,着重讲解了unity3D手机网游开发的经验,其中涉及了团队组成、人员要求、常见的unity3d开发遇到的坑及解决办法。在演讲中,王伟峰也贡献了《啪啪三国》开发过程中总结的各种经验,从优化、插件库、服务器架构、SDK等很多细节进行了讲解。值得一说的是,王伟峰现场演讲十分幽默,冷笑话段子不断爆出,让在场观众在连续的笑声中听完这个特别的技术演讲。
<ignore_js_op> 
以下是王伟峰现场演讲实录:
王伟峰:非常感动,大家等这么久的时间,就是来听我讲Unity3D的是吧?开个玩笑。
<ignore_js_op> 
先说点小感慨,我很意外、也很荣幸洪涛(gamelook总编)请我来给大家作技术方面的讲解。提到手游,我自己从事技术这多年,作为藏在符号背后的人是有很多话要讲的,就结合我们产品开发的过程来谈一下我的感受。
我们这个产品可能大家还不太熟悉,就看一下我们的视频吧。
<ignore_js_op>
简单介绍一下我的游戏经历,之前做过端游,现在跟两个老家伙一起在做《啪啪三国》。介绍一下我们团队的构成,我们目前为止一共有18个人,其中策划6个,美术3个,程序8个,测试1个。我今天讲技术,可能这些职位是我重点介绍的,一个是引擎程序、服务器程序、和工具程序。我主要以程序为主来讲解。
服务器程序员
<ignore_js_op> 
它的知识技能和职责,我就不仔细说了,说细了有一点像招聘启示。他的主要职责虽然负责技术,但是也给产品决策和方向提供一些决策。他最主要的考核指标,就是经验很重要,最好主导或参与过一款网络游戏的开发。举个例子比如说两个程序员,一个是刚毕业于西太平洋大学,主攻方向是复杂电子稳定器。另外一个人可能在煤老板手下开发过一款游戏,虽然容量不大但游戏可以承担3000人,我肯定是选跟煤老板干过的人,这是我对服务器程序员的认识。
引擎程序员
<ignore_js_op> 
说到Unity3D我这里有一个引擎程序员的说法,他要懂3D引擎。你怎么判断这个引擎程序员合格不合格呢?你问他看什么书?他如果说我在看《21天学会Unity3D》这是无法做引擎程序员的。这是一个引擎程序员的书架,看过哪些书呢?《游戏编程精粹》,《GPU精粹》系列,《ShaderX》系列等,哪怕你出去找工作,你跟老板谈我读过这个,也至少看上去象个样,即使没看过,至少眼界得开阔,Unity3D之所以用不好,因为有这么多书要看。如果说你经常上Unity3D学院的网站,这个是不管用的。所以说只看《21天学会Unity3D》是学不会Unity3D的。
<ignore_js_op> 
引擎程序员我讲讲核心的要点,他首先是要了解3D引擎工作的原理,优化起来有的放矢,出了问题才知道如何救火。如果你开始没有把握好项目的标准的话,一不小心就跳进大坑。这一块做不好的话最要命的是我,比如人物做了50套,如果一旦不行,你们推倒重来,那你这个美术资源就打水漂了。真正找到靠谱的Unity3D的人,那就是“妈妈再也不用担心我用Unity3D做手游了。”
一句话证明你用过Unity3D
普通群众的评价是:Unity3D坑真多。专家会说?创业团队用Unity3D做手游必死。
讲到这儿我想大部分的人就是想听听Unity3D有什么坑。
<ignore_js_op> 
Unity3D的坑我觉得最严重的坑就是没有懂3D的程序员,把Unity当成Office用。
Unity发展这么多年,已经是很强的引擎了。我就摘出来说一说我们遇到的坑,有点不是特别好用,就是第5条,它有一个多人协作的Asset Server偶尔会有时候不靠谱,我们现在改用SVN来做版本管理。然后有一个坑,就是很多团队很少进行真机测试,屌丝开发商可能连iphone都没有,一旦测试发现游戏根本跑不动。还有就是第10条,在IOS下无法更新C#代码,更新就下100M这不是Unity的错,是IOS的错。我们做《啪啪三国》的时候也是不知道IOS的限制,负责当初应该规划一下做成脚本更新。最后简单说一句,因为现在Windows phone也很热了,要做WP的有要尽早测试。经鉴定Unity是群众喜闻乐见、发家致富的好引擎。
然后是经验分享,“绝密”,我们是怎么做《啪啪三国》的。说之前,我表达一下我对我们两个创业合伙人的感谢,这些都是绝密,一般人是不轻易说的。现在Unity大家用起来是有一定的门槛,但是也许三个月也许半年后,大家熟悉这些工具以后,们团队的价值就体现出来了。我们程序员就是做好后勤。
<ignore_js_op> 
先说一下我们程序的工作环境,首先是小黑屋,程序员工作环境不能太敞亮了。我们在硬件设施上是不计成本的,比如说右边这个高端大气上档次的巨屏双显,i5CPU+Win7 64,8G内存,SSD固态硬盘。为什么要用这么好?很多程序员招聘的时候都会问,你们公司是不是双显啊?从我们关心生产力的角度来讲,这套“神机”可以大大提高Unity3D的开发效率。Unity3D在整个程序员开发的过程当中,它其实很多的工作是需要很多读盘操作的,你有这么一套神机的配置,程序员的工作效率我估计应该会有5—6倍的提高,这个是实话实说。如果你们还像我们一样高端大气的话,你还应该配一个Macbook Pro的匹配。
效率优化
然后讲我们效率优化的一般方法。当然我们讲这些方法其实建立在一个方法上,就是你熟读我前面的50本书你就融会贯通了,我说什么你就一目了然了。
第一个排除法,怀疑哪里就屏掉哪里。这是最基础的一个方法,也是最有效的。
第二个就是用数据说话,善用Unity4强大的Profiler工具,我现在感觉有点水平的程序员,依靠Unity4强大的Profiler工具,没有理由做不出一个跑不起来的游戏,因为这里面设计的性能分析和统计是相当详细和相当有作用的,它可以统计你CPU的占用率,又可以统计你每个模块、每个函数,每个执行的时间。还有一个就是说CPU的效益,然后我们知道还有显卡,还有GPU,GPU就是它有一个很直观的图,你渲染了多少三角面。内行人一看就知道了。
最后再强调一点就是真机制测试,经常发布到手机上跑跑,如果是屌丝团队,你没有IPhone手机的话还是赶紧买吧。
优化1:
说说我们的方法,draw call太高怎么解决。
<ignore_js_op> 
3D渲染东西,一个人和一百个人是不一样的。你一百个人就要渲染一百次,怎么讲呢?想让效率提高的话,最优先的办法就是看draw call高不高,高的话就降低一下。最快的渲染,就是不渲染。这块就涉及到我们在这个屋子里,屋子外面是看不见的,但是计算机是可以看到的,你就不要渲染出来,或者是我背后有谁,如果有两个人我就把它删掉。还有土办法就是手动配置可见范围列表。
然后第二个就是物体太多,可以考虑将多个物体合成一个,这个可以由美术来做,也可以由程序来做。我原来是一片树林,起码有20多棵树,我们让美术合并一下,把这20多个树合并成一个物体,看起来是一个树林,另外一个就是让程序来做的,你看我们战场西面,因为我们有攻兵,一个队伍有30多人一人射一支箭这就就要300多个,就让程序把所有的动态合并成三个。包括影子,就是动态合并所有的影子。
优化2
<ignore_js_op> 
理解所使用Material的实现原理,不滥用Material。前面有人讲过,Unity跟玩游戏一样的,你发现后面跑不动了,就要有一个明白人给你做一个规划,你有没有这样的效果,如果有的话你要怎么实现。我们用什么样的Shader,是不是还有高低配。给大家看一下,左边这个小菜单是我们自己写的部分材质的效果,上面也是包括人物和效果。
第三个优化方面,就是模型面数太多。
<ignore_js_op>

这个从显卡上看是一个人,但是它其实是由三角形组成的。比如说你的人物三角面形特别多?那怎么办?就减。渲染很多兵的时候我们就用右边的这个没腿的,其实做游戏,游戏视觉就是蒙人。

工具化
<ignore_js_op> 
一键搞定所有平台的安装包。因为大家知道你现在渠道接这么多,你出个版本一个键,比如说你有十个渠道,你没有我们那个神机的话,那打包一个渠道就得半小时。这是我们安卓渠道的出包工具,排名不分先后(全场哄笑)。
因为我做了这么多年的技术,我对工具这个东西非常看重的,包括程序员要有利用工具解放自己的手。
服务器的结构
<ignore_js_op>

这是一个典型的端游结构,前面一个是连接服务器,它的作用就是说我们游戏是一个长连接的游戏,一台物理机承载服务器承载是有限的,我们是要有很多台,然后后面就是路由服务器,还连接了两台和多台的服务器。后面这个红色的是游戏服务器,再后面就是数据库服务器,提供一个高速的缓冲。选择这种服务器结构原因是易于拓展

放外挂
<ignore_js_op> 
第三个就是我们游戏的小秘密,我们这个战场的整个战斗的核心是C++写的。这样的一好处就是一次编写多次运行,更进一步地好处我后面会讲,缺点就是开发速度慢,调试困难。
这是防外挂,防外挂有几个原则,就是只信任服务器,所有玩家数据都存在服务器。战斗结果由服务器进行验证。因为我的战斗模块是C++写的。
数据分析
然后就是数据分析这块,现在都讲究大数据这一块,其实三、四年前我们就做这样的东西。游戏里面玩家所有的行为,在服务器上都有日志产生,每天程序收集这个海量的数据,然后放在数据库进行分析。
疯狂的SDK
<ignore_js_op> 
接下来就是疯狂的SDK了,我们现在的情况是IOS10来个,安卓40+,确实挺多,但是这没有什么不好。
但是有两个原则要注意,一个是与游戏代码的关联性小,第二个要方便调试和测试。这样的话,我们接SDK的时候,就用工具,用SDK的程序员就可以了解。同时开发商也可以把SDK交给别人去接,不会产生泄露游戏代码的一个尴尬和担心。事实证明我们安卓渠道的代理商非常给力,我们所有安卓渠道的SDK都是他们帮我们接的。
我想办法就是两个办法,一个是客户端的,从第一个标准接口,然后服务器这块我们引入了一个SDK转接的服务器,我们游戏的接口相当于通过一个桥梁进行对接。我用一个稳定的服务器就够了。能够给工程师测试和调试。这个也能提高工作的效率,他不用整天去熟悉你游戏的关卡。
插件库
<ignore_js_op> 
接下来就是一个插件/库,这是我们用到的第三方的东西,一个是NGUI,这是Unity做UI比较靠谱的,也是没得选择的选择。
第二个和第三个就是Protobuf,这是我们用于客户端和服务器之间传递消息包的一个库,这个库不错比较稳定,的是一个国外吃饱了撑的程序员做的,它支持很多的平台,像安卓、IOS等都有。
接下来是UnityVs,这个东西是Unity代码调试的插件,这个用起来不错,可以远离Unity本身提供的MONO工具。
最后一个是Prime Storekit,这个是搞定正版苹果的支付。你买了之后你这个苹果有多少坑就一一而过了。
我这块的建议就是慎用第三方代码库,可能会给跨平台发布带来麻烦。
主角制造
<ignore_js_op> 
再接下来就是我们主角光照,三点式光照方法,我们把它引用到游戏里面,左边的这个角色就是光照模型下来的效果,右边是普通的,大家看一下可以看出区别,左边的更立体。然后是主角的制造,我们这个主角也是花了大价钱,虽然是屌丝公司,但是我们省吃俭用不发工资,我们请了龙将的概念美术给我们做了一个设定,可以看到从原画到3D模型,还原度很高。
<ignore_js_op> 
然后讲一下我们场景的做法,因为场景是一个基础的效果,做出来干巴巴的,想增加一点模式的话就Unity提供的光照效果。后面就是我们一些场景的欣赏,这是我们的一个小村子,汉献帝最早流浪的地方,这是我们主城荆州城。
<ignore_js_op> 
最后就是我们的卡片,我们的卡片也都是请高手花的,光这个成本都超过一千多。
最后我就用这张图片来作一个结束,这是我们去年5月我们三个创始人在一个民房里面,三个人三台电脑,三个创始人在做《啪啪三国》的情景。
<ignore_js_op> 
面对这张照片,我每次看都挺有感慨,什么力量支持三个屌丝,在去年5、6月份的时候,页游还如日中天,那时候还没有人讲手游。包括你跟投资人谈手游,投资人根本不理你。但是那个时候三个人为什么胆子这么大,就敢立项这么一款产品,包括游戏的玩法,包括整个的方式,当时定了就没有改过。是什么支持我们下这样的决定,坚持一年零六个月做下来。我总结就是因为我们一直做游戏,我们是游戏人。源于我们对游戏的热爱和对游戏的敬畏之心,谢谢大家!

unity3d开发实战《啪啪三国》技术详解!的更多相关文章

  1. ios开发——实战OC篇&FMDB详解

    FMDB详解 前一篇文章中我们介绍的SQLite的使用,在iOS中原生的SQLite API在使用上相当不友好. 于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.Plausibl ...

  2. 《Hadoop应用开发技术详解》

    <Hadoop应用开发技术详解> 基本信息 作者: 刘刚 丛书名: 大数据技术丛书 出版社:机械工业出版社 ISBN:9787111452447 上架时间:2014-1-10 出版日期:2 ...

  3. p2p网贷项目开发全过程技术详解,应用框架是ci2.2

    p2p网贷项目开发全过程技术详解,应用框架是ci2.2 很标准的mvc开发代码,代码也很简单,方便二次开发 这篇文章会不断更新

  4. Python开发技术详解(视频+源码+文档)

    Python, 是一种面向对象.直译式计算机程序设计语言.Python语法简捷而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结 ...

  5. Python开发技术详解PDF

    Python开发技术详解(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1F5J9mFfHKgwhkC5KuPd0Pw 提取码:xxy3 复制这段内容后打开百度网盘手 ...

  6. Windows驱动——读书笔记《Windows驱动开发技术详解》

    =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的“联系邮 ...

  7. hadoop应用开发技术详解

    <大 数据技术丛书:Hadoop应用开发技术详解>共12章.第1-2章详细地介绍了Hadoop的生态系统.关键技术以及安装和配置:第3章是 MapReduce的使用入门,让读者了解整个开发 ...

  8. 《Tomcat与Java Web开发技术详解》思维导图

    越想构建上层建筑,就越觉得底层基础很重要.补课系列. 书是良心书,就是太基础了,正适合补课. [纯文字版] Tomcat与Java Web开发技术详解 Servlet Servlet的生命周期 初始化 ...

  9. 《python开发技术详解》|百度网盘免费下载|Python开发入门篇

    <python开发技术详解>|百度网盘免费下载|Python开发入门篇 提取码:2sby  内容简介 Python是目前最流行的动态脚本语言之一.本书共27章,由浅入深.全面系统地介绍了利 ...

  10. SSE技术详解:一种全新的HTML5服务器推送事件技术

    前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Ser ...

随机推荐

  1. React Native自适应设备宽度解决方案

    px:设备实际像素单位 dp/pt:逻辑像素单位(IOS的尺寸单位为pt,Android的尺寸单位为dp) 在设计和开发过程中,应该尽量使用逻辑像素尺寸来思考界面. UI 给默认 640 的图,采用 ...

  2. ADS1.2使用

    ADS编译错误Error : A1163E: Unknown opcode ARM汇编指令不支持顶格写,否则不能识别,指令前加上空格即可. 使用for(;;;)//死循环,编译报错如下,说是该语句有错 ...

  3. windows 下键盘映射

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout下添加二进制键 Scancode Map完后注销后即可生效

  4. 6款实用的硬盘、SSD固态硬盘、U盘、储存卡磁盘性能测试工具

    一.检测工具名称汇总 HDTune ATTO Disk Benchmark CrystalDiskMark AS SSD Benchmark Parkdale CrystalDiskInfo 二.各项 ...

  5. 使用graphql-code-generator 生成graphql 代码

    类似的工具比较多,比如prisma .qloo.golang 的gqlgen.apollo-codegen graphql-code-generator 也是一个不错的工具(灵活.模版自定义...) ...

  6. CSS为英文和中文字体分别设置不同的字体

    font-family的调用方法: div { font-family:Arial,'Times New Roman','Microsoft YaHei',SimHei; font:bold 12px ...

  7. vs2013突然没有代码提示功能了。

    工具->选项->文本编辑器->C++ ->高级->禁用IntelliSense设置 false 然后选确定.

  8. 【转】为什么要用GIT而不是SVN

    原文网址:http://www.cnblogs.com/perseus/archive/2012/11/22/2782051.html 使用了近一年的git之后,再使用svn,发现自己svn这种版本管 ...

  9. GREENPLUM简介

    什么是GREENPLUM? 对于很多IT人来说GREENPLUM是个陌生的名字.简单的说它就是一个与ORACLE, DB2一样面向对象的关系型数据库.我们通过标准的SQL可以对GP中的数据进行访问存取 ...

  10. win2008以上的系统,在vmware esxi5.5里怎么使用自定义规范管理器?sysprep

    经过测试,原来08以上的系统自带了sysprep.exe,所以vcenter对08以上的系统直接使用自定义规范管理器即可,跟linux一样了.注意不要跟03一样写入了sn即可. vCenter可使用s ...