using UnityEngine; using TMPro; using System.Collections; using Yarn.Unity; using AibisDream; public class MessageBox : MonoBehaviour { public static MessageBox Instance { get; private set; } public TMP_Text state; // 显示状态的TextMeshPro组件 public TMP_Text text; // 显示消息的TextMeshPro组件 private void Awake() { // 确保单例模式 if (Instance != null && Instance != this) { Destroy(gameObject); } else { Instance = this; //DontDestroyOnLoad(gameObject); // 可选:保持在场景加载之间 } } // Yarn Command处理方法 [YarnCommand("messagebox")] public void HandleMessageBoxCommand(string type, string message) { switch (type.ToLower()) { case "warning": SetWarning(message); break; case "normal": SetNormal(message); break; case "null": SetNull(); break; default: Debug.LogError("Invalid message type for messagebox command: " + type); break; } } private void Start() { SetNull(); } // 设置为Warning状态 private void SetWarning(string message) { state.text = "WARNING"; state.color = Color.red; // 红色 text.text = message; text.color = Color.white; // 默认文本颜色 StartCoroutine(FlashWarning()); // 开始闪烁效果 } // 设置为Normal状态 private void SetNormal(string message) { state.text = "NORMAL"; state.color = new Color(1.0f, 0.55f, 0.0f); // 琥珀色 text.text = message; text.color = Color.white; // 默认文本颜色 StopCoroutine(FlashWarning()); // 停止闪烁效果(如果正在闪烁) } // 设置为Null状态 private void SetNull() { state.text = "NO SIGNAL"; state.color = Color.blue; // 蓝色 text.text = string.Empty; text.color = Color.white; // 默认文本颜色 StopCoroutine(FlashWarning()); // 停止闪烁效果(如果正在闪烁) } // 闪烁警告效果 private IEnumerator FlashWarning() { AudioManager.SetinteractionSourceVolume(0.35f); AudioManager.RandomPlayInteraction("beep_warning"); for (int i = 0; i < 2; i++) { state.enabled = false; yield return new WaitForSeconds(0.3f); // 闪烁间隔 state.enabled = true; yield return new WaitForSeconds(0.3f); // 闪烁间隔 } AudioManager.SetinteractionSourceVolume(1f); state.enabled = true; // 确保闪烁后状态仍然可见 } }