做好Unity4.x开发项目规划

1. 是否要用lua

  2. (对于需操作的游戏)客户端游戏如何做战斗验证

  下面列举小坑吧。不建议都绕开,毕竟没有那么多时间做前期调研的。

  对应版本Unity4.x

  1. 客户端程序层面

  总的来说C#超级给力的,不过别玩脱了

  1) mono虚拟机gc

  Unity的mono虚拟机使用不分代的gc算法,临时对象积攒起来,导致重量级GC游戏频繁卡顿。

  Unity官方:认真review每帧20B以上,以及一次2K以上的GC Alloc的行为。传闻:Unity5会改进。

  推荐阅读:Gamasutra: Wendelin Reich‘s Blog

  评价:请像C++一样精确了解各种行为的gc,foreach 都不要随便用。严重,但游戏是可以卡巴卡巴上线的。后期一位核心开发人员修2~3周。

  2) 苹果aot编译问题:模板问题

  mono在苹果上采用aot将C#编译为静态代码。首先,依赖于动态代码生成的复杂模板容易运行时崩溃;其次,mono会将客户端生成一个库。模板代码实例化容易膨胀导致该库超过40M而无法链接。

  实战:碰到了改写法吧。不过我本人是静态类型检查派的。

  3) 少用coroutine

  yield只支持try--finally,与异常体系兼容性极差;难以提供返回值;异步本身是非线性的,很难保证逻辑完备。

  实战:复杂异步逻辑用状态机。不致命,多修bug也能抗过。

  4) 自行处理配置数据序列化

  严重影响配置读取速度。C#自带的xml序列化很慢,自带的二进制序列化也不够快。

  实战:打包配置考虑protobuf或者代码生成器。中后期一周左右。

  5) 反射

  手机上jit情况下,第一次反射一个类很慢。乱用足够影响启动速度。

  6) 本地化

  如果公司习惯于做海外市场,一开始就可以考虑全套本地化方案。后期改需要一个人1~2个月工作量。

  2、资源优化

  Unity资源优化,一个靠谱的TA很重要。

  1) 资源内存占用

  512内存机器能用的资源大概只有50~60M。

  需透彻研究贴图。考虑换皮怪资源复用、UI的图集合理化。

  没有UI优化经验的话,强烈建议一个核心开发死跟,像抠代码优化一样优化图集总结经验。这个后期很难收场。

  每个粒子发射器占用10K内存;有些项目在动画上会有内存问题。

  2) 关注资源包大小

  最大的是贴图和骨骼动画。贴图关注内存即可。骨骼动画可以占到模型的一半大小,重做的话有各种优化方案。但超标后期也很难收场。

  3) 依赖打包

  Unity4.x和Unity5完全不同。其中Unity4.x机制庞大繁杂容易错,要有心理准备。扯一些要点:

  * 一定要搞清其内存占用和生存周期。要实测,特别容易跌眼镜。

  * 每个API都有坑。我个人目前推荐压缩模式、LoadFromCache,此时不能拆太碎。战斗前预加载。

  * shader加载慢,应当放入依赖包

  * bundle不能重名

  4) 场景、drawcall、camera

  场景面多了考虑动态batching

  不同材质透明物体(例如粒子)穿插可能引起drawcall暴增。

  camera是重型对象,越少越好

  5) svn

  资源选Text模式、显式保存.meta,便于版本管理。资源分人或者锁了改,规避冲突。

  3、Unity

  和Flash一样容易学的3D编辑器

  1) 事件机制

  Unity事件机制很不好用。单个对象,Awake,Start,Enable调用时机相当复杂。Unity完全不保证多个对象的事件执行顺序,导致很多人绕开Start。不恰当的使用事件,很容易导致父子对象不在同一帧出现,画面不干净。

  Destroy操作是延迟的,对象会活到帧的结尾,然后必定销毁。库级设计时,必须考虑到这一点(例如对象池/动画库)。

  2) 资源管理

  只说Unity4.x。合理做法是依赖很卡的UnloadUnusedAssets、LoadScene清理无引用资源(另注意前者是异步的),或者Bundle.Unload(true),这些方案各有限制。试图更细粒度手工清理的困难在于,并不存在系统性文档解释Unity资源的分类和生存周期,且Destroy操作很保守。例如,销毁mesh时,并不会销毁material、texture,更不会清理脚本资源。

  此外,特定的普通操作会造成资源克隆。例如访问Renderer.meterial,Animation.AddClip。

  4、NGUI

  久经验证的掉链子王。新项目也可以尝尝uGUI

  1) panel重绘

  widget改变后,所在panel需要生成多边形,很慢,坑新人没商量,注意合理分panel。panel中多边形过多会爆(貌似是65535个顶点?)。

  uGUI原理相同,就是c代码比C#快不少。

  2) panel渲染顺序

  搞清楚ui上放置3D物体咋办,ui如何和特效混合排序。

  3) 策划/美术ui规范

  潜规则很多。Anchor、动画不可作用于同一个物体。widget必须是panel的子节点,不然他就会自己造panel,经常搞出乱子。再加上上面的panel规则等,要策划美术折腾ui可费神了。

  项目组自制UI编辑器自然是极好的,不过不一定必要。

  4) 创建速度慢

  由于序列化字段多,NGUI对象创建可导致卡顿。多状态对象不要靠隐藏-显示,而要动态创建。尤其是状态中包含粒子发生器/Animation,这俩还有内存问题(10K一个)。

  5) 与Unity事件机制强耦合

  与Unity的事件机制强耦合,不完备,容易有bug。例如,panel绘制依赖于LateUpdate。coroutine中同时关闭旧界面,创建新界面,此时当前帧 LateUpdate 已过,表现为有一帧画面为空白。

