它的知识技能和职责,我就不仔细说了,说细了有一点像招聘启示。他的主要职责虽然负责技术,但是也给产品决策和方向提供一些决策。他最主要的考核指标,就是经验很重要,最好主导或参与过一款网络游戏的开发。举个例子比如说两个程序员,一个是刚毕业于西太平洋大学,主攻方向是复杂电子稳定器。另外一个人可能在煤老板手下开发过一款游戏,虽然容量不大但游戏可以承担3000人,我肯定是选跟煤老板干过的人,这是我对服务器程序员的认识。

引擎程序员

说到Unity3D我这里有一个引擎程序员的说法,他要懂3D引擎。你怎么判断这个引擎程序员合格不合格呢?你问他看什么书?他如果说我在看《21天学会Unity3D》这是无法做引擎程序员的。这是一个引擎程序员的书架,看过哪些书呢?《游戏编程精粹》,《GPU精粹》系列,《ShaderX》系列等,哪怕你出去找工作,你跟老板谈我读过这个,也至少看上去象个样,即使没看过,至少眼界得开阔,Unity3D之所以用不好,因为有这么多书要看。如果说你经常上Unity3D学院的网站,这个是不管用的。所以说只看《21天学会Unity3D》是学不会Unity3D的。

引擎程序员我讲讲核心的要点,他首先是要了解3D引擎工作的原理,优化起来有的放矢,出了问题才知道如何救火。如果你开始没有把握好项目的标准的话,一不小心就跳进大坑。这一块做不好的话最要命的是我,比如人物做了50套,如果一旦不行,你们推倒重来,那你这个美术资源就打水漂了。真正找到靠谱的Unity3D的人,那就是“妈妈再也不用担心我用Unity3D做手游了。”

一句话证明你用过Unity3D

普通群众的评价是:Unity3D坑真多。专家会说?创业团队用Unity3D做手游必死。

讲到这儿我想大部分的人就是想听听Unity3D有什么坑。

Unity3D的坑我觉得最严重的坑就是没有懂3D的程序员,把Unity当成Office用。

先说一下我们程序的工作环境,首先是小黑屋,程序员工作环境不能太敞亮了。我们在硬件设施上是不计成本的,比如说右边这个高端大气上档次的巨屏双显,i5CPU+Win7 64,8G内存,SSD固态硬盘。为什么要用这么好?很多程序员招聘的时候都会问,你们公司是不是双显啊?从我们关心生产力的角度来讲,这套“神机”可以大大提高Unity3D的开发效率。Unity3D在整个程序员开发的过程当中,它其实很多的工作是需要很多读盘操作的,你有这么一套神机的配置,程序员的工作效率我估计应该会有5—6倍的提高,这个是实话实说。如果你们还像我们一样高端大气的话,你还应该配一个Macbook Pro的匹配。

效率优化

然后讲我们效率优化的一般方法。当然我们讲这些方法其实建立在一个方法上,就是你熟读我前面的50本书你就融会贯通了,我说什么你就一目了然了。

第一个排除法,怀疑哪里就屏掉哪里。这是最基础的一个方法,也是最有效的。

第二个就是用数据说话,善用Unity强大的Profiler工具,我现在感觉有点水平的程序员,依靠Unity强大的Profiler工具,没有理由做不出一个跑不起来的游戏,因为这里面设计的性能分析和统计是相当详细和相当有作用的,它可以统计你CPU的占用率,又可以统计你每个模块、每个函数,每个执行的时间。还有一个就是说CPU的效益,然后我们知道还有显卡,还有GPU,GPU就是它有一个很直观的图,你渲染了多少三角面。内行人一看就知道了。

最后再强调一点就是真机制测试,经常发布到手机上跑跑,如果是屌丝团队,你没有IPhone手机的话还是赶紧买吧。
优化1:

说说我们的方法,draw call太高怎么解决。

3D渲染东西,一个人和一百个人是不一样的。你一百个人就要渲染一百次,怎么讲呢?想让效率提高的话,最优先的办法就是看draw call高不高,高的话就降低一下。最快的渲染,就是不渲染。这块就涉及到我们在这个屋子里,屋子外面是看不见的,但是计算机是可以看到的,你就不要渲染出来,或者是我背后有谁,如果有两个人我就把它删掉。还有土办法就是手动配置可见范围列表。

然后第二个就是物体太多,可以考虑将多个物体合成一个,这个可以由美术来做,也可以由程序来做。我原来是一片树林,起码有20多棵树,我们让美术合并一下,把这20多个树合并成一个物体,看起来是一个树林,另外一个就是让程序来做的,你看我们战场西面,因为我们有攻兵,一个队伍有30多人一人射一支箭这就就要300多个,就让程序把所有的动态合并成三个。包括影子,就是动态合并所有的影子。

