unity中Debug输出控制
1 需求:
(1)选择在界面、console中输出,并且能够设置保存到文档
(2)控制debug是否输出,可以在debug模式下输出,release模式下不输出
2 参考:
谢谢雨松同学的博客:http://www.xuanyusong.com/archives/2782 , 雨松飞天般的想法实在太奇妙了,虽然我现在还没有理解里面的原理。雨松把debug类常用函数封装在debuger类中,然后通过封装DLL的方式解决Log输出后的定位的问题。
3 方案:
3.1 Dll生成
Debug输出控制类Debuger,通过EnableLog 控制书否输出Log。
- using UnityEngine;
- using System.Collections;
- public class Debuger
- {
- static public bool EnableLog = false;
- static public void Log(object message)
- {
- Log(message, null);
- }
- static public void Log(object message, Object context)
- {
- if (EnableLog)
- {
- Debug.Log(message, context);
- }
- }
- static public void LogError(object message)
- {
- LogError(message, null);
- }
- static public void LogError(object message, Object context)
- {
- if (EnableLog)
- {
- Debug.LogError(message, context);
- }
- }
- static public void LogWarning(object message)
- {
- LogWarning(message, null);
- }
- static public void LogWarning(object message, Object context)
- {
- if (EnableLog)
- {
- Debug.LogWarning(message, context);
- }
- }
- }
雨松提供下载的Dll,使用MonoDevelop编译器生成,在VS下可以用,但是会提示Debuger错误。在VS模式下,
(1)可以建议一个C# dll工程,.Net版本设置为3.5(4.0也会提示不兼容,如果MonoDevelop生成,则提示的.Net版本更低)
(2)引入unityEngine.dll库,不然你编译不过,OK ,然后编译一下就好了。
3.2 Unity中的使用
为了实现是否输出、输出位置、输出参数控制以及在界面中不同输出类型的效果、重复代码的检测等等,我顶层有重新进行封装了一下,不过文件的save,没仔细实现,直接代码吧:
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using System.Text;
- public class strLog
- {
- public string log;
- public LogType type;
- public uint num;
- public strLog(string _str, LogType _type, uint _num)
- {
- log = _str;
- type = _type;
- num = _num;
- }
- public void AddNum(uint _num)
- {
- Debug.Log(num);
- num += _num;
- }
- }
- public class DebuggerManager : MonoBehaviour
- {
- //打开Debug信息输出
- public bool m_isEnableDebugOut = true;
- //打开界面调试信息输出
- public bool m_isEnableShowLogInGui = true;
- //打开调试堆栈信息输出
- public bool m_isEnableShowTraceInfoInGui = false ;
- //打开调试信息文件记录
- public bool m_isEnableSaveInText = false;
- void Start()
- {
- if (false == m_isEnableDebugOut)
- {
- Debuger.EnableLog = false;
- return;
- }
- Debuger.EnableLog = true;
- Application.RegisterLogCallback(HandleLog);
- if (false == m_isEnableSaveInText)
- return;
- m_DebugTextPath = Application.persistentDataPath + "/outLog.txt";
- if (System.IO.File.Exists(m_DebugTextPath))
- {
- File.Delete(m_DebugTextPath);
- }
- }
- void Update()
- {
- WriteLogToFile();
- }
- void HandleLog(string logString, string stackTrace, LogType type)
- {
- if (m_isEnableShowLogInGui)
- {
- AddToShowList(type,logString);
- }
- if (m_isEnableShowTraceInfoInGui)
- {
- AddToShowList(type,stackTrace);
- }
- if (m_isEnableSaveInText)
- {
- AddToSaveList(logString);
- }
- }
- void OnGUI()
- {
- if (!m_isEnableShowLogInGui && !m_isEnableShowTraceInfoInGui)
- return;
- foreach(strLog log in m_GuiTextLines)
- {
- Color showClr = new Color(0.0f, 0.0f, 0.0f, 1.0f);
- if (log.type == LogType.Error)
- {
- showClr.r = 1.0f;
- }
- else if (log.type == LogType.Warning)
- {
- showClr.r = 1.0f;
- showClr.g = 1.0f;
- }
- else if (log.type == LogType.Log)
- {
- showClr.g = 1.0f;
- }
- GUI.skin.label.normal.textColor = showClr;
- GUI.skin.label.fontSize = ;
- GUI.skin.label.alignment = TextAnchor.UpperLeft;
- GUILayout.Label("【" + log.num.ToString() + "】 -->" + log.log);
- }
- }
- public static void AddToShowList(LogType type , params object[] objs)
- {
- if (!Application.isPlaying)
- {
- return;
- }
- string strShowInGui = " ";
- for (int i = ; i < objs.Length; ++i)
- {
- if (i == )
- {
- strShowInGui += objs[i].ToString();
- }
- else
- {
- strShowInGui += ", " + objs[i].ToString();
- }
- }
- for (int i = ; i < m_GuiTextLines.Count; ++i)
- {
- if (m_GuiTextLines[i].log == strShowInGui)
- {
- m_GuiTextLines[i].AddNum();
- return;
- }
- }
- if (m_GuiTextLines.Count > constMaxNum_ShowInGui)
- {
- m_GuiTextLines.RemoveAt();
- }
- m_GuiTextLines.Add(new strLog(strShowInGui,type,));
- }
- void WriteLogToFile()
- {
- if (false == m_isEnableDebugOut)
- {
- return;
- }
- if (m_TxtSavetoFile.Count > )
- {
- string[] temp = m_TxtSavetoFile.ToArray();
- foreach (string t in temp)
- {
- using (StreamWriter writer = new StreamWriter(m_DebugTextPath, true, Encoding.UTF8))
- {
- writer.WriteLine(t);
- }
- m_TxtSavetoFile.Remove(t);
- }
- }
- }
- public static void AddToSaveList(string strLog)
- {
- m_TxtSavetoFile.Add(strLog);
- }
- static List<strLog> m_GuiTextLines = new List<strLog>();
- static List<string> m_TxtSavetoFile = new List<string>();
- private string m_DebugTextPath;
- private const int constMaxNum_ShowInGui = ;
- }
4 效果
Demo下载:http://pan.baidu.com/s/1jGBUK3G
转载请注明:细雨淅淅
unity中Debug输出控制的更多相关文章
- Unity中使用摇杆控制
Unity中使用摇杆控制 本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50 ...
- unity中camera摄像头控制详解
目录 1. 缘起 2. 开发 2.1. 建立项目 2.2. 旋转 2.2.1. 四元数 2.3. 移动 2.3.1. 向量操作 2.4. 镜头拉伸 2.5. 复位 2.6. 优化 1 缘起 我们的产品 ...
- unity中添加音量控制的一些步骤
1.先确认要控制的音源(Audio Source)所使用的输出(Output),例如我这里BGM使用的是MainMixer: 2.暴露音量(Volume)参数,让脚本可以控制.这里如果不暴露出来,脚本 ...
- unity中键盘WASD控制。(WS控制物体前后移动,AD控制左右旋转。)
private float rotateSpeed = 30f; private float movespeed = 5; void FixedUpdate() { //第一种控制移动 float h ...
- ios中判断控制台Log输出控制,是否是iphone5,自动调整尺寸
// 控制台Log输出控制,此确保在release版本下无Log输出 #ifdef DEBUG #define CMBLOG NSLog #else #define CMBLOG ...
- unity, 对于Debug.Log输出的log,可以双击定位到代码
unity, 对于Debug.Log输出的log,可以双击定位到代码
- PHP中的输出缓冲控制
在 PHP 中,我们直接进行 echo . 或者 print_r 的时候,输出的内容就会直接打印出来.但是,在某些情况下,我们并不想直接打印,这个时候就可以使用输出缓冲控制来进行输出打印的控制.当然, ...
- 在intelllij中debug的时候使用log4j输出
一般在本地调试的时候,在控制台打印输出都会使用system.out.print,但是在线上运行的时候一般都是使用log4j进行日志输出. 那么在编写代码的时候,又不想写两份,直接写LOG是常规动作. ...
- (Unity)Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进展混淆,避免被反编译
Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进行混淆,避免被反编译. 1.打开VS,博主所用版本是Visual Studio 2013. 2.新建一个VC项目 ...
随机推荐
- java基础知识回顾之java Thread类学习(十一)--join方法的理解
以下面例子说明下面的源码:main 线程 和 A线程,A线程是main线程创建并且启动的,main线程优先级比较高,正在执行:这个时候main线程调用A.join()之后,main线程一直等待,直到A ...
- ER-STUDIO 6.5工具使用帮助的中文翻译
转自于:http://yujingwang.blog.sohu.com/63362979.html 1 资料 ER-STUDIO的帮助(英文) 2 内容 2.1 ...
- scp 使用
[spark-hadoop@master ~]$ sudo scp /etc/profile spark-hadoop@slave1:/etc spark-hadoop@slave1's passwo ...
- JAVA中操作符的优先级
一元数学比较有逻辑 三元赋值就可以! 一元操作符 数学操作符 比较操作符 逻辑操作符 三元操作符 赋值操作符
- DP ZOJ 3735 Josephina and RPG
题目传送门 题意:告诉你C(m,3)个队伍相互之间的胜率,然后要你依次对战n个AI队伍,首先任选一种队伍,然后战胜一个AI后可以选择替换成AI的队伍,也可以不换,问你最后最大的胜率是多少. 分析:dp ...
- 水题 ZOJ 3875 Lunch Time
题目传送门 /* 水题:找排序找中间的价格,若有两个,选价格大的: 写的是有点搓:) */ #include <cstdio> #include <iostream> #inc ...
- LightOJ1013 Love Calculator(DP)
容易猜测到包含s1.s2序列的串的最短长度是LCS(s1,s2) + ( len(s1) - LCS(s1,s2) ) + ( len(s2) - LCS(s1,s2) ) ,即: len(s1)+l ...
- Unity3D Built-in Shader详解一
Unity3D内置了很多Shader,文档很详细,自己翻一下.便于加深印象. 首先先解释下Unity3D的Shader.Unity里面的Shaders是使用一种叫ShaderLab的语言编写的,它同微 ...
- 发送JS错误日志到服务器
JS记录错误日志/捕捉错误 //onerror提供异常信息,文件路径和发生错误代码的行数的三个参数. window.onerror = function(e,url,index){ var msg = ...
- 利用pingyin4j 将汉字转换为拼音
jar包:http://pan.baidu.com/s/11ikCY import net.sourceforge.pinyin4j.PinyinHelper; import net.sourcefo ...