Updated Basic Example

This commit is contained in:
MrGadget1024 2021-11-29 07:51:32 -05:00
parent c1ae882d76
commit 990bda659e
7 changed files with 91 additions and 35 deletions

View File

@ -26,7 +26,7 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 897184729387425976}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 562, y: 368, z: 0}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
@ -46,7 +46,8 @@ MonoBehaviour:
m_EditorClassIdentifier:
sceneId: 0
serverOnly: 0
m_AssetId:
visible: 0
m_AssetId: dc2c4328591bef748abb8df795c17202
hasSpawned: 0
--- !u!114 &8550999602067651493
MonoBehaviour:

View File

@ -176,6 +176,8 @@ MonoBehaviour:
SendWindowSize: 4096
ReceiveWindowSize: 4096
NonAlloc: 0
ReliableMaxMessageSize: 4811624
UnreliableMaxMessageSize: 1199
debugLog: 0
statisticsGUI: 0
statisticsLog: 0
@ -192,7 +194,6 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
dontDestroyOnLoad: 0
PersistNetworkManagerToOfflineScene: 0
runInBackground: 1
autoStartServerBuild: 1
serverTickRate: 30
@ -207,8 +208,6 @@ MonoBehaviour:
autoCreatePlayer: 1
playerSpawnMethod: 1
spawnPrefabs: []
mainPanel: {fileID: 1712119861}
playersPanel: {fileID: 379082679}
--- !u!4 &249891957
Transform:
m_ObjectHideFlags: 0
@ -421,6 +420,7 @@ GameObject:
- component: {fileID: 533055204}
- component: {fileID: 533055203}
- component: {fileID: 533055202}
- component: {fileID: 533055201}
m_Layer: 5
m_Name: Canvas
m_TagString: Untagged
@ -428,6 +428,20 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &533055201
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 533055200}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 266fac335be17a243af86e88de84766d, type: 3}
m_Name:
m_EditorClassIdentifier:
mainPanel: {fileID: 1712119861}
playersPanel: {fileID: 379082679}
--- !u!114 &533055202
MonoBehaviour:
m_ObjectHideFlags: 0

View File

@ -10,14 +10,6 @@ namespace Mirror.Examples.Basic
[AddComponentMenu("")]
public class BasicNetManager : NetworkManager
{
[Header("Canvas UI")]
[Tooltip("Assign Main Panel so it can be turned on from Player:OnStartClient")]
public RectTransform mainPanel;
[Tooltip("Assign Players Panel for instantiating PlayerUI as child")]
public RectTransform playersPanel;
/// <summary>
/// Called on the server when a client adds a new player with NetworkClient.AddPlayer.
/// <para>The default implementation for this function creates a new player object from the playerPrefab.</para>
@ -39,6 +31,5 @@ public override void OnServerDisconnect(NetworkConnection conn)
base.OnServerDisconnect(conn);
Player.ResetPlayerNumbers();
}
}
}

View File

@ -0,0 +1,18 @@
using UnityEngine;
public class CanvasUI : MonoBehaviour
{
[Tooltip("Assign Main Panel so it can be turned on from Player:OnStartClient")]
public RectTransform mainPanel;
[Tooltip("Assign Players Panel for instantiating PlayerUI as child")]
public RectTransform playersPanel;
// static instance that can be referenced directly from Player script
public static CanvasUI instance;
void Awake()
{
instance = this;
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 266fac335be17a243af86e88de84766d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -5,7 +5,7 @@ namespace Mirror.Examples.Basic
{
public class Player : NetworkBehaviour
{
// Events that the UI will subscribe to
// Events that the PlayerUI will subscribe to
public event System.Action<int> OnPlayerNumberChanged;
public event System.Action<Color32> OnPlayerColorChanged;
public event System.Action<int> OnPlayerDataChanged;
@ -13,17 +13,12 @@ public class Player : NetworkBehaviour
// Players List to manage playerNumber
static readonly List<Player> playersList = new List<Player>();
internal static void ResetPlayerNumbers()
{
int playerNumber = 0;
foreach (Player player in playersList)
player.playerNumber = playerNumber++;
}
[Header("Player UI")]
public GameObject playerUIPrefab;
GameObject playerUI;
#region SyncVars
[Header("SyncVars")]
/// <summary>
@ -62,6 +57,10 @@ void PlayerColorChanged(Color32 _, Color32 newPlayerColor)
OnPlayerColorChanged?.Invoke(newPlayerColor);
}
#endregion
#region Server
/// <summary>
/// This is invoked for NetworkBehaviour objects when they become active on the server.
/// <para>This could be triggered by NetworkServer.Listen() for objects in the scene, or by NetworkServer.Spawn() for objects that are dynamically created.</para>
@ -81,14 +80,14 @@ public override void OnStartServer()
InvokeRepeating(nameof(UpdateData), 1, 1);
}
/// <summary>
/// Invoked on the server when the object is unspawned
/// <para>Useful for saving object data in persistent storage</para>
/// </summary>
public override void OnStopServer()
// This is called from BasicNetManager OnServerAddPlayer and OnServerDisconnect
// Player numbers are reset whenever a player joins / leaves
[ServerCallback]
internal static void ResetPlayerNumbers()
{
CancelInvoke();
playersList.Remove(this);
int playerNumber = 0;
foreach (Player player in playersList)
player.playerNumber = playerNumber++;
}
// This only runs on the server, called from OnStartServer via InvokeRepeating
@ -98,17 +97,38 @@ void UpdateData()
playerData = Random.Range(100, 1000);
}
/// <summary>
/// Invoked on the server when the object is unspawned
/// <para>Useful for saving object data in persistent storage</para>
/// </summary>
public override void OnStopServer()
{
CancelInvoke();
playersList.Remove(this);
}
#endregion
#region Client
/// <summary>
/// Called when the local player object has been set up.
/// <para>This happens after OnStartClient(), as it is triggered by an ownership message from the server. This is an appropriate place to activate components or functionality that should only be active for the local player, such as cameras and input.</para>
/// </summary>
public override void OnStartLocalPlayer()
{
// Activate the main panel
CanvasUI.instance.mainPanel.gameObject.SetActive(true);
}
/// <summary>
/// Called on every NetworkBehaviour when it is activated on a client.
/// <para>Objects on the host have this function called, as there is a local client on the host. The values of SyncVars on object are guaranteed to be initialized correctly with the latest state from the server when this function is called on the client.</para>
/// </summary>
public override void OnStartClient()
{
// Activate the main panel
((BasicNetManager)NetworkManager.singleton).mainPanel.gameObject.SetActive(true);
// Instantiate the player UI as child of the Players Panel
playerUI = Instantiate(playerUIPrefab, ((BasicNetManager)NetworkManager.singleton).playersPanel);
playerUI = Instantiate(playerUIPrefab, CanvasUI.instance.playersPanel);
// Set this player object in PlayerUI to wire up event handlers
playerUI.GetComponent<PlayerUI>().SetPlayer(this, isLocalPlayer);
@ -130,7 +150,9 @@ public override void OnStopClient()
// Disable the main panel for local player
if (isLocalPlayer)
((BasicNetManager)NetworkManager.singleton).mainPanel.gameObject.SetActive(false);
CanvasUI.instance.mainPanel.gameObject.SetActive(false);
}
#endregion
}
}

View File

@ -59,6 +59,5 @@ void OnPlayerDataChanged(int newPlayerData)
// Show the data in the UI
playerDataText.text = string.Format("Data: {0:000}", newPlayerData);
}
}
}