输出Log到手机屏幕
一、需求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 + &#34;\r\n&#34; + 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);
}
}
}
四、效果
页:
[1]