时间: 2024-10-13 21:16:52

做好Unity4.x开发项目规划的相关文章

软件项目开发没规划好就注定会失败

软件项目开发没规划好就注定会失败 软件项目开发与管理的一些原则 软件项目的开发与管理是一门复杂的学问,不是简单地需求来了就动手编码,编码完了就算项目完工那么简单.一个项目如果没有好好规划,那么就很容易会失败.同样,我们在做一个软件项目的时候,需要注意的东西很多,下面总结一下一些容易视而不见但又非常重要的软件开发指导原则. 对外部环境的认识 1.必要性原则:用户(客户)需要应用软件来帮助他们处理信息. 2.“脱机”原则1:用户(客户)通常不会一直坐在电脑面前,他们都有自己的工作要做,而那些工作才是

如何做好网站开发项目的需求分析

一个网站项目的确立是建立在各种各样的需求上面的,这种需求往往来自于客户的实际需求或者是出于公司自身发展的需 要,其中客户的实际需求也就是说这种交易性质的需求占了绝大部分.面对对网站开发拥有不同知识层面的客户,项目的负责人对用户需求的理解程度,在很大程度 上决定了此类网站开发项目的成败.因此如何更好地的了解.分析.明确用户需求,并且能够准确.清晰以文档的形式表达给参与项目开发的每个成员,保证开发过 程按照满足用户需求为目的正确项目开发方向进行,是每个网站开发项目管理者需要面对的问题. 一.那些人应

为什么别人的APP开发项目很成功

手机APP应用现在有多火大家应该身有体会,做公交地铁,走路,甚至开车的时候都在玩手机,当然不建议大家这么做,只是说明智能手机的火爆,APP应用暴增的一个社会现象.这个时候大多数企业都会开始开发自己的APP,但最后APP能够成功的很少,因为大多数企业都会进入一个误区,这也是导致大多数APP开发项目反响平平的重要因素.APP应用前期开发不是大而全才是好的,现在我们应该从"小而美"开始设计,解决用户的痛点,然后慢慢增加新的功能,一步一步获得用户的喜爱,切不要盲目开发APP.所以说开发APP要

