Unity里清除Console控制台Log的函数

Log输出部分转发来自:http://blog.sina.com.cn/s/blog_13c4bf4b40102wz0r.html

在控制台输出中,是开发者常用到的一种函数,通过Debug类来实现

  • 打印字符串,
    Debug.Log(“log”);

  • 如果有需要警告的信息,
    Debug.LogWarning(“waring”);

  • 如果有错误,
    Debug.LogError(“error”);

假如,希望发生错误的时候,游戏立刻暂停,
Debug.Break();
但是该函数只适合放在try-catch或if-else里面,因为它不会主动捕获异常,只会在我们命令的地方执行,暂停游戏,调试完毕之后,可以手动点击继续,然后又会继续执行下去,直到下一个同样错误出现为止。
使用如下:


if(Input.GetKeyDown(KeyCode.E))
{
      Debug.LogError("erroe");
      Debug.Break();
}
或
try
{
        /*
         执行正常操作
         */
}
//出现空引用,打印ErrorLog,并且暂停游戏
catch(NullReferenceException)
{
       Debug.LogError("NullReferenceException");
       Debug.Break();
}

在运行期间,开发者肯定需要观察很多参数,会使用很多Log,但是出现很多之后,查看时候十分的不方便,所以想使用一个函数来清除之前已经无用的函数。

假如,想要让console的内容清空,在Debug里有一个Debug.ClearDeveloperConsole函数,原以为这个就是官方给的方便开发者调用的函数,
官方API上的描述为:Clears errors from the developer console.
中译出来就是:清除开发人员控制台中的错误。然鹅并没什么卵用。并不会清楚Console上的输出,不知道是怎么用的,由于博主只在百度上搜索,所以对于这个函数的理解有局限性,大家有理解的希望评论区留言。

下面是网络上大家都描述的方法:

private void toClearConsole()
{
	//获取UnityEditor程序集里面的UnityEditorInternal.LogEntries类型,也就是把关于Console的类提出来
	var logEntries = System.Type.GetType("UnityEditorInternal.LogEntries,UnityEditor.dll"); 
	//在logEntries类里面找到名为Clear的方法,且其属性必须是public static的,等同于得到了Console控制台左上角的clear,然后通过Invoke进行点击实现
	var clearMethod = logEntries.GetMethod("Clear", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);  
	clearMethod.Invoke(null, null);  
}

备注(一):

使用System.Type.GetType()得到Type引用
为了以更灵活的方式得到类型信息,我们可以调用System.Type类的静态成员GetType(),然后指定类型的完全限定名。采用这种方法,我们不需要得到正从中提取元数据的类型的编译时信息,

1)Type.GetType()方法被重载一:
允许我们指定两个布尔类型的参数,一个用来控制当类型找不到时是否抛出异常,另一个用来指示是否区分字符串大小写。
例如:
// 使用静态的Type.GetType()方法获取类型信息(如果SportsCar没有找到,则忽略不抛出异常信息)
Type t = Type.GetType(“CarLibrary.SportsCar”,false,true);

2)Type.GetType()方法被重载二:
在上面的例子中,注意传入GetType()的字符串没有包含类型所在的程序集信息。在这种情况下,该类型便被认为是定义在当前执行的程序集中。但是,当希望得到一个外部私有程序集的类型元数据时,字符串参数必须使用类型完全限定名,加上类型所在的程序集的名字(每一个都用逗号隔开):

// 得到外部程序集中类型的类型信息
Type t= Type.GetType(“CarLibrary.SportsCar,CarLibrary”);

备注(二)

C#中类型Type有个GetMethod方法,调用该方法可获取指定方法名的方法信息实例。
使用时,其参数一般为2个,一个是方法名称字符串(可设置条件忽略大小写),另外一个参数为搜索方法的条件枚举。
该方法返回的是MethodInfo类型的实例,获取到了这个实例之后,我们就可以调用并执行该方法了。
MethodInfo method = type.GetMethod( funcName , BindingFlags.IgnoreCase | BindingFlags.Static | BindingFlags.Public );

这里要注意,搜索条件枚举,即第2个参数,要包含BindingFlags.Public,否则会返回NULL的。
如果是静态的方法,还要设置一个条件BindingFlags.Static。

得到了MethodInfo实例后,反射执行该方法:
method.Invoke( obj, arrParam );
obj为调用方法所属的类型实例,如果调用的为静态方法,可设置为null;arrParam为方法参数数组。

你可能感兴趣的:(Unity3D)