using Mirror; using TMPro; using UnityEngine; public class MyNetworkPlayer : NetworkBehaviour { [Header("Connections")] [SerializeField] private TMP_Text _playerNameObject; [Header("Variables")] [SyncVar(hook = nameof(SetPlayerNameTagText))] [SerializeField] private string _displayName = "Missing Name"; [SyncVar(hook = nameof(SetPlayerNameTagColor))] [SerializeField] private Color _playerColor = Color.black; #region Server [Server] public void SetDisplayName(string newDisplayName) { _displayName = newDisplayName; } [Server] public void SetPlayerColor(Color newPlayerColor) { _playerColor = newPlayerColor; } [Command] private void CmdSetDisplayName(string newDisplayName) { if (NameLengthIsCorrect(newDisplayName)) { RpcDebugLog($"Setting player names{newDisplayName}"); SetDisplayName(newDisplayName); } else { RpcDebugLog($"new name: {newDisplayName} : is too long"); } } [Command] private void CmdSetNewColor() { Color newColor = ColorManipulation.GetRandomColor(); RpcDebugLog($"Setting player color{newColor.ToString()}"); SetPlayerColor(newColor); } private bool NameLengthIsCorrect(string newDisplayName) { return newDisplayName.Length < 10; } [ClientRpc] private void RpcDebugLog(string message) { Debug.Log(message); } #endregion #region Client private void SetPlayerNameTagText(string oldText, string newText) { if (_playerNameObject != null) { _playerNameObject.text = newText; } } private void SetPlayerNameTagColor(Color oldColor, Color newColor) { if (_playerNameObject != null) { _playerNameObject.color = newColor; } } [ContextMenu("SetName")] private void SetMyName() { CmdSetDisplayName("New Name"); } [ContextMenu("NewColor")] private void SetNewColor() { CmdSetNewColor(); } #endregion }