using UnityEngine;
using UnityEngine.UI;
namespace Mirror.Examples.Basic
{
public class PlayerUI : MonoBehaviour
{
[Header("Player Components")]
public Image image;
[Header("Child Text Objects")]
public Text playerNameText;
public Text playerDataText;
Player player;
///
/// Caches the controlling Player object, subscribes to its events
///
/// Player object that controls this UI
/// true if the Player object is the Local Player
public void SetPlayer(Player player, bool isLocalPlayer)
{
// cache reference to the player that controls this UI object
this.player = player;
// subscribe to the events raised by SyncVar Hooks on the Player object
player.OnPlayerNumberChanged += OnPlayerNumberChanged;
player.OnPlayerColorChanged += OnPlayerColorChanged;
player.OnPlayerDataChanged += OnPlayerDataChanged;
// add a visual background for the local player in the UI
if (isLocalPlayer)
image.color = new Color(1f, 1f, 1f, 0.1f);
}
void OnDisable()
{
player.OnPlayerNumberChanged -= OnPlayerNumberChanged;
player.OnPlayerColorChanged -= OnPlayerColorChanged;
player.OnPlayerDataChanged -= OnPlayerDataChanged;
}
// This value can change as clients leave and join
void OnPlayerNumberChanged(int newPlayerNumber)
{
playerNameText.text = string.Format("Player {0:00}", newPlayerNumber);
}
// Random color set by Player::OnStartServer
void OnPlayerColorChanged(Color32 newPlayerColor)
{
playerNameText.color = newPlayerColor;
}
// This updates from Player::UpdateData via InvokeRepeating on server
void OnPlayerDataChanged(int newPlayerData)
{
// Show the data in the UI
playerDataText.text = string.Format("Data: {0:000}", newPlayerData);
}
}
}