优化2

理解所使用Material的实现原理,不滥用Material。前面有人讲过,Unity跟玩游戏一样的,你发现后面跑不动了,就要有一个明白人给你做一个规划,你有没有这样的效果,如果有的话你要怎么实现。我们用什么样的Shader,是不是还有高低配。给大家看一下,左边这个小菜单是我们自己写的部分材质的效果,上面也是包括人物和效果。

第三个优化方面,就是模型面数太多。


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

工具化

一键搞定所有平台的安装包。因为大家知道你现在渠道接这么多,你出个版本一个键,比如说你有十个渠道,你没有我们那个神机的话,那打包一个渠道就得半小时。这是我们安卓渠道的出包工具,排名不分先后(全场哄笑)。

因为我做了这么多年的技术,我对工具这个东西非常看重的,包括程序员要有利用工具解放自己的手。

服务器的结构

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

放外挂

第三个就是我们游戏的小秘密,我们这个战场的整个战斗的核心是C++写的。这样的一好处就是一次编写多次运行,更进一步地好处我后面会讲,缺点就是开发速度慢,调试困难。

这是防外挂,防外挂有几个原则,就是只信任服务器,所有玩家数据都存在服务器。战斗结果由服务器进行验证。因为我的战斗模块是C++写的。

数据分析

然后就是数据分析这块,现在都讲究大数据这一块,其实三、四年前我们就做这样的东西。游戏里面玩家所有的行为,在服务器上都有日志产生,每天程序收集这个海量的数据,然后放在数据库进行分析。

疯狂的SDK

接下来就是疯狂的SDK了,我们现在的情况是IOS10来个,安卓40+,确实挺多,但是这没有什么不好。

但是有两个原则要注意,一个是与游戏代码的关联性小,第二个要方便调试和测试。这样的话,我们接SDK的时候,就用工具,用SDK的程序员就可以了解。同时开发商也可以把SDK交给别人去接,不会产生泄露游戏代码的一个尴尬和担心。事实证明我们安卓渠道的代理商非常给力,我们所有安卓渠道的SDK都是他们帮我们接的。

我想办法就是两个办法,一个是客户端的,从第一个标准接口,然后服务器这块我们引入了一个SDK转接的服务器,我们游戏的接口相当于通过一个桥梁进行对接。我用一个稳定的服务器就够了。能够给工程师测试和调试。这个也能提高工作的效率,他不用整天去熟悉你游戏的关卡。

插件库

接下来就是一个插件/库,这是我们用到的第三方的东西,一个是NGUI,这是Unity做UI比较靠谱的,也是没得选择的选择。

第二个和第三个就是Protobuf,这是我们用于客户端和服务器之间传递消息包的一个库,这个库不错比较稳定,的是一个国外吃饱了撑的程序员做的,它支持很多的平台,像安卓、IOS等都有。

接下来是UnityVs,这个东西是Unity代码调试的插件,这个用起来不错,可以远离Unity本身提供的MONO工具。

最后一个是Prime Storekit,这个是搞定正版苹果的支付。你买了之后你这个苹果有多少坑就一一而过了。

我这块的建议就是慎用第三方代码库,可能会给跨平台发布带来麻烦。

主角制造

再接下来就是我们主角光照,三点式光照方法,我们把它引用到游戏里面,左边的这个角色就是光照模型下来的效果,右边是普通的,大家看一下可以看出区别,左边的更立体。然后是主角的制造,我们这个主角也是花了大价钱,虽然是屌丝公司,但是我们省吃俭用不发工资,我们请了龙将的概念美术给我们做了一个设定,可以看到从原画到3D模型,还原度很高。想增加一点模式的话就Unity提供的光照效果。

