ChatWindow.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System.Collections;
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. namespace Mirror.Examples.Chat
  5. {
  6. public class ChatWindow : MonoBehaviour
  7. {
  8. public InputField chatMessage;
  9. public Text chatHistory;
  10. public Scrollbar scrollbar;
  11. public void Awake()
  12. {
  13. Player.OnMessage += OnPlayerMessage;
  14. }
  15. void OnPlayerMessage(Player player, string message)
  16. {
  17. string prettyMessage = player.isLocalPlayer ?
  18. $"<color=red>{player.playerName}: </color> {message}" :
  19. $"<color=blue>{player.playerName}: </color> {message}";
  20. AppendMessage(prettyMessage);
  21. Debug.Log(message);
  22. }
  23. // Called by UI element SendButton.OnClick
  24. public void OnSend()
  25. {
  26. if (chatMessage.text.Trim() == "")
  27. return;
  28. // get our player
  29. Player player = NetworkClient.connection.identity.GetComponent<Player>();
  30. // send a message
  31. player.CmdSend(chatMessage.text.Trim());
  32. chatMessage.text = "";
  33. }
  34. internal void AppendMessage(string message)
  35. {
  36. StartCoroutine(AppendAndScroll(message));
  37. }
  38. IEnumerator AppendAndScroll(string message)
  39. {
  40. chatHistory.text += message + "\n";
  41. // it takes 2 frames for the UI to update ?!?!
  42. yield return null;
  43. yield return null;
  44. // slam the scrollbar down
  45. scrollbar.value = 0;
  46. }
  47. }
  48. }