zoukankan      html  css  js  c++  java
  • 关于Unity3D手机网游开发一些小看法

      

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

    by 翟然 Mike 一个集帅气与智慧于一身的男子
  • 相关阅读:
    HDU 3401 Trade
    POJ 1151 Atlantis
    HDU 3415 Max Sum of MaxKsubsequence
    HDU 4234 Moving Points
    HDU 4258 Covered Walkway
    HDU 4391 Paint The Wall
    HDU 1199 Color the Ball
    HDU 4374 One hundred layer
    HDU 3507 Print Article
    GCC特性之__init修饰解析 kasalyn的专栏 博客频道 CSDN.NET
  • 原文地址:https://www.cnblogs.com/zhairan/p/6251350.html
Copyright © 2011-2022 走看看