代码
这里针对C#,静态强类型面向对象本身就是一个坑,继承带着两个职责,一个是复用代码,一个是接口继承。虽然性能比lua高那么一丢丢,因为性能瓶颈不在业务本身,设计上的问题要严重得多。我认为像lua这种动态语言的元编程才能够贯彻单点真理,通过元编程把真理推导到系统的每一处。让代码始终保持语义,而我认为写业务代码最重要的是保持语义。保持语义的简单有效评判方法就是看这个类中的某个函数,单独看它能否看懂;多个接口能否组成完备的解决方案。静态强类型面向对象语言比较适合需求稳定的严谨的系统开发,而不是游戏开发。容易经过多次的策划需求冲刷,语义很容易扭曲,各种抽象泄露、各种hack。好吧,跑题了。
Unity3D容易被破解,因为发布版本的IL是非常容易被反编译的,要做好混淆的考虑。在Unity3D中混淆要考虑对编辑器的影响。
复杂类型尽量使用引用类型,值类型反射麻烦,不方便序列化以及做成编辑器。值类型要小心赋值对象是否只是临时对象。
引用类型释放之后,引用它的指针会置为null,可以放心使用。
foreach、linq、协程慎用,反射只在编辑器中使用。
考虑封装Time,方便做暂停。
考虑使用调度器来完成功能,而不是在Update自己维护状态,这样做暂停也很容易,代码更清晰,功能更内聚。
增量更新要一开始就想清楚。
美术
Unity3D可以通过扩展编辑器让非技术人员编辑界面来工作,组织好美术资源规格、路径,并且自动生成prefab。游戏场景物件也要规划好逻辑节点,这个也应该通过编辑器扩展好。复杂功能也应该通过编辑器开发给策划微调,特别是可视化比较重要的模块,比如动作调整。
制作原型美术,让开发提升开发效率。
有统一的约定,比如模型总是中心对齐,角色总是脚部对齐,统一的缩放、统一的动画骨骼命名,资源有统一的路径。
支持换装(avatar)要一开始就想清楚。
资源加载和优化尽可能早地给出雏形(只是雏形,帮助你对需求的把握,因为这时候你还不知道热点在哪),因为一旦没有规划好异步和资源释放,那么阻塞卡顿和内存飙升那是意料之内的。因为有雏形,那么代码会间接一点,也为改变提供了空间。
首家Unity3D官方授权认证,只在蓝鸥广州unity3d培训班!