Gonna move to server authority
This commit is contained in:
@@ -1,51 +1,51 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Mirror.Examples.Chat
|
||||
{
|
||||
[AddComponentMenu("")]
|
||||
public class ChatNetworkManager : NetworkManager
|
||||
{
|
||||
[Header("Chat GUI")]
|
||||
public ChatWindow chatWindow;
|
||||
|
||||
// Set by UI element UsernameInput OnValueChanged
|
||||
public string PlayerName { get; set; }
|
||||
|
||||
// Called by UI element NetworkAddressInput.OnValueChanged
|
||||
public void SetHostname(string hostname)
|
||||
{
|
||||
networkAddress = hostname;
|
||||
}
|
||||
|
||||
public struct CreatePlayerMessage : NetworkMessage
|
||||
{
|
||||
public string name;
|
||||
}
|
||||
|
||||
public override void OnStartServer()
|
||||
{
|
||||
base.OnStartServer();
|
||||
NetworkServer.RegisterHandler<CreatePlayerMessage>(OnCreatePlayer);
|
||||
}
|
||||
|
||||
public override void OnClientConnect(NetworkConnection conn)
|
||||
{
|
||||
base.OnClientConnect(conn);
|
||||
|
||||
// tell the server to create a player with this name
|
||||
conn.Send(new CreatePlayerMessage { name = PlayerName });
|
||||
}
|
||||
|
||||
void OnCreatePlayer(NetworkConnection connection, CreatePlayerMessage createPlayerMessage)
|
||||
{
|
||||
// create a gameobject using the name supplied by client
|
||||
GameObject playergo = Instantiate(playerPrefab);
|
||||
playergo.GetComponent<Player>().playerName = createPlayerMessage.name;
|
||||
|
||||
// set it as the player
|
||||
NetworkServer.AddPlayerForConnection(connection, playergo);
|
||||
|
||||
chatWindow.gameObject.SetActive(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
using UnityEngine;
|
||||
|
||||
namespace Mirror.Examples.Chat
|
||||
{
|
||||
[AddComponentMenu("")]
|
||||
public class ChatNetworkManager : NetworkManager
|
||||
{
|
||||
[Header("Chat GUI")]
|
||||
public ChatWindow chatWindow;
|
||||
|
||||
// Set by UI element UsernameInput OnValueChanged
|
||||
public string PlayerName { get; set; }
|
||||
|
||||
// Called by UI element NetworkAddressInput.OnValueChanged
|
||||
public void SetHostname(string hostname)
|
||||
{
|
||||
networkAddress = hostname;
|
||||
}
|
||||
|
||||
public struct CreatePlayerMessage : NetworkMessage
|
||||
{
|
||||
public string name;
|
||||
}
|
||||
|
||||
public override void OnStartServer()
|
||||
{
|
||||
base.OnStartServer();
|
||||
NetworkServer.RegisterHandler<CreatePlayerMessage>(OnCreatePlayer);
|
||||
}
|
||||
|
||||
public override void OnClientConnect(NetworkConnection conn)
|
||||
{
|
||||
base.OnClientConnect(conn);
|
||||
|
||||
// tell the server to create a player with this name
|
||||
conn.Send(new CreatePlayerMessage { name = PlayerName });
|
||||
}
|
||||
|
||||
void OnCreatePlayer(NetworkConnection connection, CreatePlayerMessage createPlayerMessage)
|
||||
{
|
||||
// create a gameobject using the name supplied by client
|
||||
GameObject playergo = Instantiate(playerPrefab);
|
||||
playergo.GetComponent<Player>().playerName = createPlayerMessage.name;
|
||||
|
||||
// set it as the player
|
||||
NetworkServer.AddPlayerForConnection(connection, playergo);
|
||||
|
||||
chatWindow.gameObject.SetActive(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d0cd72391a563461f88eb3ddf120efef
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
fileFormatVersion: 2
|
||||
guid: d0cd72391a563461f88eb3ddf120efef
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData: ''
|
||||
assetBundleName: ''
|
||||
assetBundleVariant: ''
|
||||
|
||||
@@ -1,60 +1,60 @@
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Mirror.Examples.Chat
|
||||
{
|
||||
public class ChatWindow : MonoBehaviour
|
||||
{
|
||||
public InputField chatMessage;
|
||||
public Text chatHistory;
|
||||
public Scrollbar scrollbar;
|
||||
|
||||
public void Awake()
|
||||
{
|
||||
Player.OnMessage += OnPlayerMessage;
|
||||
}
|
||||
|
||||
void OnPlayerMessage(Player player, string message)
|
||||
{
|
||||
string prettyMessage = player.isLocalPlayer ?
|
||||
$"<color=red>{player.playerName}: </color> {message}" :
|
||||
$"<color=blue>{player.playerName}: </color> {message}";
|
||||
AppendMessage(prettyMessage);
|
||||
|
||||
Debug.Log(message);
|
||||
}
|
||||
|
||||
// Called by UI element SendButton.OnClick
|
||||
public void OnSend()
|
||||
{
|
||||
if (chatMessage.text.Trim() == "")
|
||||
return;
|
||||
|
||||
// get our player
|
||||
Player player = NetworkClient.connection.identity.GetComponent<Player>();
|
||||
|
||||
// send a message
|
||||
player.CmdSend(chatMessage.text.Trim());
|
||||
|
||||
chatMessage.text = "";
|
||||
}
|
||||
|
||||
internal void AppendMessage(string message)
|
||||
{
|
||||
StartCoroutine(AppendAndScroll(message));
|
||||
}
|
||||
|
||||
IEnumerator AppendAndScroll(string message)
|
||||
{
|
||||
chatHistory.text += message + "\n";
|
||||
|
||||
// it takes 2 frames for the UI to update ?!?!
|
||||
yield return null;
|
||||
yield return null;
|
||||
|
||||
// slam the scrollbar down
|
||||
scrollbar.value = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Mirror.Examples.Chat
|
||||
{
|
||||
public class ChatWindow : MonoBehaviour
|
||||
{
|
||||
public InputField chatMessage;
|
||||
public Text chatHistory;
|
||||
public Scrollbar scrollbar;
|
||||
|
||||
public void Awake()
|
||||
{
|
||||
Player.OnMessage += OnPlayerMessage;
|
||||
}
|
||||
|
||||
void OnPlayerMessage(Player player, string message)
|
||||
{
|
||||
string prettyMessage = player.isLocalPlayer ?
|
||||
$"<color=red>{player.playerName}: </color> {message}" :
|
||||
$"<color=blue>{player.playerName}: </color> {message}";
|
||||
AppendMessage(prettyMessage);
|
||||
|
||||
Debug.Log(message);
|
||||
}
|
||||
|
||||
// Called by UI element SendButton.OnClick
|
||||
public void OnSend()
|
||||
{
|
||||
if (chatMessage.text.Trim() == "")
|
||||
return;
|
||||
|
||||
// get our player
|
||||
Player player = NetworkClient.connection.identity.GetComponent<Player>();
|
||||
|
||||
// send a message
|
||||
player.CmdSend(chatMessage.text.Trim());
|
||||
|
||||
chatMessage.text = "";
|
||||
}
|
||||
|
||||
internal void AppendMessage(string message)
|
||||
{
|
||||
StartCoroutine(AppendAndScroll(message));
|
||||
}
|
||||
|
||||
IEnumerator AppendAndScroll(string message)
|
||||
{
|
||||
chatHistory.text += message + "\n";
|
||||
|
||||
// it takes 2 frames for the UI to update ?!?!
|
||||
yield return null;
|
||||
yield return null;
|
||||
|
||||
// slam the scrollbar down
|
||||
scrollbar.value = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2c102f62d739545269250f48327d4429
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
fileFormatVersion: 2
|
||||
guid: 2c102f62d739545269250f48327d4429
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData: ''
|
||||
assetBundleName: ''
|
||||
assetBundleVariant: ''
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
using System;
|
||||
|
||||
namespace Mirror.Examples.Chat
|
||||
{
|
||||
public class Player : NetworkBehaviour
|
||||
{
|
||||
[SyncVar]
|
||||
public string playerName;
|
||||
|
||||
public static event Action<Player, string> OnMessage;
|
||||
|
||||
[Command]
|
||||
public void CmdSend(string message)
|
||||
{
|
||||
if (message.Trim() != "")
|
||||
RpcReceive(message.Trim());
|
||||
}
|
||||
|
||||
[ClientRpc]
|
||||
public void RpcReceive(string message)
|
||||
{
|
||||
OnMessage?.Invoke(this, message);
|
||||
}
|
||||
}
|
||||
}
|
||||
using System;
|
||||
|
||||
namespace Mirror.Examples.Chat
|
||||
{
|
||||
public class Player : NetworkBehaviour
|
||||
{
|
||||
[SyncVar]
|
||||
public string playerName;
|
||||
|
||||
public static event Action<Player, string> OnMessage;
|
||||
|
||||
[Command]
|
||||
public void CmdSend(string message)
|
||||
{
|
||||
if (message.Trim() != "")
|
||||
RpcReceive(message.Trim());
|
||||
}
|
||||
|
||||
[ClientRpc]
|
||||
public void RpcReceive(string message)
|
||||
{
|
||||
OnMessage?.Invoke(this, message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3addc5ad220944ed6888319897606739
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
fileFormatVersion: 2
|
||||
guid: 3addc5ad220944ed6888319897606739
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData: ''
|
||||
assetBundleName: ''
|
||||
assetBundleVariant: ''
|
||||
|
||||
Reference in New Issue
Block a user