前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >零基础入门 42:更新Unity2017快捷键清除日志

零基础入门 42:更新Unity2017快捷键清除日志

作者头像
韩东吉
发布2018-10-16 10:59:59
1.5K0
发布2018-10-16 10:59:59
举报

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");

}

}

好了,这下之前有问题的就可以按照今天的分享内容来进行修改啦。

这期的分享就结束了,大家下期分享见咯。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 韩东吉的Unity杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档