赞
踩
脚本修改完后,Unity会自动进行编译,生成DLL,并存储在 Library/ScriptAssemblies/ 目录下,最终会生成4个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;
同时,Unity 允许我们自定义程序集,将代码按照模块,组织到不同的 DLL 中。方法:
在 Project 窗口中,到需要生成单独程序集的代码目录下,右键,选择 Create/Assemply Definition,来定义该目录的程序集属性。选中创建的文件,在 Inspector 中查看,编辑属性。
如果想要将其他目录的代码,编译到指定的自定义程序集,可以为该目录创建Create/Assembly Definitaion Reference,然后再自定义程序集的 Inspector 中,在 Assembly Definition References 列表中添加刚才创建的 Assembly Definition Reference 文件。
我们在开发过程中,为了调试,可能需要输出大量日志,但是在打包运行时又不想输出日志,造成效率损失,我们可以检测,如果是非编辑器模式,关掉日志输出:
Debug.unityLogger.logEnabled = false;
当然了,如果可能的话,最好是打包时不打印日志,因为拼接日志字符串,也会造成GC,可以用 #if UNITY_EDITOR 来将日志包裹起来
#if UNITY_EDITOR
Debug.Log("...");
#endif
打包时,对于错误和异常,我们希望接收,并进行处理,比如打印到日志文件,或上传到日志服务器,我们可以:
void Start()
{
DontDestroyOnLoad(this);
Application.logMessageReceived += ReceiveLog;
}
void ReceiveLog(string condition, string stackTrace, LogType type)
{
if (type == LogType.Error || type == LogType.Exception)
{
// ...
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。