Помещение Debug.log как элемента GUI в единство - PullRequest
1 голос
/ 14 февраля 2020

Моя программа в настоящее время отображает текст в консоли.

Я хочу, чтобы этот текст отображался в окне игры.

Данные являются частью веб-запроса.

Есть ли простой способ отобразить то, что отображается в консоли как элемент GUI?

1 Ответ

1 голос
/ 14 февраля 2020

Да, вы можете просто добавить обратный вызов, например, Application.logMessageReceivedThreaded

Пример из API, расширенный сценарием OnGUI из этой темы

// 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...