当前位置:   article > 正文

Unity 3D 游戏脚本 脚本编译_unity 脚本自动编译

unity 脚本自动编译

在编辑器下,每次修改完代码后,就会自动编译,最终所有代码将编译成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了,即相互访问。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/111958
推荐阅读
相关标签
  

闽ICP备14008679号