Unity-脚本编译

脚本编译

在编辑器下,每次修改完代码后,就会自动开始编译,最终所有的代码将编译成DLL文件。DLL文件最终将编译在…/Library/ScriptAssemblies目录下,一共是4个DLL文件:
在这里插入图片描述

编译规则

在这里插入图片描述
脚本分为运行时脚本和编辑时脚本两大类,只有运行时脚本会被编译进游戏包中。脚本的存放目录决定了它将编译在哪个DLL文件中。一般最后编译Editor目录下的脚本。
DLL的编译顺序为:Assembly-CSharp-firstpass.dll(f.cs)>Assembly-CSharp-Editor-firstpass.dll(ef.cs
Assembly-CSharp.dll(ac.cs)>Assembly-CSharp-Editor.dll(e.cs)。其中先编译的脚本无法访问后编译的脚本。

优化编译

游戏代码可以大致分为两类:框架代码和逻辑性代码。
框架代码一旦建立的较为完善后,就不需要一直修改,也不需要访问逻辑性代码了。
逻辑性代码的修改频率就要大得多。
使用我们可以把框架类代码放在Plugins目录下,这样如果修改非Plugins文件目录下的;逻辑性代码,就不会额外编译Plugins目录下的代码了。
如果代码量非常大的时候,上面这样的方法依旧会造成编译慢的问题,就可以把部分CS代码预先编译成DLL来加速编译。

编译DLL

.NET可以把C/C++编译进DLL,但是这会导致有些平台无法识别,此时如果编译DLL时只能编译C#代码,则需要爱macOS系统中打开终端,输入编译指令,DLL编译完成后直接拖到项目中去就可以了:

mac -r:/Applications/unity/unity.app/Contents/Managed/UnityEngine.dll
    -target:library  -out:test.dll  *.cs

UnityEngine.dll 编译所依赖的DLL文件
-target:library 生成Library类型
-out:test.dll 最终生成DLl的保存目录
*.cs 表示当前目录下所以的C#代码,如果有多个目录多个文件,可以空格分开。

脚本的跨平台:

Unity编辑器只支持Windows、macOS和Linux这三个平台,代码大部分是由C#编写的并编译在UnityEditor.dll中,通过Mono实现跨平台。
其中,底层渲染方法并不是使用C#来调用的,Unity只是把C#的接口封装到了UnityEngine.dll中。至于更底层的内部实现,则是由这个DLL再去调用C++来完成的。
对于不同的平台,编译C++的方式是不同的,从而实现了跨平台。例如:Android品台需要编译成 .so,IOS需要编译在.a中。
现在的Unity还支持IL2CPP,它可以把DLL代码转成C++来执行,从而提高效率。
可以通过反编译UnityEngine,dll和UnityEditor.dll来查看这一过程的实现。

打印日记

一般使用Debug来打印日志:

Debug.Log{“Log”}
Debug.Log{“LogError”}
Debug.Log{“LogWarning”}

在开发阶段,多打印可以了解程序行为。但是在发布后,要把日志关闭,不然会造成额外的开销。可以使用下面的代码,可以在初始化的地方设置条件编译,在非编译的模式下运行时,则关闭掉所有的日志和输出:

#if !UNITY_EDITOR
	Debug.unityLogger.logEnabled=false;
#endif

此篇为《Unity3D 游戏开发第二版》的学习和总结

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值