当前位置:   article > 正文

脚本 4 脚本编译及日志_unity "library\scriptassemblies" 自动生成debug

unity "library\scriptassemblies" 自动生成debug

脚本编译

脚本修改完后,Unity会自动进行编译,生成DLL,并存储在 Library/ScriptAssemblies/ 目录下,最终会生成4个DLL:

  • Assembly-CSharp-firstpass.dll Assets/Plugins/ 目录下的非 Editor 子目录的代码,将编译在该 DLL 中
  • Assembly-CSharp-Editor-firstpass.dll Assets/Plugins/ 目录下的 Dditor 子目录下的代码,将编译在该 DLL 中
  • Assembly-CSharp.dll Assets/ 目录下,Plugins目录以外的代码,将编译到该 DLL 中
  • Assembly-Editor-CSharp.dll Assets/ 目录下,Plugins目录以外的,Editor 目录子目录下的代码将编译到该 DLL 中

注意,Plugins 目录下的代码,是不能访问其它目录下的代码的

编辑器编译死锁

编辑器下,运行游戏时,如果脚本发生变化,会自动编译,并继续执行。如果我们的代码逻辑很复杂,尤其是创建了多线程逻辑,则可能导致程序死锁,我们不得不杀死 Unity 编辑器进程。

有2种办法解决该问题:

  • 在菜单Editor/Preferences/General/Script Changes While Playing 下拉菜单中,选择 Stop Playing and Recompile。

  • 创建MonoBehaviour脚本,在 Update 检测编译,如果正在编译,则停止运行。该脚本要挂到游戏启动场景的对象上,并且在 Start() 中执行 DontDestroyOnLoad(this)。

        if(EditorApplication.isCompiling)
            EditorApplication.isPlaying = false;
  • 1
  • 2

自定义程序集

同时,Unity 允许我们自定义程序集,将代码按照模块,组织到不同的 DLL 中。方法:

在 Project 窗口中,到需要生成单独程序集的代码目录下,右键,选择 Create/Assemply Definition,来定义该目录的程序集属性。选中创建的文件,在 Inspector 中查看,编辑属性。

如果想要将其他目录的代码,编译到指定的自定义程序集,可以为该目录创建Create/Assembly Definitaion Reference,然后再自定义程序集的 Inspector 中,在 Assembly Definition References 列表中添加刚才创建的 Assembly Definition Reference 文件。

日志

我们在开发过程中,为了调试,可能需要输出大量日志,但是在打包运行时又不想输出日志,造成效率损失,我们可以检测,如果是非编辑器模式,关掉日志输出:

Debug.unityLogger.logEnabled = false;
  • 1

当然了,如果可能的话,最好是打包时不打印日志,因为拼接日志字符串,也会造成GC,可以用 #if UNITY_EDITOR 来将日志包裹起来

#if UNITY_EDITOR
	Debug.Log("...");
#endif
  • 1
  • 2
  • 3

打包时,对于错误和异常,我们希望接收,并进行处理,比如打印到日志文件,或上传到日志服务器,我们可以:

    void Start()
    {
        DontDestroyOnLoad(this);
        Application.logMessageReceived += ReceiveLog;
    }

    void ReceiveLog(string condition, string stackTrace, LogType type)
    {
        if (type == LogType.Error || type == LogType.Exception)
        {
            // ...
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/112005
推荐阅读
相关标签
  

闽ICP备14008679号