Unity游戏视窗控制台输出


本文提供全流程,中文翻译。

Chinar 坚持将简单的生活方式,带给世人!

(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)

Chinar —— 心分享、心创新!

助力快速在 Game 视窗用 GUI 实现一个控制台的输出面板

为新手节省宝贵的时间,避免采坑!

Chinar 教程效果:(可打包后执行-便于调试)

Unity用GUI绘制Debug/print窗口/控制台-打包后测试-LMLPHP



全文高清图片,点击即可放大观看 (很多人竟然不知道)


1

Script —— 直接脚本挂载到空物

将该脚本挂载空物体上,无需其他任何配置

运行 / 打包后,按下按键 Q 即可打开 / 关闭面板

提示:

(可通过 Inspector 面板 ShortcutKey 属性自定义打开控制台面板的快捷键)

Unity用GUI绘制Debug/print窗口/控制台-打包后测试-LMLPHP

#define MACRO_CHINAR
using System.Collections.Generic;
using UnityEngine; namespace ChinarConsole
{
/// <summary>
/// Chinar可视控制台
/// </summary>
class ChinarViewConsole : MonoBehaviour
{
#if MACRO_CHINAR
struct Log
{
public string Message;
public string StackTrace;
public LogType LogType;
} #region Inspector 面板属性 [Tooltip("快捷键-开/关控制台")] public KeyCode ShortcutKey = KeyCode.Q;
[Tooltip("摇动开启控制台?")] public bool ShakeToOpen = true;
[Tooltip("窗口打开加速度")] public float shakeAcceleration = 3f;
[Tooltip("是否保持一定数量的日志")] public bool restrictLogCount = false;
[Tooltip("最大日志数")] public int maxLogs = 1000; #endregion private readonly List<Log> logs = new List<Log>();
private Log log;
private Vector2 scrollPosition;
private bool visible;
public bool collapse; static readonly Dictionary<LogType, Color> logTypeColors = new Dictionary<LogType, Color>
{
{LogType.Assert, Color.white},
{LogType.Error, Color.red},
{LogType.Exception, Color.red},
{LogType.Log, Color.white},
{LogType.Warning, Color.yellow},
}; private const string ChinarWindowTitle = "Chinar-控制台";
private const int Edge = 20;
readonly GUIContent clearLabel = new GUIContent("清空", "清空控制台内容");
readonly GUIContent hiddenLabel = new GUIContent("合并信息", "隐藏重复信息"); readonly Rect titleBarRect = new Rect(0, 0, 10000, 20);
Rect windowRect = new Rect(Edge, Edge, Screen.width - (Edge * 2), Screen.height - (Edge * 2)); void OnEnable()
{
#if UNITY_4
Application.RegisterLogCallback(HandleLog);
#else
Application.logMessageReceived += HandleLog;
#endif
} void OnDisable()
{
#if UNITY_4
Application.RegisterLogCallback(null);
#else
Application.logMessageReceived -= HandleLog;
#endif
} void Update()
{
if (Input.GetKeyDown(ShortcutKey)) visible = !visible;
if (ShakeToOpen && Input.acceleration.sqrMagnitude > shakeAcceleration) visible = true;
} void OnGUI()
{
if (!visible) return;
windowRect = GUILayout.Window(666, windowRect, DrawConsoleWindow, ChinarWindowTitle);
} void DrawConsoleWindow(int windowid)
{
DrawLogsList();
DrawToolbar();
GUI.DragWindow(titleBarRect);
} void DrawLogsList()
{
scrollPosition = GUILayout.BeginScrollView(scrollPosition);
for (var i = 0; i < logs.Count; i++)
{
if (collapse && i > 0) if (logs[i].Message != logs[i - 1].Message) continue;
GUI.contentColor = logTypeColors[logs[i].LogType];
GUILayout.Label(logs[i].Message);
}
GUILayout.EndScrollView();
GUI.contentColor = Color.white;
} void DrawToolbar()
{
GUILayout.BeginHorizontal();
if (GUILayout.Button(clearLabel))
{
logs.Clear();
} collapse = GUILayout.Toggle(collapse, hiddenLabel, GUILayout.ExpandWidth(false));
GUILayout.EndHorizontal();
} void HandleLog(string message, string stackTrace, LogType type)
{
logs.Add(new Log
{
Message = message,
StackTrace = stackTrace,
LogType = type,
});
DeleteExcessLogs();
} void DeleteExcessLogs()
{
if (!restrictLogCount) return;
var amountToRemove = Mathf.Max(logs.Count - maxLogs, 0);
print(amountToRemove);
if (amountToRemove == 0)
{
return;
} logs.RemoveRange(0, amountToRemove);
}
#endif
}
}

2

Print / Debug —— 打印输出

当你的项目中有打印输出的时候,面板上会直接显示信息

效果类似于 Unity 的 Console 窗口

Unity用GUI绘制Debug/print窗口/控制台-打包后测试-LMLPHP

        void Update()
{
print("Chinar-Console");
Debug.Log("Debug.Log");
}

Unity用GUI绘制Debug/print窗口/控制台-打包后测试-LMLPHP


支持

May Be —— 搞开发,总有一天要做的事!

拥有自己的服务器,无需再找攻略!

Chinar 提供一站式教程,闭眼式创建!

为新手节省宝贵时间,避免采坑!

先点击领取 —— 阿里全产品优惠券 (享受最低优惠)



1 —— 云服务器超全购买流程 (新手必备!)



2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)



3—— Windows 服务器配置、运行、建站一条龙 !



4 —— Linux 服务器配置、运行、建站一条龙 !


Unity用GUI绘制Debug/print窗口/控制台-打包后测试-LMLPHP

" role="presentation">

技术交流群:806091680 ! Chinar 欢迎你的加入


END

本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究


对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: [email protected]


对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

04-14 16:48