using System.Collections.Generic; using TMPro; using UnityEngine; public class MessageBoxController : MonoBehaviour { public int maxMessageNum = 50; public string defaultColor = "white"; public GameObject messagePanelObj; public GameObject messageTextPrefab; [SerializeField] private List messages = new List(); public void PushMessage(string text) { // push simple message to message list MessageOverflowHandler(); Message newMessage = new Message(); newMessage.text = text; GameObject newText = Instantiate(messageTextPrefab, messagePanelObj.transform); newMessage.textObject = newText.GetComponent(); newMessage.textObject.text = newMessage.text; messages.Add(newMessage); } // push multi color message to message list public void PushMessage(List messageList,List colorList) { // check messages and colors list length match if (messageList.Count != colorList.Count) { // delete extra messages or add white color to extra messages if (messageList.Count > colorList.Count) { for (int i = 0; i < messageList.Count - colorList.Count; i++) { colorList.Add(defaultColor); } } else { colorList.RemoveRange(messageList.Count, colorList.Count - messageList.Count); } } MessageOverflowHandler(); Message newMessage = new Message(); newMessage.text = ""; // assemble message text with color for (int i = 0; i < messageList.Count; i++) { newMessage.text += "" + messageList[i] + ""; } GameObject newText = Instantiate(messageTextPrefab, messagePanelObj.transform); newMessage.textObject = newText.GetComponent(); newMessage.textObject.text = newMessage.text; messages.Add(newMessage); } [System.Serializable] public class Message { public string text; public TMPro.TextMeshProUGUI textObject; } private void MessageOverflowHandler() { // destroy the oldest message if message list is full if (messages.Count >= maxMessageNum) { Destroy(messages[0].textObject.gameObject); messages.RemoveAt(0); } } }