c# - 统一将 Debug.log 作为 GUI 元素
问题描述
我的程序当前在控制台中显示文本。
我希望此文本显示在游戏窗口中。
数据是 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();
推荐阅读
- python - exec_module 中的文件“PyInstaller/loader/pyimod03_importers.py”,第 546 行,ModuleNotFoundError:没有名为“x”的模块
- python - SHA 256 作为 PyOpenCL 内核
- machine-learning - 为什么 Epoch 显示相同的准确性?
- php - Utf8 Web 的数据库字符集拉丁文
- laravel - SQLSTATE[HY000] [2054] 服务器请求客户端未知的身份验证方法(SQL:选择
= 基础表)) - php - 从mysql制作html选项列表的最有效方法?
- python - 为什么 any (True for ... if cond) 比 any (cond for ...) 快得多?
- c - 将函数的参数限制为仅枚举类型
- reactjs - 去抖动后设置 TextField 值不起作用
- .net-core - 在 RabbitMQ 中重启后如何让我的 dotnet 核心应用程序连接到仲裁队列?