using System.Text; using JetBrains.Annotations; using UnityEngine; namespace AibisDream { public class ValidateResultLog : MonoBehaviour { [SerializeField] private int fontSize; private ValidateResult validateResult; private Rect windowRect = new Rect(10, 10, 500, 200); private string validateResultString = "没有校验结果"; private int totalLine = 1; private void Awake() { GetComponent().OnSubmit += ShowValidateResult; GetComponent().OnPreview += ShowValidateResult; } private void OnDestroy() { GetComponent().OnSubmit -= ShowValidateResult; GetComponent().OnPreview -= ShowValidateResult; } private void OnGUI() { GUIStyle debugStyle = GUI.skin.GetStyle("window"); windowRect = GUI.Window(GetInstanceID(), windowRect, DrawDebugOverlay, "校验结果", debugStyle); } private void DrawDebugOverlay(int windowID) { // 生成校验结果字符串 var width = fontSize * 20 + 5; var height = fontSize * totalLine + 5; GUIStyle style = GUI.skin.GetStyle("label"); style.fontSize = fontSize; GUI.Label(new Rect(30, 20, width, height), validateResultString, style); GUI.DragWindow(); } private void GenerateValidateResultString() { var stringBuilder = new StringBuilder(); int lineCount = 0; // 先看最终结果 stringBuilder.AppendLine($"基本条件是否完成: {validateResult.isPass}"); lineCount++; foreach (var (conditonName, isPass) in validateResult.baseConditionResults) { stringBuilder.AppendLine($"{conditonName}条件结果: {isPass}"); lineCount++; } // 再看额外检验 stringBuilder.AppendLine($"额外条件是否完成: {validateResult.isExtraConditionPass}"); lineCount++; foreach (var (conditonName, isPass) in validateResult.extraConditionResults) { stringBuilder.AppendLine($"{conditonName}条件结果: {isPass}"); lineCount++; } totalLine = lineCount; validateResultString = stringBuilder.ToString(); } private void ShowValidateResult([CanBeNull]ValidateResult result) { if (result == null) { validateResultString = "没有校验结果"; totalLine = 1; return; } validateResult = result; GenerateValidateResultString(); } } }