Android收集Log文件并显示在UGUI

来源:互联网 发布:知天命尽人事下一句 编辑:程序博客网 时间:2024/06/07 10:37

吃水不忘wa井人。。。
http://www.xuanyusong.com/archives/2477

效果图
这里写图片描述
这里写图片描述
突然发现显示的信息好像不完整。。。手机上的没有定位到哪里出错…先分享一下吧

using UnityEngine;using System.Collections.Generic;using System.IO;using System.Text;using UnityEngine.UI;public class OutLog : MonoBehaviour{    List<string> mLines = new List<string>();    List<string> mWriteTxt = new List<string>();    private string outpath;    Text logText;    RectTransform rt;    public float maxHeight = 100;    VerticalLayoutGroup layout;    void Start()    {        logText = GetComponentInChildren<Text>();        rt = logText.GetComponent<RectTransform>().parent.GetComponent<RectTransform>();        layout = rt.GetComponent<VerticalLayoutGroup>();        //Application.persistentDataPath Unity中只有这个路径是既可以读也可以写的。        outpath = Application.persistentDataPath + "/outLog.txt";        if (File.Exists(outpath)) //每次启动客户端删除之前保存的Log        {            File.Delete(outpath);        }        Application.logMessageReceived += HandleLog;   //在这里做一个Log的监听    }    void Update()    {        if (mWriteTxt.Count > 0) //因为写入文件的操作必须在主线程中完成,所以在Update中写入文件。        {            string[] temp = mWriteTxt.ToArray();            foreach (string t in temp)            {                using (StreamWriter writer = new StreamWriter(outpath, true, Encoding.UTF8))                {                    writer.WriteLine(t);                }                mWriteTxt.Remove(t);            }        }        if (mLines.Count > 0)//显示日志的条件。。。        {            ShowLogToText();        }        Test();//测试效果    }    private static void Test()    {        if (Input.GetMouseButtonDown(0))        {            int r = Random.Range(0, 2);            if (r == 0)            {                Debug.LogError("FDSFS");                int[] test = new int[1];                test[2] = 0;            }            else if (r == 1)                Debug.LogError("A");        }    }    void ShowLogToText()    {        List<RectTransform> allCloneRt = new List<RectTransform>();        RectTransform cloneRt;        for (int i = 0, imax = mLines.Count; i < imax; ++i)        {            cloneRt = Instantiate(logText, rt).GetComponent<RectTransform>();            allCloneRt.Add(cloneRt);            cloneRt.GetComponent<Text>().text = mLines[i];        }        mLines.Clear();//清空        LayoutRebuilder.ForceRebuildLayoutImmediate(rt);//刷新,获取recttransform的最新信息以便于Layout布局        for (int i = 0; i < allCloneRt.Count; i++)//计算content的高度        {            maxHeight += allCloneRt[i].sizeDelta.y + layout.spacing;        }        Vector2 pos = rt.sizeDelta;        pos.y = maxHeight;        rt.sizeDelta = pos;    }    void HandleLog(string logString, string stackTrace, LogType type)    {        mWriteTxt.Add(logString);        if (type == LogType.Error || type == LogType.Exception)        {            Log(logString);            Log(stackTrace);        }    }    //这里我把错误的信息保存起来,用来输出在手机屏幕上    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);        }    }}
0 0
原创粉丝点击