unity的一些tips
主要是我知乎上回答的一个关于unity的tip,备忘。
1 尽量不要在Awake(), start()等函数内加入业务逻辑的初始化代码。首先无法简便的直接启动调试查看。逻辑代码依赖太多,很多时候你只是希望检查界面编辑效果,在你不加入逻辑代码直接启动的话,基本会出来一大堆错误。另外,各个脚本start等函数的调用顺序很难控制,不要说可以调整脚本优先级,这个功能大致用用可以,不要依赖它。更何况很多人甚至不知道这个功能。初始化必须要显式调用,除非你知道自己在干什么(比如一些单纯的效果类脚本)。
2 不要public太多的变量到编辑器中,特别是逻辑变量。尽量减少脚本外部引用特别是对GameObject的引用。这对维护来说真的是一个梦魇,死的很难看。
3 一个Level内,要控制它的tree层级。你能想象一个MainMenu的level,直接包含了所有的UI,他们直接的脚本相互之间引用Level内GameObject。你能想象一个主脚本内有几十个引用到外部GameObject的变量吗? 单是要在编辑器内找到这些变量对应的GameObject眼睛都要瞎掉。有时在缺少信息的情况下只能靠猜的。应该把每个功能独立开来做成预制件,每个功能有管理自己的独自脚本组,然后再添加到主level内。这是基本的模块化而已,不能因为unity太好用就可以乱来。
4 有人似乎意识到了自己public出来的变量太多了,或者纯粹是懒得加了,于是当他确实需要引用某个外部GameObject时,通常都用someobject.getchild(i)来取得引用。 这绝对是值得捅一刀的行为,你的项目如果有人这么用,不要我说了吧。除非父节点之下是一个节点链表(如滑动框集合),否则谁知道getchild(i)得到什么意外?我就发现往某个节点增加了一张图片,然后整个模块的逻辑全乱掉了,这简直是谋杀未遂啊。
5 管理规划好你的NGUI的depth。2.7版本以下不要随意移动z轴和depth来达到显示效果,永远要有一个基本depth参照值。设计好atlas的划分,如果你不想遇到增加或减 少一张图片就会遇到奇怪的遮盖或消失问题。特别是你的level很庞大时,我发现无解。强烈建议升级到NGUI3.x,痛苦但值得。
6 coroutine是个好东西,但别滥用。实现一个状态机是有必要的。别的不说,至少不会在所有模块的各个角落里都添加上新手指引的代码了吧?建议仿照boost的statechart写一个简化版本,爽死你。
7 善用uigrid,uitable。当你写一个背包UI时,还要手动写每个格子的长宽,padding逻辑这是折磨自己,坑死别人,何苦。
8 规划好你的object的结构,这通常比你所写的脚本更重要。更一般的说,数据结构简单易懂,直接反映问题,这样你的逻辑代码才会清晰简洁。
9 设计不要超越或强迫程序。比如,要求一部分UI背景处在3D背景之后,其他UI的在3D背景之前,而这个3D场景是游戏主场景,忘了说你还要照顾在这之间穿插的粒子效果呢。我无法理解这种给自己下绊的尴尬决定是如何诞生的。可能2个原因吧,一是之前程序使用NGUI2.7,整个3d场景的layer被设成跟UI一致(无法想象),然后程序通过z轴和depth来达到这些效果。看到这我已经很凌乱了,而且居然无法说服他们这是不对的...
10 资源命名有待规范,目前资源包括预制件的命名混乱随意。这个是整个项目人员素质问题,或者说缺少个规划。
11 atlas的资源分布好好好规划。美术风格上尽量使用通用的控件,通用的控件使用的atlas限制一张之内。不要鬼扯什么设计不美观的问题,一张2048x2048的atlas大小,都容不下你惊人的设计能力?特殊的图片按照level或加载状态分好atlas。尽量做到动态创建销毁。不要包含过多的大图片,能从设计上避免就避免。
12 我真的不建议把UI直接跟level做在一起。如果是轻UI类型的项目可以。做uiniy要时常考虑一点就是,level,prefab,atlas等等都是个二进制文件,svn下不可比对,意味着你修改某个东西时,在这个level下的所有东西都要被锁定了,其他人只能等你。
13 SDK接入时,养成代码里就做好平台区分的习惯,用宏加上状态机。因为SDK是个巨坑,先保证己方代码不出错,才能自求多福啊。平台区分代码(宏),尽量都放在相同的代码段中。
14 c#的话,模板可能会是个问题。我会告诉你相同的模板代码,在andriod下build通过,在wp8和ios就不行呢。写的朴实点了。
15 资源方面,请试着封装一个resource manager。加载资源,prefab,level等时想着bundle。到处resource.load是不行的。这是个蛮头痛的问题,我还没真正开始做,异步加载估计有很多问题等着。
16 NGUIDebugTool里的接口有点用。
17 建议你的UI弹出子菜单能做到即时创建即时摧毁,多数情况下其实无须考虑加载时间,如果要可以尝试协程分步缓一缓。
18 NGUI的编辑器相关的代码可以借鉴下,反正我自定义的显示在inspector内的变量都是参考NGUI的,能显示的漂亮整洁些。
在可编辑性和代码控制间权衡好是使用unity的很重要的问题。
unity是个编辑器,意思是不只是程序员用它。请所有相关的开发人员熟悉基本的工作流程与概念。
unity的一些tips的更多相关文章
- Unity性能优化(3)-官方教程Optimizing garbage collection in Unity games翻译
本文是Unity官方教程,性能优化系列的第三篇<Optimizing garbage collection in Unity games>的翻译. 相关文章: Unity性能优化(1)-官 ...
- Unity优化方向——优化Unity游戏中的垃圾回收(译)
介绍 当我们的游戏运行时,它使用内存来存储数据.当不再需要该数据时,存储该数据的内存将被释放,以便可以重用.垃圾是用来存储数据但不再使用的内存的术语.垃圾回收是该内存再次可用以进行重用的进程的名称. ...
- Unity官网教程之Tips
前言 翻译整理unity官网教程的tips部分,原文:http://unity3d.com/cn/learn/tutorials/topics/tips Snap 按住Ctrl键,并用鼠标拖动Game ...
- [转]50 Tips for Working with Unity (Best Practices)
About these tips These tips are not all applicable to every project. They are based on my experience ...
- unity tips
1.在unity 的mecanim中,如果一个动画指向两个或两个以上的动画,那么在inspector中,transitions中可以看到所有的过渡路径,这些路径是有先后顺序的.
- 【Unity Tips】备忘录(扫盲篇)
写在前面 Unity3D虽然是个非常方便的游戏引擎,但还是有一些地方会产生一些让人莫名其妙的问题,而且debug半天也不知道到底哪里错了.往往在经过了大量的log之后,也许我们才顿悟,原来Unity内 ...
- Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译
本文是Unity官方教程,性能优化系列的第二篇<Diagnosing performance problems using the Profiler window>的简单翻译. 相关文章: ...
- 转 unity 优化
最近研究U3D开发,个人认为,精通一种新的技术,最快最好的方法就是看它的document,而且个人习惯不喜欢看中文的资料,原汁原味的东西是最正确的,一翻译过来很多东西就都不那么准确了.于是通读了uni ...
- Unity开发-你必须知道的优化建议
转自:http://blog.csdn.net/leonwei/article/details/18042603 最近研究U3D开发,个人认为,精通一种新的技术,最快最好的方法就是看它的documen ...
随机推荐
- windows server2008 IIS搭建网站简易教程(阿里云)
最近搞了个阿里云服务器 想着需要用这个服务器学点东西,故而想着把自己之前写的网站能部署上去,虽然自己是做前端移动开发,但是对这个服务器的东西也很感兴趣 第一步 配置阿里云入口规则 如图开放81 80 ...
- emp架构
https://wenku.baidu.com/view/5fac8d037e21af45b207a852.html https://wenku.baidu.com/view/f2faa36fa451 ...
- Android之Fragment(碎片)方方面面
Fragment简介碎片(Fragment)是一种可以嵌入到活动当中的UI片段,它能让程序更加合理和充分的利用大屏幕的空间. Fragment的生命周期 它与Activity生命周期的关系: 可以看到 ...
- 『Python CoolBook』数据结构和算法_多变量赋值&“*”的两种用法
多变量赋值 a = [1,2,(3,4)] b,c,d = a print(b,c,d) b,c,(d,e) = a print(b,c,d,e) 1 2 (3, 4) 1 2 3 4 a = &qu ...
- 1022. Sum of Root To Leaf Binary Numbers从根到叶的二进制数之和
网址:https://leetcode.com/problems/sum-of-root-to-leaf-binary-numbers/ 递归调用求和,同时注意%1000000007的位置 /** * ...
- Spring cloud系列之win10 下安装 ZooKeeper 的方法
ZooKeeper 下载地址: https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/ 1.将下载的文件解压到指定的目录中 2.进入conf文件夹 ...
- CUDA 例程
scalar add #include <thrust/host_vector.h> #include <thrust/device_vector.h> #include &l ...
- 超简单的实现wordcount
worcount1.0,源码参见GitHub:https://github.com/18382271904/spring_lee_flag.git
- Android开发 ---基本UI组件5:监听下拉选项,动态绑定下拉选项、全选/反选,取多选按钮的值,长按事件,长按删除,适配器的使用,提示查询数据,activity控制多按钮
效果图: 效果描述: 1.当点击 1 按钮后,进入选择城市的页面,会监听到你选中的城市名称:动态为Spinner绑定数据 2.当点击 2 按钮后,进入自动查询数据页面,只要输入首字母,就会动态查找以该 ...
- Codeforces Round #244 (Div. 2) C. Checkposts (tarjan 强连通分量)
题目:http://codeforces.com/problemset/problem/427/C 题意:给你n座城市,m条有向道路,然后有一个机制,你在某一个城市设置检查点,那么被设置的检查点受保护 ...