脚本编译

在编辑器下,每次修改完代码后,就会自动开始编译,最终所有的代码将编译成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_EDITORDebug.unityLogger.logEnabled=false;
#endif

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

Unity-脚本编译相关推荐

  1. 【Unity3D】Unity 脚本 ① ( 创建 C# 脚本 | Visual Studio 2019 中打开 C# 脚本 | 编译 C# 脚本 | 挂载 C# 脚本到游戏物体 | 运行脚本 )

    文章目录 一.创建 Unity 脚本 二.Visual Studio 2019 中打开 C# 脚本 三.编译 C# 脚本 四.挂载 C# 脚本到游戏物体 GameObject 1.添加组件方式 2.直 ...

  2. Unity 手动编译 Reload脚本 减少等待时间

    Unity 手动编译 Reload 脚本 这是个自定义reload domain工具,加快工作流,减少等待.测试版本是Unity2021,理论上来说2020以上都可. 脚本地址:UnityManual ...

  3. 【Unity3D】Unity 脚本 ② ( Visual Studio 2019 中的 Unity 编译环境配置 | Unity 编辑器关联外部 C# 脚本编辑器 Visual Studio )

    文章目录 一. Visual Studio 2019 中的 Unity 编译问题 二. Unity 编辑器中关联外部 C# 脚本编辑器 三. 设置游戏运行时脚本更新行为 一. Visual Studi ...

  4. [Unity脚本运行时更新]C#7.2新特性

    洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第7篇. 洪流学堂公众号回复runtime,获取本系列所有文章. Unity2 ...

  5. [Unity脚本运行时更新]C#5新特性

    洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第3篇. 洪流学堂公众号回复runtime,获取本系列所有文章. Unity2 ...

  6. Unity脚本运行时更新带来了什么?

    洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第一篇,后续会结合Unity实例介绍C# 4 - C# 6都带来了具体哪些变化 ...

  7. Unity脚本介绍和常用API

    Unity脚本介绍和常用API 脚本介绍 1.脚本 介绍 语法结构 编译过程 2.开发工具 MonoDevelop Visual Studio 3.脚本生命周期 简介 脚本生命周期的阶段 1.初始阶段 ...

  8. Unity脚本(一)

    视频教程:https://www.bilibili.com/video/BV12s411g7gU/?p=112 目录 脚本 特性 控制台Console 脚本生命周期 Assembly-CSharp.d ...

  9. unity脚本学习3

    unity脚本编程3 类方法 ◆ static void LayerToName(layer :in):string 描述:给定一个层的数字.返回内置的或在tag Maneger中定义的层名称. ◆ ...

  10. unity3d 脚本编译

    Unity把所有的脚本编译为.NET  dll文件,这些 dll文件将在运行时实时地进行汇编.这 使得Unity的脚本运行速度非常快,比传统的 JavaScript快 20倍左右,只比本地 C++代码 ...

最新文章

  1. Python开发以太坊智能合约指南(web3.py)
  2. JavaScript第一天学习
  3. 面向Java程序员的20大Spring REST面试问题答案
  4. C/C++:Windows编程—代码实现IE保护模式的关闭和开启
  5. 引自codeking的这句话
  6. WebLogic 之安全配置
  7. 思维导图形式带你读完《大型网站技术架构》中
  8. nxlog以syslog方式发送日志
  9. 惠普HP LaserJet Enterprise M4555 MFP 驱动
  10. 力扣 179. 最大数
  11. 日本春令营在线比赛第一天总结
  12. 赛效:如何在线给图片加水印
  13. C++ if条件语句用法
  14. Win10 开机默认开启数字小键盘的方法
  15. 亲脂性细胞膜染料: DiO, Dil, DiR, Did - MedChemExpress
  16. 美国计算机科学专业申请条件,美国CS计算机科学专业申请条件有哪些?
  17. nohup命令原理解析
  18. OpenCV for Python之图像RIO与泛洪填充
  19. 服务器没有自检信息,服务器没内存能自检吗
  20. 基于python可视化的网页搜索引擎设计#毕业设计

热门文章

  1. 8位、16位和32位的MCU,更多的位是更好的吗?
  2. 因为年轻被骗了,难受啊马飞
  3. Binder service入门–创建native binder service
  4. linux open: permission denied,Linux运行文件出现“Permission denied”解决办法
  5. LightGBM参数
  6. 古典音乐常见体裁分类
  7. 数据采集之业务数据采集整理
  8. MySQL学习之路(五):MySQL删除数据库
  9. 一次真实的东西方程序员访谈比较
  10. C++(inline函数)