赞
踩
在编辑器下,每次修改完代码后,就会自动编译,最终所有代码将编译成DLL文件。一共4个。
//--编译规则
脚本分为 运行时脚本 和 编辑时脚本 两大类,运行时脚本最终会编译进游戏包中,而编辑时脚本仅用于编辑器模式下,不会被打进游戏包。
脚本存放的目录决定了它将编译在哪个DLL 文件中。
Plugins 目录下的脚本优先编译,然后才编译其他目录,最后会编译 Editor 目录下的脚本,最终编译出4份DLL文件。
DLL的编译顺序是Assembly-CSharp-firstpass.dll > Assembly-CSharp-Editor-firstpass.dll > Assembly-CSharp.dll > Assembly-CSharp-Editor.dll。
//--优化编译
随便修改一些代码,就要等Unity 编译DLL好久,开发效率大打折扣。
游戏代码大致可以分成两类,框架类代码 和 逻辑性代码。
框架类代码成熟后,并不需要经常修改并且它不需要访问逻辑性代码,而逻辑性代码的改动频率是极高的。
所以,我们可以把框架类代码放在Plugins目录下,这样改动非Plugins 目录下的逻辑性代码是,就不会额外编译 Plugins 目录下的代码了,编译就快了。
如果逻辑性代码量非常大,还是会造成编译慢的问题,此时还可以把部分CS代码预先编译成DLL,这样编译就更快了。
//--脚本跨平台
Unity 自己提供了两个核心的DLL库,UnityEditor.dll 和 UnityEngine.dll 。
Unity 编辑器只支持 Windows macOS 和 Linux 这3个平台,所以代码大部分都是由C#编写并且编译在UnityEditor.dll中,然后通过Mono 实现了跨平台。
运行时由于它兼容的平台非常多,并不是所有平台都能运行DLL的,所以Unity 只把C#接口封装到了UnityEngine.dll 中。至于更底层的内部实现,则是由这个DLL再去调用C++来完成的。
拿移动平台来说,编译C++的方式是不同的,Android 需要编译成 .so ,iOS 则编译在 .a 中。Unity 会针对每个平台编译出这份核心库,从而就实现了跨平台。
现在Unity 还支持IL2CPP ,它可以把DLL代码转成C++来执行,这从效率上又能提高一个台阶。开发者还是使用C#语言开发,打包时才自动转换成IL2CPP。
//--程序集定义
Unity2018提供了程序集定义,它可以进一步地优化编译速度。
用户可以指定某个文件夹(包括了子文件夹)来单独生成DLL。Project视图中Create→Assembly Definition
如图,AAA_Assembly 和 BBB_Aaaembly ,也会生成在 Library/ScriptAssemblies文件夹下。
外部代码可以直接访问这两个DLL的,但是它们之间是无法直接访问的,除非设置依赖关系。
此时B可以访问A了,如果A也设置依赖B,那么A就可以访问B了,即相互访问。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。