using System; using System.Text; using UnityEngine; using UnityEngine.UI; namespace Aisu.SIM1.Face.Samples.FaceDetectionDemo { /// /// MVP 操作日志窗口。 /// public sealed class FaceDetectionDemoLogger : MonoBehaviour { [SerializeField] private Text m_logText; // 日志文本。 [SerializeField] private ScrollRect m_scrollRect; // 日志滚动视图。 private readonly StringBuilder m_buffer = new StringBuilder(8192); // 日志缓存。 /// /// 绑定 UI。 /// public void Bind(Text logText, ScrollRect scrollRect) { m_logText = logText; m_scrollRect = scrollRect; } /// /// 写入普通日志。 /// public void Info(string message) { Append("INFO", message); } /// /// 写入错误日志。 /// public void Error(string message) { Append("ERROR", message); } /// /// 清空日志。 /// public void Clear() { m_buffer.Length = 0; Refresh(); } private void Append(string level, string message) { m_buffer.Append('[') .Append(DateTime.Now.ToString("HH:mm:ss")) .Append("] ") .Append(level) .Append(" ") .AppendLine(message ?? string.Empty); Refresh(); } private void Refresh() { if (m_logText != null) { m_logText.text = m_buffer.ToString(); } if (m_scrollRect != null) { Canvas.ForceUpdateCanvases(); m_scrollRect.verticalNormalizedPosition = 0f; } } } }