Hello,之前在零基础入门系列里,有发过关于快捷键清除日志的文章,但是当时的Unity版本是Unity5.5,很多人和我说用起来都还蛮方便,但是随着2017的普及使用,发现这个脚本在Unity2017里报错了,会提示空引用等错误,然后也无法清除日志,问我怎么解决。
问的人越来越多,那干脆今天就来简单说一下如何替换代码逻辑实现2017快捷键清除日志吧
进入正题
之前在Unity 5.5的版本中,通过下面的代码逻辑来实现快捷键清除日志,
通过System.Type获取到dll里的LogEntries,通过反射来进行快捷键清除日志的函数查找和调用,执行清除操作。使用效果图如下,alt+c快捷清除日志
但是在Unity2017里,使用这个代码就会报错,提示空引用,找不到引用对象,那么应该如何在这基础上做修改呢?
逻辑如下
通过上图可以看出,之前在unity5.5版本的代码已经都被我注释掉了,而新的适合在Unity2017中使用的,正是下面的那些逻辑。
通过反射查找方法的逻辑都是一样的,区别在于如果获取到LogEntries,Unity2017中不再通过System.Type去GetType获取,而是通过Assembly去GetType拿到LogEntries。
清晰图如下
代码逻辑如下
[MenuItem("Jimin/Clear Console &c")]
public static void ClearConsole()
{
/* change by Jimin ---->>> The under code can't used in 2017
Type logEntries = System.Type.GetType("UnityEditorInternal.LogEntries,UnityEditor.dll");
var methrod = logEntries.GetMethod("Clear", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
if (methrod != null)
{
methrod.Invoke(null, null);
GUIUtility.keyboardControl = 0;
}
else
{
Debug.LogWarning("Can't find methord");
}
*/
//for unity 2017 add by Jimin
Assembly assembly = Assembly.GetAssembly(typeof(SceneView));
Type logEntries = assembly.GetType("UnityEditor.LogEntries");
var method = logEntries.GetMethod("Clear", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
if (method != null)
{
method.Invoke(null, null);
GUIUtility.keyboardControl = 0;
}
else
{
Debug.LogWarning("Can't find clear method");
}
}
好了,这下之前有问题的就可以按照今天的分享内容来进行修改啦。
这期的分享就结束了,大家下期分享见咯。
本文分享自 韩东吉的Unity杂货铺 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!