找回密码
 立即注册
查看: 635|回复: 0

输出Log到手机屏幕

[复制链接]
发表于 2020-12-20 10:53 | 显示全部楼层 |阅读模式
一、需求

unity在电脑上运行的时候可以通过console的打印了解到程序的运行信息,而打包成apk包之后,就无法知道在安卓机内的运行情况了。我们在打包运行的时候,常常会遇到在电脑上运行没有问题,但是在手机上运行不正常的问题,这个时候,我们就需要一种简单直接的方式,能够看到我们加的打印以获取更多的调试信息了。
另外说明一点,使用Unity Romote的时候,手机只是作为一个控制输入端存在的,而程序真正运行的地方其实是在电脑上,所以不能通过这种方式获取真机运行信息。
IOS真机运行的时候,可以通过XCode看打印结果。


二、原理

主要用到的接口是Application.logMessageReceived
每当一次Log输出的时候logMessageReceived添加的函数就会被触发一次,只在主线程触发,不过一般情况不用考虑这个。
此外,我们还需要一些其他的功能,例如Log打印的开关、打印的行数、字体大小、字体颜色等等。


三、实现

在场景中添加一个空物体名为Logger,然后在上面附加代码组件,具体代码如下:
using UnityEngine;
using System.Collections;
using LuaFramework;
using UnityEngine.UI;
using System.Collections.Generic;
public class ShowLogTool : MonoBehaviour
{
    public bool showFlag = true;
    public int logCount = 100;
    private string m_ShowLog = string.Empty;
    private Queue<string> logQueue = new Queue<string>();

    void Start()
    {
        Application.logMessageReceived += WriteUnityLog;
    }


    void WriteUnityLog(string log, string stackTrace, LogType type)
    {
        if (!showFlag) return;
        WriteInLogQueue(log);
    }

    void WriteInLogQueue(string log)
    {
        logQueue.Enqueue(log);
        while (logQueue.Count > logCount)
        {
            logQueue.Dequeue();
        }
        m_ShowLog = string.Empty;
        foreach (string onelog in logQueue)
        {
            m_ShowLog = m_ShowLog + "\r\n" + onelog;
        }
    }

    void OnGUI()
    {
        if (showFlag)
        {
            GUIStyle style = new GUIStyle();
            <span class="n">style.fontSize = 20;
            style.normal.textColor = Color.red;

            //GUI.color = Color.red;
            GUI.Label(new Rect(0, 0, 1000, 1000), m_ShowLog, style);
        }
    }


}


四、效果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-20 06:26 , Processed in 0.090597 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表