关于Unity3D手机网游开发一些小看法的更多相关文章

  1. (转)火溶CEO王伟峰:Unity3D手机网游开发

    今天看到这篇文章,感觉很不错,尤其是那句“Unity3D的坑我觉得最严重的坑就是没有懂3D的程序员,把Unity当成Office用”. 转自http://blog.csdn.net/wwwang891 ...

  2. 手机网游开发指南 - 需要多NB的技术

    Agent`K 似乎在三天打鱼N天晒网.只能呵呵了,懒散的家伙. 移动互联网越来越火,其中的网络游戏更是火,熊熊大火. 作为攻城师的你,作为小投资者的你,作为满脑子创意想要实现的你,肯定在四处打听:手 ...

  3. Unity网游开发生存指南—蒸汽之城

    Posted by amy on 2013.03.07 文 / 王楠(梦加网络 游戏制作人) 前段时间关于Unity是否适合国内手游/网游创业团队的讨论非常火爆,本文从<蒸汽之城>的开发历 ...

  4. 【C/S通信交互之Http篇】Cocos2dx(Client)使用Curl与Jetty(Server)实现手机网游Http通信框架(内含解决curl.h头文件找不到问题)

    之前已经分享过一篇基于Cocos2dx与服务器使用Socket进行通信的框架,还不太熟悉的请移步到如下博文中: [C/S通信交互之Socket篇]Cocos2dx(Client)使用BSD Socke ...

  5. Unity3D手机斗地主游戏开发实战(01)_发牌功能实现

    园子荒废多年,闲来无事,用Unity3D来尝试做一个简单的小游戏,一方面是对最近研究的Unity3D有点总结,一方面跟广大的园友相互学习和提高.话不多说,进入正题~ 一.创建项目 1.创建Unity2 ...

  6. Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现(不定期更新中~~~)

    目录 Unity3D手机斗地主游戏开发实战(01)_发牌功能实现 Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现 一.大体思路 前面我们实现了点击开始游戏按钮,系统依次给玩家发牌的逻辑和 ...

  7. Unity3D手机斗地主游戏开发实战(03)_地主牌显示和出牌逻辑(不定期更新中~~~)

    Hi,之前有同学说要我把源码发出来,那我就把半成品源码的链接放在每篇文件的最后,有兴趣的话可以查阅参考,有问题可以跟我私信,也可以关注我的个人公众号,互相交流嘛.当然,代码也是在不断的持续改进中~ 上 ...

  8. Unity3D手机斗地主游戏开发实战(04)_出牌判断大小(已完结)

    之前我们实现了叫地主.玩家和电脑自动出牌主要功能,但是还有个问题,出牌的时候,没有有效性检查和比较牌力大小.比如说,出牌3,4,5,目前是可以出牌的,然后下家可以出任何牌如3,6,9. 问题1:出牌检 ...

  9. Unity3D手机斗地主游戏开发实战(04)_出牌判断大小

    之前我们实现了叫地主.玩家和电脑自动出牌主要功能,但是还有个问题,出牌的时候,没有有效性检查和比较牌力大小.比如说,出牌3,4,5,目前是可以出牌的,然后下家可以出任何牌如3,6,9. 问题1:出牌检 ...

随机推荐

  1. java序列化

    什么是java序列化,如何实现java序列化? 我们有时候将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象,例如,要将java对象存储到硬盘或者传送给网络上的其他计算机 ...

  2. Ionic常用命令行解释

    原文链接 安装ionic npm install -g ionic 更新www/lib/ionic 目录的文件,如有项目中有bower,此命令会运行bower update ionic, 否则则会从C ...

  3. hive的数据导出方式

    hive有三种导出数据的方式 >导出数据到本地 >导出数据到hdfs >导出数据到另一个表   导出数据到本地文件系统 insert overwrite local director ...

  4. hashmap实现原理浅析

    看了下JAVA里面有HashMap.Hashtable.HashSet三种hash集合的实现源码,这里总结下,理解错误的地方还望指正 HashMap和Hashtable的区别 HashSet和Hash ...

  5. python计算文件的md5值

    前言 最近要开发一个基于python的合并文件夹/目录的程序,本来的想法是基于修改时间的比较,即判断文件有没有改变,比较两个文件的修改时间即可.这个想法在windows的pc端下测试没有问题. 但是当 ...

  6. 在WebApi中 集成 Swagger

    1. Swagger(俗称:丝袜哥)是什么东西? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同 ...

  7. Android 笔记 day4

    单元测试

  8. 通过VS创建简单的WCF服务

    http://www.cnblogs.com/artech/archive/2007/09/15/893838.html http://www.topwcftutorials.net/2013/09/ ...

  9. T-SQL 基础学习 03

    局部变量 在T-SQL中,局部变量的名称必须以标记@作为前缀 语法 DECLARE @变量名数据类型 局部变量的赋值 方法一 SET @变量名 = 值 方法二 SELECT @变量名 = 值 SET和 ...

  10. [转]如何解决外边距margin叠加的问题探讨

    两个或多个毗邻的普通流中的块元素垂直方向上的 margin 会折叠,那么如何使元素上下margin不折叠呢?下面的方法或许对大家有所帮助 一.首先你要知道什么情况下会触发:两个或多个毗邻的普通流中的块 ...