繁体   English   中英

统一将 Debug.log 作为 GUI 元素

[英]Putting Debug.log as a GUI element in unity

我的程序当前在控制台中显示文本。

我想让这段文字显示在游戏 window 中。

数据是 web 请求的一部分。

有没有一种简单的方法可以将控制台中显示的内容显示为 GUI 元素?

是的,您可以简单地向例如Application.logMessageReceivedThreaded添加回调

来自此线程的OnGUI脚本扩展的 API 示例

// Put this on any GameObject in the scene
public class ExampleClass : MonoBehaviour
{
    // Adjust via the Inspector
    public int maxLines = 8;
    private Queue<string> queue = new Queue<string>();
    private string currentText = "";

    void OnEnable()
    {
        Application.logMessageReceivedThreaded += HandleLog;
    }

    void OnDisable()
    {
        Application.logMessageReceivedThreaded -= HandleLog;
    }

    void HandleLog(string logString, string stackTrace, LogType type)
    {
        // Delete oldest message
        if (queue.Count >= maxLines) queue.Dequeue();

        queue.Enqueue(logString);

        var builder = new StringBuilder();
        foreach (string st in queue)
        {
            builder.Append(st).Append("\n");
        }

        currentText = builder.ToString();
    }

    void OnGUI()
    {
        GUI.Label(
           new Rect(
               5,                   // x, left offset
               Screen.height - 150, // y, bottom offset
               300f,                // width
               150f                 // height
           ),      
           currentText,             // the display text
           GUI.skin.textArea        // use a multi-line text area
        );
    }
}

一般来说: OnGUI是一种遗留物,你真的应该只将它用于调试。

但是您基本上也可以将相同的脚本用于例如UI.Text组件,而不是使用OnGUI为其分配文本。

该脚本基本上看起来相同,但有一个

public Text text;

而不是OnGUI会直接做

text.text = builder.ToString();

DotPlay也有很好的解决方案。 这是示例代码:

using UnityEngine;
using DotPlay;

public class Class1 : MonoBehaviour
{
    private void Start ()
    {
        DebugAgent.LogGUI ("Hello!");
        DebugAgent.LogGUI ("Bye!");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM