You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Unity中Debug.Log打印的内容在场景内以文本形式展示

Unity 控制台日志转场景内文本展示实现方案

核心实现原理

Unity 提供了全局日志回调接口 Application.logMessageReceived(主线程触发,适合直接操作UI),可以捕获所有 Debug.Log/Debug.LogWarning/Debug.LogError 输出的内容,无需修改原有项目的日志打印代码。

基础实现步骤

  • 第一步:创建场景内文本展示容器
    优先使用 TextMeshPro - Text (UGUI) 组件作为日志展示载体,搭配 Scroll Rect 组件实现长日志滚动查看,也可以使用旧版 UGUI Text 组件。如果需要展示多行日志,建议将文本组件放在滚动视口的内容节点下。
  • 第二步:编写日志捕获绑定脚本
    创建新的C#脚本,示例代码如下:
    using UnityEngine;
    using TMPro;
    // 如果使用旧版UGUI Text,替换上方命名空间为 using UnityEngine.UI;
    
    public class InGameConsole : MonoBehaviour
    {
        // Inspector中拖拽绑定场景内的文本组件
        public TextMeshProUGUI logText;
        // 最大日志存储条数,超过后自动删除最早的一条
        public int maxLogCount = 50;
    
        private void OnEnable()
        {
            // 注册全局日志回调
            Application.logMessageReceived += HandleLog;
        }
    
        private void OnDisable()
        {
            // 注销回调,避免内存泄漏
            Application.logMessageReceived -= HandleLog;
        }
    
        private void HandleLog(string logString, string stackTrace, LogType type)
        {
            // 可选:根据日志类型加颜色标记,需开启文本组件的Rich Text选项
            string coloredLog = type switch
            {
                LogType.Error => $"<color=red>[错误] {logString}</color>",
                LogType.Warning => $"<color=yellow>[警告] {logString}</color>",
                _ => $"[信息] {logString}"
            };
            
            // 拼接新日志到原有内容开头/末尾
            logText.text = $"{coloredLog}\n{logText.text}";
            
            // 超出最大条数时裁剪掉最早的日志
            string[] logLines = logText.text.Split('\n');
            if (logLines.Length > maxLogCount)
            {
                logText.text = string.Join("\n", logLines, 0, maxLogCount);
            }
        }
    }
    
    如果使用旧版UGUI Text组件,只需将代码中的TextMeshProUGUI替换为Text即可。
  • 第三步:挂载脚本并绑定组件
    将上述脚本挂载到场景内持久存在的对象上(比如全局管理器对象),在Inspector面板中将之前创建的文本组件拖拽到 logText 字段,运行项目即可看到所有Debug输出自动同步到场景文本中。

可选优化方案

  • 若需要捕获程序运行过程中的崩溃异常日志,可以替换回调为 Application.logMessageReceivedThreaded,注意该回调可能在子线程触发,操作UI需要先抛到主线程执行。
  • 可以添加日志筛选按钮,分别控制信息、警告、错误日志的显示与隐藏。
  • 增加点击单条日志展示完整堆栈信息的交互逻辑,方便排查问题。
  • 日志内容过多时开启文本的自动裁切,避免单帧文本渲染开销过高。

内容的提问来源于stack exchange,提问作者Lorenzo Sindoni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:18:03