Unity3d 实用篇(二) 手机调试小工具,可在屏幕上方显示debug信息

手机调试小工具,可在屏幕上方显示debug信息,将代码挂在一个任何物体上即可

 

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
public class Logger : MonoBehaviour
{
    static List<string> mLines = new List<string>();
    static List<string> mWriteTxt = new List<string>();
    private string outpath;
    void Awake()
    {
        DontDestroyOnLoad(this);
        //Application.persistentDataPath Unity中只有这个路径是既可以读也可以写的。
        var filename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt";
        //var filename = "log.txt";
        outpath = Path.Combine(Application.persistentDataPath, filename);
        //每次启动客户端删除之前保存的Log
        if (File.Exists(outpath))
        {
            File.Delete(outpath);
        }
        File.Create(outpath);
        //在这里做一个Log的监听
        //Application.RegisterLogCallback(HandleLog);
        Application.logMessageReceived += HandleLog;
    }
	void Start()
	{
		Debug.Log(outpath);
	}

    void OnApplicationQuit()
    {
        Debug.Log("Quit");
    }
    void Update()
    {
        //因为写入文件的操作必须在主线程中完成,所以在Update中给你写入文件。
        if (mWriteTxt.Count > 0)
        {
            string[] temp = mWriteTxt.ToArray();
            using (StreamWriter writer = new StreamWriter(outpath, true, Encoding.UTF8))
            {
                foreach (string t in temp)
                {
                    writer.WriteLine(t);
                }
                mWriteTxt.Clear();
                writer.Close();
            }
        }
    }

    void HandleLog(string logString, string stackTrace, LogType type)
    {
        mWriteTxt.Add(logString);
        mWriteTxt.Add(stackTrace);
        if (type == LogType.Log)
        {
            Log(logString);
            //Log(stackTrace);
        }
    }
    
    //这里我把错误的信息保存起来,用来输出在手机屏幕上
    static public void Log(params object[] objs)
    {
        string text = "";
        for (int i = 0; i < objs.Length; ++i)
        {
            if (i == 0)
            {
                text += objs[i].ToString();
            }
            else
            {
                text += ", " + objs[i].ToString();
            }
        }
        if (Application.isPlaying)
        {
            if (mLines.Count > 20)
            {
                mLines.RemoveAt(0);
            }
            mLines.Add(text);

        }
    }

    void OnGUI()
    {
        GUI.color = Color.red;
        
        GUIStyle bb = new GUIStyle();
        bb.normal.background = null;    //这是设置背景填充的
        bb.normal.textColor = new Color(1, 0, 0);   //设置字体颜色的
        bb.fontSize = 26;       //当然,这是字体颜色
        for (int i = 0, imax = mLines.Count; i < imax; ++i)
        {
            GUILayout.Label(mLines[i],bb);
        }
       
        
    }
    void OnDestory()
    {
        Application.logMessageReceived -= HandleLog;
    }
}

 

 

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值