Unity - 编辑器自动编译脚本:
Unity开启自动编译:
一般Unity是默认自动编译脚本的,设置在:
Edit -> Preferences -> General -> Auto Refresh。
自动刷新导入的模型和编译代码脚本是挺好的,但是当你的项目十几个G时,这就不太美妙了。特别是,当你只想要测自己的那个部分,只需要导入少量的资源和和编译少量的代码时;或者你只是出去切换了一个网页,或者和别人说了两句话就会切回来时,每次切换长达数20秒的停顿可能是你看到一个愤怒的打工人疯狂地开始砸键盘的导火索。
因为项目大了,每次切换窗口都会自动编译,很卡,所以等每次有更新svn再去编译,可以节省每次切换卡顿的时间,也会提升工作效率。unity引擎在我们写好或修改了C#脚本之后,会自动编译。这个编译是比较耗时的。哪怕我们做了一丁点儿修改,这个过程也不可避免。 尤其是在运行时候我们修改了一下某个脚本,但是并不想结束运行,这时候如果我们顺手切换了一下unity编辑器的话,就会导致运行结束,开始重新编译脚本。
当你更新了SVN,一定要记得手动Refresh(重新编译脚本!)
导入工程,在Unity3D编辑器下按下Ctrl+R(Windows操作系统)手动编译脚本,若运用合理,可以节约不少脚本编译时间,现在就让我们关掉auto refresh,开始自由自在的切换人生!!!
如果你记不住快捷键,也可以使用Assets->Refresh
来进行刷新
Unity的刷新(refresh原理):
Unity 在资源数据库刷新期间执行以下步骤:
1.查找资源文件的更改,然后更新源资源数据库
2.导入并编译与代码相关的文件,例如 .dll、.asmdef、.asmref、.rsp 和 .cs 文件。
3.然后,如果未从脚本调用 Refresh,重新加载该域。
4.对导入的代码相关文件的所有资源进行后期处理
5.然后导入与代码无关的资源,并对所有剩余的导入资源进行后期处理
6.随后对资源进行热重载
热重载是指在 Editor 开启的状态下由 Unity 导入脚本和资源并应用所有更改的过程。无论 Editor 是否处于运行模式 (Play Mode),都可能发生此情况。无需重新启动应用程序和 Editor 即可使更改生效。
更改并保存脚本时,Unity 会热重载所有当前加载的脚本数据。它首先将所有可序列化变量存储在所有加载的脚本中,并在加载脚本后恢复这些变量。热重载后,所有不可序列化的数据都会丢失。
每次计算文件的哈希值,如果发生了变化,则更新该文件;这样可以高效地进行刷新,不过这种方法仅限于资源的刷新,特别是例如Prefab,.unity文件等。
编译还是会从头开始的,如果你拥有ssd硬盘,每次编译的时间不会太久,10秒以内就可以结束。
程序和GUI说他改了,但是我刷新发现没有更改?
偶尔也会出现这样的情况(叹气),由于游戏的制作过程都是比较模块化的,只需要刷新对应部分的prefab然后重新编译下代码即可。
遇到一些例如材质缺失,贴图丢失的问题,可以在去找程序、策划、gui前先自己刷新下,看看是不是没有新加载场景和新的prefab导致的,避免QA(质量管理人员)看错的可能性,节省大家的时间。
例如:
我在工程目录下找到UI模块,
接下来只需要找到对应的主模块,然后刷新就行
例如下面这个登录界面的模块:
我只需要ctrl+a(全选),或者干脆在上一级就选中这个文件夹,然后右键reimport一下该模块即可加载其材质和贴图等等。