fishnet installed
This commit is contained in:
248
Assets/FishNet/Example/Scripts/NetworkHudCanvases.cs
Normal file
248
Assets/FishNet/Example/Scripts/NetworkHudCanvases.cs
Normal file
@ -0,0 +1,248 @@
|
||||
using FishNet.Managing;
|
||||
using FishNet.Transporting;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class NetworkHudCanvases : MonoBehaviour
|
||||
{
|
||||
#region Types.
|
||||
/// <summary>
|
||||
/// Ways the HUD will automatically start a connection.
|
||||
/// </summary>
|
||||
private enum AutoStartType
|
||||
{
|
||||
Disabled,
|
||||
Host,
|
||||
Server,
|
||||
Client
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Serialized.
|
||||
/// <summary>
|
||||
/// What connections to automatically start on play.
|
||||
/// </summary>
|
||||
[Tooltip("What connections to automatically start on play.")]
|
||||
[SerializeField]
|
||||
private AutoStartType _autoStartType = AutoStartType.Disabled;
|
||||
/// <summary>
|
||||
/// Color when socket is stopped.
|
||||
/// </summary>
|
||||
[Tooltip("Color when socket is stopped.")]
|
||||
[SerializeField]
|
||||
private Color _stoppedColor;
|
||||
/// <summary>
|
||||
/// Color when socket is changing.
|
||||
/// </summary>
|
||||
[Tooltip("Color when socket is changing.")]
|
||||
[SerializeField]
|
||||
private Color _changingColor;
|
||||
/// <summary>
|
||||
/// Color when socket is started.
|
||||
/// </summary>
|
||||
[Tooltip("Color when socket is started.")]
|
||||
[SerializeField]
|
||||
private Color _startedColor;
|
||||
[Header("Indicators")]
|
||||
/// <summary>
|
||||
/// Indicator for server state.
|
||||
/// </summary>
|
||||
[Tooltip("Indicator for server state.")]
|
||||
[SerializeField]
|
||||
private Image _serverIndicator;
|
||||
/// <summary>
|
||||
/// Indicator for client state.
|
||||
/// </summary>
|
||||
[Tooltip("Indicator for client state.")]
|
||||
[SerializeField]
|
||||
private Image _clientIndicator;
|
||||
#endregion
|
||||
|
||||
#region Private.
|
||||
/// <summary>
|
||||
/// Found NetworkManager.
|
||||
/// </summary>
|
||||
private NetworkManager _networkManager;
|
||||
/// <summary>
|
||||
/// Current state of client socket.
|
||||
/// </summary>
|
||||
private LocalConnectionState _clientState = LocalConnectionState.Stopped;
|
||||
/// <summary>
|
||||
/// Current state of server socket.
|
||||
/// </summary>
|
||||
private LocalConnectionState _serverState = LocalConnectionState.Stopped;
|
||||
#if !ENABLE_INPUT_SYSTEM
|
||||
/// <summary>
|
||||
/// EventSystem for the project.
|
||||
/// </summary>
|
||||
private EventSystem _eventSystem;
|
||||
#endif
|
||||
#endregion
|
||||
|
||||
void OnGUI()
|
||||
{
|
||||
#if ENABLE_INPUT_SYSTEM
|
||||
string GetNextStateText(LocalConnectionState state)
|
||||
{
|
||||
if (state == LocalConnectionState.Stopped)
|
||||
return "Start";
|
||||
else if (state == LocalConnectionState.Starting)
|
||||
return "Starting";
|
||||
else if (state == LocalConnectionState.Stopping)
|
||||
return "Stopping";
|
||||
else if (state == LocalConnectionState.Started)
|
||||
return "Stop";
|
||||
else
|
||||
return "Invalid";
|
||||
}
|
||||
|
||||
GUILayout.BeginArea(new Rect(16, 16, 256, 9000));
|
||||
Vector2 defaultResolution = new Vector2(1920f, 1080f);
|
||||
GUI.matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(Screen.width / defaultResolution.x, Screen.height / defaultResolution.y, 1));
|
||||
|
||||
GUIStyle style = GUI.skin.GetStyle("button");
|
||||
int originalFontSize = style.fontSize;
|
||||
|
||||
Vector2 buttonSize = new Vector2(256f, 64f);
|
||||
style.fontSize = 28;
|
||||
//Server button.
|
||||
if (Application.platform != RuntimePlatform.WebGLPlayer)
|
||||
{
|
||||
if (GUILayout.Button($"{GetNextStateText(_serverState)} Server", GUILayout.Width(buttonSize.x), GUILayout.Height(buttonSize.y)))
|
||||
OnClick_Server();
|
||||
GUILayout.Space(10f);
|
||||
}
|
||||
|
||||
//Client button.
|
||||
if (GUILayout.Button($"{GetNextStateText(_clientState)} Client", GUILayout.Width(buttonSize.x), GUILayout.Height(buttonSize.y)))
|
||||
OnClick_Client();
|
||||
|
||||
style.fontSize = originalFontSize;
|
||||
|
||||
GUILayout.EndArea();
|
||||
#endif
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
#if !ENABLE_INPUT_SYSTEM
|
||||
SetEventSystem();
|
||||
BaseInputModule inputModule = FindObjectOfType<BaseInputModule>();
|
||||
if (inputModule == null)
|
||||
gameObject.AddComponent<StandaloneInputModule>();
|
||||
#else
|
||||
_serverIndicator.transform.parent.gameObject.SetActive(false);
|
||||
_clientIndicator.transform.parent.gameObject.SetActive(false);
|
||||
#endif
|
||||
|
||||
_networkManager = FindObjectOfType<NetworkManager>();
|
||||
if (_networkManager == null)
|
||||
{
|
||||
Debug.LogError("NetworkManager not found, HUD will not function.");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateColor(LocalConnectionState.Stopped, ref _serverIndicator);
|
||||
UpdateColor(LocalConnectionState.Stopped, ref _clientIndicator);
|
||||
_networkManager.ServerManager.OnServerConnectionState += ServerManager_OnServerConnectionState;
|
||||
_networkManager.ClientManager.OnClientConnectionState += ClientManager_OnClientConnectionState;
|
||||
}
|
||||
|
||||
if (_autoStartType == AutoStartType.Host || _autoStartType == AutoStartType.Server)
|
||||
OnClick_Server();
|
||||
if (!Application.isBatchMode && (_autoStartType == AutoStartType.Host || _autoStartType == AutoStartType.Client))
|
||||
OnClick_Client();
|
||||
}
|
||||
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (_networkManager == null)
|
||||
return;
|
||||
|
||||
_networkManager.ServerManager.OnServerConnectionState -= ServerManager_OnServerConnectionState;
|
||||
_networkManager.ClientManager.OnClientConnectionState -= ClientManager_OnClientConnectionState;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Updates img color baased on state.
|
||||
/// </summary>
|
||||
/// <param name="state"></param>
|
||||
/// <param name="img"></param>
|
||||
private void UpdateColor(LocalConnectionState state, ref Image img)
|
||||
{
|
||||
Color c;
|
||||
if (state == LocalConnectionState.Started)
|
||||
c = _startedColor;
|
||||
else if (state == LocalConnectionState.Stopped)
|
||||
c = _stoppedColor;
|
||||
else
|
||||
c = _changingColor;
|
||||
|
||||
img.color = c;
|
||||
}
|
||||
|
||||
|
||||
private void ClientManager_OnClientConnectionState(ClientConnectionStateArgs obj)
|
||||
{
|
||||
_clientState = obj.ConnectionState;
|
||||
UpdateColor(obj.ConnectionState, ref _clientIndicator);
|
||||
}
|
||||
|
||||
|
||||
private void ServerManager_OnServerConnectionState(ServerConnectionStateArgs obj)
|
||||
{
|
||||
_serverState = obj.ConnectionState;
|
||||
UpdateColor(obj.ConnectionState, ref _serverIndicator);
|
||||
}
|
||||
|
||||
|
||||
public void OnClick_Server()
|
||||
{
|
||||
if (_networkManager == null)
|
||||
return;
|
||||
|
||||
if (_serverState != LocalConnectionState.Stopped)
|
||||
_networkManager.ServerManager.StopConnection(true);
|
||||
else
|
||||
_networkManager.ServerManager.StartConnection();
|
||||
|
||||
DeselectButtons();
|
||||
}
|
||||
|
||||
|
||||
public void OnClick_Client()
|
||||
{
|
||||
if (_networkManager == null)
|
||||
return;
|
||||
|
||||
if (_clientState != LocalConnectionState.Stopped)
|
||||
_networkManager.ClientManager.StopConnection();
|
||||
else
|
||||
_networkManager.ClientManager.StartConnection();
|
||||
|
||||
DeselectButtons();
|
||||
}
|
||||
|
||||
|
||||
private void SetEventSystem()
|
||||
{
|
||||
#if !ENABLE_INPUT_SYSTEM
|
||||
if (_eventSystem != null)
|
||||
return;
|
||||
_eventSystem = FindObjectOfType<EventSystem>();
|
||||
if (_eventSystem == null)
|
||||
_eventSystem = gameObject.AddComponent<EventSystem>();
|
||||
#endif
|
||||
}
|
||||
|
||||
private void DeselectButtons()
|
||||
{
|
||||
#if !ENABLE_INPUT_SYSTEM
|
||||
SetEventSystem();
|
||||
_eventSystem?.SetSelectedGameObject(null);
|
||||
#endif
|
||||
}
|
||||
}
|
11
Assets/FishNet/Example/Scripts/NetworkHudCanvases.cs.meta
Normal file
11
Assets/FishNet/Example/Scripts/NetworkHudCanvases.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6d3606bfdac5a4743890fc1a5ecd8f24
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Reference in New Issue
Block a user