static void ClearLog()
{
Assembly assembly = Assembly.GetAssembly(typeof(SceneView));
Type logEntries = assembly.GetType("UnityEditorInternal.LogEntries");
logEntries.GetMethod("Clear").Invoke (new object (), null);
int count = (int)logEntries.GetMethod("GetCount").Invoke(new object (), null);
if (count u003E 0)
throw new Exception("Cannot build because you have compile errors!");
}
发布评论
评论(2)
trick有一个,只是比较老了。 思路是尝试clear掉日志。而编译错误是Clear不掉的,因此可以判断出是否遇到了编译错误。
public class CompilePostProcesser : AssetPostprocessor
{
static CompilePostProcesser() { EditorApplication.update += Update; }
// 所有编译完成之后的回调[注意小心造成递归的情况出现,也就是回调中的操作又重新引起了编译]
// 如果出现编译错误,那么这个回调不会被执行
[UnityEditor.Callbacks.DidReloadScripts]
private static void OnCompiled()
{
// Debug.ClearDeveloperConsole();
Debug.LogError("编译成功!");
SuccsccAction?.Invoke();
}
private static void Update()
{
if (EditorUtility.scriptCompilationFailed)
{
EditorApplication.update -= Update;
Debug.LogError("编译失败!");
FailAction?.Invoke();
}
}
}
试一下效果