如何做好项目管理,做好人人都是项目经理

大部分人在日常的工作当中,都或多或少的会参与项目,而项目要能顺利执行其实并不简单,如果又渉及多个单位合作,困难程度又大增. 对项目经理来说,从他们的工作日志片段可以看出每个人都有自己悲惨的故事,程度恐怕只有过之而无不及.那我们该如何做好项目管理呢? 今天CORNERSTONE就从以下几个方面来给大家分享如何做好项目管理: 1.什么是项目管理? 2.项目管理的难点在哪? 3.项目管理与产品管理有何不同? 4.我们该如何做好项目管理? 5.好用的项目管理软件推荐 一.什么是项目管理 在日常工作中开发

iOS开发项目-02添加子控制器以及项目分层

iOS开发项目-02添加子控制器以及项目分层 一.添加子控制器 1.设置根控制器(自定义) 说明:分析新浪微博应用,观察其整体建构层次.而系统的控制器不能满足项目开发的需求,这里把项目中原有的控制器删除. 自己定义一个TabBarViewController类.让这个类作为window窗口的根控制器. YYAppDelegate.m文件代码: 1 #import "YYAppDelegate.h" 2 #import "YYTabBarViewController.h&quo

团队开发项目第一次会议

日期 2015年4月5日 所有成员全部参加 一.团队名称:   318 二.队员:   王童博  20122823    石鹤  20122833  李海超  20122827   燕亚峰 20122914 三.队长:   王童博 四.开发项目名称:图书检索软件(安卓) 五.项目说明: 功能:查询图书所在 查询借书情况 由于我们借书时还需登陆图书馆网站查询,十分不方便.把应用搬到移动设备上,这是时代的要求.移动便携设备将蓬勃发展. 六.总结:这次会议开得很好很热烈,大家都踊跃发言,热烈讨论.大家

【乱写代码坑人系列】ZJUT数据库大型实验 - 学生管理系统(二):项目规划

学生管理系统(二)项目规划 学生管理系统(一)建立项目 好吧这部分应该放在第一的,但是我忘了(逃.其实也差不多啦,反正上一篇也没说什么啊哈哈. 先说项目要求.项目要求的是建立一个管理系统,用来对本地的数据库进行增删查改,把.mdf 文件直接拿来改会被老师打的,所以还是要有一个图形界面. 图形界面要有几个页面:登录,主窗口,学院.老师.学生.课程.成绩的管理,要能看到详细信息,能够批量删除什么的.为了装逼可以考虑加入与Office的连接,不过这个是后话,做好基础功能再玩. 数据库要这么几个表:学院

小组开发项目NABC分析

我们团队的开发项目为:牛逼的手电筒 NABC模型 1.N:手机越来越普及,用其充当手电已经是一种潮流,所以需求量还是很大的. 2.A:这学期正在学习Android开发技术,感觉自己和队友对于这方面还是能够完成的,而且不光是技术方面,我们可以将自己的东西推广出去,拉同学来使用,给出使用的体会等等. 3.B:对用户有什么好处?用户如果使用我们的APP,会感到更加牛逼,更加特立独行,与众不同,只要打开手电筒,不但能达到照明的目的,还有装*的效果:对于成本方面,我们规划的APP目前来看应该大多数的有闪光

软件开发项目云端All

如今在软件开发圈里混,Agile,DevOps,Cloud是大家经常挂在嘴边的词,其实大家各自都有在应用层上的经验,但是如何把三者很好的结合起来,这是所有项目管理者困惑和需要的问题. Agile让我们的项目更加拥抱变更. 持续集成和持续交付让我们更快的进行自动化交付. 自动化持续部署也让开发团队,运维团队受益颇多. Infrastructure也逐步向Cloud迁移. 作为一个软件开发的项目经理,我的团队一步步推进,演变,一切都那么地和谐.虽然我们在最大化地自动化,工具化,无论是管理层还是项目团