Setting name and color on client is handled by server and updated to clients
This commit is contained in:
parent
a34545ae26
commit
3324cf1f98
|
@ -0,0 +1,6 @@
|
|||
using UnityEngine;
|
||||
|
||||
public static class ColorManipulation
|
||||
{
|
||||
public static Color GetRandomColor() => new(Random.value, Random.value, Random.value);
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 200a2e870f62694458ff9e42c9fa7ff5
|
||||
guid: 5c5b7d3af1f171c46b09250081a08927
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
|
@ -9,8 +9,8 @@ public class MyNetworkManager : NetworkManager
|
|||
|
||||
MyNetworkPlayer player = conn.identity.GetComponent<MyNetworkPlayer>();
|
||||
player.SetDisplayName($"Player {numPlayers.ToString()}");
|
||||
player.SetPlayerColor(GetRandomColor());
|
||||
player.SetPlayerColor(ColorManipulation.GetRandomColor());
|
||||
}
|
||||
|
||||
private static Color GetRandomColor() => new(Random.value, Random.value, Random.value);
|
||||
|
||||
}
|
|
@ -1,4 +1,3 @@
|
|||
using System;
|
||||
using Mirror;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
|
@ -7,6 +6,7 @@ public class MyNetworkPlayer : NetworkBehaviour
|
|||
{
|
||||
[Header("Connections")]
|
||||
[SerializeField] private TMP_Text _playerNameObject;
|
||||
|
||||
[Header("Variables")]
|
||||
[SyncVar(hook = nameof(SetPlayerNameTagText))]
|
||||
[SerializeField]
|
||||
|
@ -16,6 +16,8 @@ public class MyNetworkPlayer : NetworkBehaviour
|
|||
[SerializeField]
|
||||
private Color _playerColor = Color.black;
|
||||
|
||||
#region Server
|
||||
|
||||
[Server]
|
||||
public void SetDisplayName(string newDisplayName)
|
||||
{
|
||||
|
@ -28,6 +30,43 @@ public class MyNetworkPlayer : NetworkBehaviour
|
|||
_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)
|
||||
|
@ -43,4 +82,18 @@ public class MyNetworkPlayer : NetworkBehaviour
|
|||
_playerNameObject.color = newColor;
|
||||
}
|
||||
}
|
||||
|
||||
[ContextMenu("SetName")]
|
||||
private void SetMyName()
|
||||
{
|
||||
CmdSetDisplayName("New Name");
|
||||
}
|
||||
|
||||
[ContextMenu("NewColor")]
|
||||
private void SetNewColor()
|
||||
{
|
||||
CmdSetNewColor();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
using Mirror;
|
||||
using UnityEngine;
|
||||
|
||||
public class MyNetworkPlayer1 : NetworkBehaviour
|
||||
{
|
||||
[SyncVar]
|
||||
[SerializeField]
|
||||
private Transform _transform;
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue