目录 1. 选择Unity3d的原因和大多数团队一样,我们看中了U3D几个优点:跨平台、快速出游戏原型、可扩展性较强、美术资源格式兼容性强、方便游戏设计者更好扩展游戏表现、国内用的人多方便技术交流、有比较成型的第三方解决方案;由于我们团队构成比较特殊,起初客户端程序就三个人,一个资深的主程序带着两个刚毕业的实习生,开发者对其他引擎熟悉程度不够,就没敢说得自己写一套或者用cocos-2d,又因为以前我们对Unreal3引擎使用过两年的时间,所以就选择了U3D。 2. Unity3D弊端我们对U3D的了解其实还不够透彻,在这里只能分享下我们开发过程中对U3D一些不爽的地方吐吐槽了 u 版本控制 u3d的版本控制有两种方式:一个是 SVN 或者P4或者Git +U3D的 MetaFiles 文件管理方式;另一个就是用官方的Asset Server管理;我们用的是前者,SVN+Meta文件。这样每次都必须同时操作两个文件才能保证主版本的稳定性,美术资源和程序驱动代码程序逻辑代码融合在一个工程里管理,(这点客户端主程已经有了解决方案,美术资源和程序逻辑代码分开管理),导致客户端资源不好分配权限,版本安全性就大大降低。 u 测试方法U3D能快速出游戏原型,通过按键点击播放就能预览游戏效果,但是在游戏测试上面做的还不够好,真机调试只能打包出apk或者ipa版本出来才能在手机上验证测试某项功能,我们也曾尝试用 unityRemote真机器调试,但是发现可行性太差,运行帧数太低,内存控制、功能测试还是得打包后安装到手机测试。 u 网络模块略 3. 开发误区和需避免的地方1: 内存管理机制不适合手机,需要自己去控制内存的回收,尽量在运行时加载物体,不要一上来就全部加载 2:自带的GUI很垃圾,只能用第三方插件 比如NGUI 3:自带的网络模块不适合MMORPG,只能自己写网络模块,采用C# 的socket 4:不支持脚本运行时编译比如python, 只能自己封装一些第三方脚本,后面有时间研究下 5:官方文档太过简单,除了简单的API介绍,没什么用,建议买版权 6:模型面数人物不超过1500面,场景模型不超过3W面比较合适 7:每张纹理贴图大小不要超过512*512 8:尽量不用动态光和雾,会导致低端手机很卡 9:shader尽量不要用高光,反射,镜面之类的,会导致手机卡爆,采用普通的shader ,比如mobile diffuse,Transparent之类的 10:代码规范一定要严格控制,不能随便写,工程开始前应该制定一套编码命名方案 11:工程管理一定要规范,资源,代码,同类型的要放在统一文件夹下 12:美术命名必须要有规范,每个部件的命名都要有他的实际意义,需要跟程序来商议协定 13:提交东西之前一定要经过审核,避免因为提交导致的其他问题 4. 美术资源管理和维护资源制作l 模型面数控制 单个模型三角面数控制在1500到4000渲染效率最优;模型尽量拆开来做摄像机裁剪就更为精准; l 模型和材质关系需要注意 模型尽量复用同一个材质球; 多张贴图尽量合并到一张纹理上最大控制在1024*1024; 带有透明通道的和不带透明通道的贴图要分开处理; 默认导入模型事u3d会自己生成材质球和贴图,命名一定要在3dmax里面规范好; 导入的模型按照类型和场景并排存放,材质和贴图在同一个文件夹下面,之后创建一个对应模型的预设; l Shader选择 一般都选择diffuse、mobile/diffuse、有透明通道的就transparent/cutout/vertxtlit;当然也可以适时选择其他的,因为我们对着色器这块也没有深入研究,只是知道用没人会写或者修改它 l 3Dmax和U3D的单位换算 一般情况下所有的模型都是导入FBX,而不用3DS,至于为啥,我也不清楚,反正官方都是用的FBX;单位就是一个是缩放比例一个就是坐标轴朝向,U3D的坐标系是Y轴向上,3ds是Z轴向上(世界坐标),所以导出的时候就是把模型的Y轴向上和U3D匹配上。 l 手机地形制作 地形制作肯定是不能用U3D的Terrain系统,那个比较浪费;我们的地形用的是一个ut4m的一个插件,直接在max里拉出一个模型,导入几张地形图直接在引擎里绘制就可以。 l 摄像机相关 n 建筑物的遮挡剔除!这个数值不能设置太大、太密。 管理方式 游戏的美术资源无非就分为:动画、模型、材质、贴图、预设、这几块; 工程目录管理上,我们把资源按文件夹分类:场景、怪物、NPC、UI、特效、动画六个文件夹,每个文件夹下面都有四个文件夹:模型、材质、贴图、预设;场景模型单导入到引擎里,在引擎里面在后期处理,这样增强了文件的可重复使用性,提高了场景摄像机遮挡剔除效率使得裁剪更精细;贴图尺寸控制在512以内,模型材质球都是一一对应,不应存在一个模型对应多个材质球的情况;怪物和NPC的动画由于需要添加动画事件,所以就单独复制出来一份动画存放; 5. 动态字体4.0以前用纹理贴图来制作字体、4.0以后采用动态字体。现在4.0动态字体还有些BUG,所以只能改字体的压缩类型为unicode格式,还是载入一张大纹理。字体问题曾经困扰了我两三个月的时间,现在终于有了解决方案,我和我的小伙伴都惊呆了。感觉通畅了好多。有木有! 6. UI界面制作和维护UI界面一直都是个繁琐的活,从需求设计到美术资源制作到执行到引擎里效果再到程序功能实现再到后期调试;需求发生变化的话又得重新走一套这套流程,所以UI界面之所上有几点忠告: 需求要明确:UI界面的设计前期一定要考虑全面尽量严谨些尽量避免UI界面功能或者布局上有大的改动,哪些是独有界面哪些是可复用界面,是否要拖拽、双击;多从用户体验上设计界面交互,避免存在多个层级界面。UI界面最好能用PPT或者其他软件模拟一个能体现功能点的,而我们却没有。 美术资源制作从简:由于手机性能限制,UI界面的纹理贴图又比较繁琐,所以尽量用单色或者可平铺的纹理做背景图,这样只需要一个很小尺寸的纹理就能搞定背景图;原画尽量少用,按钮类型不要太多,字体类型不要太多,最多两套就够了,总之,美术资源上别给太多超过512*512尺寸的纹理贴图就可以。 程序功能要复用性强UI界面关联的功能多尔繁,几乎包含了客户端所有功能的体现,程序写的功能最好能复用,一个人写一个功能,同样的需求,每个人有每个人的写法,比如:游戏内涉及到字体颜色改变的代码;UIsprite特殊运动规则(出现、淡入、淡出、缩放、抛物线);游戏各个界面的显示层级优先级;UI界面创建方式是否需要加载创建;当然我们的UI界面也曾经改版了三次,从头到尾需求一直都在有变化,不论是大功能还是小功能,这样很是不好。需求考虑不全不严谨,也会导致程序设计框架的时候会有弊端。 7. 版本控制协同开发IOS和Android我们用的是同一个工程;SVN上只上传Asset和Project settings两个文件夹的文件即可.之后把Project settings → editor →Mode改成Meta Files类型。每次需要锁定文件+文件.meta。 8. 项目资源和数据打包和更新9. Unity3D开发工具版本更新每次遇到U3D更新的时候,我都会迫不及待的看看都更新了哪些新东西,有没有对我们有用的,从4.0 到 4.0.1 到4.1 到4.1.2 到4.1.3到4.1.4 到4.1.5,由于不是大的更新所以就不假思索的替换了,到后来才发现4.1+在打包出apk的时候在部分android机型会出现花屏,会退到4.0.1就好了,查看了他们的更新log才发现对渲染这块有所改定,而4.1+对内存分析器又做增强了,能方便程序控制内存使用。所以我们无奈打包的时候用4.0.1,开发用4.1.3。所以说:更新要慎重,最新的不一定是最好的 10. 第三方插件使用和更新NGUI使用: 纹理更新要慎重,多个图集之间的深度要控制好,尽量避免太多个图集。字体类型选择unicode类型。 Ut4m: 插件保留在美术本地,只需要上传Shader、画好的地形贴图、材质球+模型+地表纹理就可以了。其他无需求 Playermaker: 正在研究中,一个很实用的插件,很方便编辑关卡各类事件! 11. 新技术跟进研究l Animator动画系统研究 l U3D中过场动画制作研究 l 动作+特效+音效+事件触发类可视化编辑研究 l 手机上性能Shader研究 l 客户端代码自动更新运行时编译,资源自动更新,边玩边下载 l 资源和数据加密 12. 机型适配问题13. UC、当乐、PP等账号、支付sdk接入SDK支付时,会中断UNITY主线程,需要保持网游中心跳的发送 PP助手支付 unity向OC传参 只能传一个字符串参数 且中文会出现乱码 14. Unity游戏内支付接口、短信付费15. 微博、facebook、第三方分享问题 不同的分享平台分享的内容以及格式需求不同,分别对应来设置才能正确分享. |