1、对于开发,要自上而下分析
eg:做一个商店界面,顺序:先分析当前大界面需要的东西,拆分数据、显示(其数据包含不同标签页的List数据)
进而每一个标签的内容,继而分析每个Item的内容(如每个item的price、icon、name等设计成一个数据)
2、要注重资源和代码的分离 === 动态地去将资源和代码绑定
ps:资源就是资源,代码就是代码(避免直接一个prefab上挂着脚本这种,因为比如只需要复用一个prefab的内容,而不需要复用代码就还得先去移除代码,很麻烦)。比如一个商店界面的shopView类,正确的处理办法是:不继承Mono,比如按下商城入口button之后,去new shopView类,然后在shopView类中,在代码中去加载预设shopPnlPrefab,然后用变量保存下该预设(GameObject或Transform),然后再去用变量的transform去Find下边的按钮啊、文本啊什么的就可以了。
3、要注意一些非必要的情况,尽量不继承MonoBehaviour(如第二条的处理)
4、对象池/资源池(其实本质不是自己有多少,而是别人不用的是多少)
比如:对象池用List1实现的,保存item,然后外部需要资源的时候,也需要保存到一份实例List2。这两个List的和是不变的。
现在,资源池最大容量10,里边现在有10个资源。外部需要3个,那么list1变成7,list2是3了。当我现在又需要5个了,那直接去再get两个就可以了。现在又只需要3个了,那么需要直接覆盖赋值前三个,然后移除List2中的两个,放回List1两个。
5、unity会产生几类不同的程序集,这几类执行顺序不同
Assembly-CSharp-vs.csproj (Assets/Editor外面的, 并且不在(1),(2)中的脚本文件(一般这些脚本就是我们自己写的非编辑器扩展的脚本))
Assembly-CSharp-firstpass-vs.csproj(最先编译, 在Standard Assets,Pro Standard Assets或者 Plugins文件夹中)
Assembly-CSharp-Editor-vs.csproj(在Assets/Editor中的脚本产生一个Assembly-CSharp-Editor-vs.csproj,最后编译)
Assembly-CSharp-Editor-firstpass-vs.csproj(其次编译,存放在各类Editor下的,eg:Plugins/Editor下,Eidtor下)
6、游戏会进行预加载,而内容可以根据json文件动态读取,这些预加载的东西一般是Shader的ab包;一些Common,通用性比较强的东西;或者是经常出现的,不会销毁的东西(比如MainPanel、ChatMainView等)
7、不同平台的ResPath路径:
8、工作中点调用和冒号调用的应用:
点调用:(多为一些Mgr类的方法,类似一个类的静态方法)
冒号调用:(普通方法,类似类的实例的方法)-----在其他地方调用,也是实例化一个类的实例再去冒号调用
9、有时候可以看到,同一个模块下(eg:ShopModule下),在一个类(eg:ShopView)中调用另一个类的静态方法,却不需要类名点调用,直接方法名调用就可以。原因在于:会发现,在该模块下的每一个类中,都有module(“ShopModule”,package.seeall),也就是说这样的话,只要是声明在这个模块下的方法(当然了,得是静态方法),都可以直接方法名调用,而不必须类名点方法名去调用。