PlayerUI.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. namespace Mirror.Examples.Basic
  4. {
  5. public class PlayerUI : MonoBehaviour
  6. {
  7. [Header("Player Components")]
  8. public Image image;
  9. [Header("Child Text Objects")]
  10. public Text playerNameText;
  11. public Text playerDataText;
  12. Player player;
  13. /// <summary>
  14. /// Caches the controlling Player object, subscribes to its events
  15. /// </summary>
  16. /// <param name="player">Player object that controls this UI</param>
  17. /// <param name="isLocalPlayer">true if the Player object is the Local Player</param>
  18. public void SetPlayer(Player player, bool isLocalPlayer)
  19. {
  20. // cache reference to the player that controls this UI object
  21. this.player = player;
  22. // subscribe to the events raised by SyncVar Hooks on the Player object
  23. player.OnPlayerNumberChanged += OnPlayerNumberChanged;
  24. player.OnPlayerColorChanged += OnPlayerColorChanged;
  25. player.OnPlayerDataChanged += OnPlayerDataChanged;
  26. // add a visual background for the local player in the UI
  27. if (isLocalPlayer)
  28. image.color = new Color(1f, 1f, 1f, 0.1f);
  29. }
  30. void OnDisable()
  31. {
  32. player.OnPlayerNumberChanged -= OnPlayerNumberChanged;
  33. player.OnPlayerColorChanged -= OnPlayerColorChanged;
  34. player.OnPlayerDataChanged -= OnPlayerDataChanged;
  35. }
  36. // This value can change as clients leave and join
  37. void OnPlayerNumberChanged(int newPlayerNumber)
  38. {
  39. playerNameText.text = string.Format("Player {0:00}", newPlayerNumber);
  40. }
  41. // Random color set by Player::OnStartServer
  42. void OnPlayerColorChanged(Color32 newPlayerColor)
  43. {
  44. playerNameText.color = newPlayerColor;
  45. }
  46. // This updates from Player::UpdateData via InvokeRepeating on server
  47. void OnPlayerDataChanged(int newPlayerData)
  48. {
  49. // Show the data in the UI
  50. playerDataText.text = string.Format("Data: {0:000}", newPlayerData);
  51. }
  52. }
  53. }