using UnityEngine; using UnityEngine.UI; using System.Collections; using AppleHills.Core.Settings; using Core; public class DebugUIMessage : MonoBehaviour { private static DebugUIMessage instance; private Text messageText; private Canvas canvas; private Coroutine hideCoroutine; /// /// Show a debug message on the UI for a set duration. /// /// The message to display. /// How long to display the message (seconds). /// public static void Show(string message, Color displayColor, float duration = 2f) { #if UNITY_EDITOR var divingDevSettings = DeveloperSettingsProvider.Instance.GetSettings(); if (divingDevSettings && !divingDevSettings.ShowDebugUiMessages) { Logging.Debug($"[DebugUIMessage] Loggig debug message: {message}"); return; } if (instance == null) { var go = new GameObject("DebugUIMessage"); instance = go.AddComponent(); instance.SetupUI(); DontDestroyOnLoad(go); } instance.ShowMessage(message, duration, displayColor); # else Logging.Debug($"[DebugUIMessage] Loggig debug message: {message}"); #endif } /// /// Sets up the UI canvas and text for debug messages. /// private void SetupUI() { canvas = new GameObject("DebugUICanvas").AddComponent(); canvas.renderMode = RenderMode.ScreenSpaceOverlay; canvas.sortingOrder = 9999; canvas.gameObject.transform.SetParent(transform); var textGO = new GameObject("DebugUIText"); textGO.transform.SetParent(canvas.transform); messageText = textGO.AddComponent(); messageText.alignment = TextAnchor.MiddleCenter; // Try to load a custom font from Resources/Fonts/DebugFont.ttf Font customFont = Resources.Load("Fonts/DebugFont"); if (customFont != null) messageText.font = customFont; else messageText.font = Resources.GetBuiltinResource("LegacyRuntime.ttf"); messageText.fontSize = 32; messageText.color = Color.yellow; var outline = textGO.AddComponent(); outline.effectColor = Color.black; outline.effectDistance = new Vector2(2, -2); var rect = messageText.GetComponent(); rect.anchorMin = new Vector2(0.5f, 0.5f); rect.anchorMax = new Vector2(0.5f, 0.5f); rect.pivot = new Vector2(0.5f, 0.5f); rect.anchoredPosition = Vector2.zero; rect.sizeDelta = new Vector2(800, 40); messageText.text = ""; } /// /// Internal method to show a message and start the hide coroutine. /// private void ShowMessage(string message, float duration, Color fontColor) { messageText.text = message; messageText.color = fontColor; messageText.enabled = true; if (hideCoroutine != null) StopCoroutine(hideCoroutine); hideCoroutine = StartCoroutine(HideAfterSeconds(duration)); } /// /// Coroutine to hide the message after a delay. /// private IEnumerator HideAfterSeconds(float seconds) { yield return new WaitForSeconds(seconds); messageText.text = ""; messageText.enabled = false; } }