You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.6 KiB
C#
78 lines
2.6 KiB
C#
using System;
|
|
using TMPro;
|
|
using Unity.Multiplayer.Tools.NetworkSimulator.Runtime;
|
|
using UnityEngine;
|
|
using Unity.Netcode;
|
|
using Unity.Netcode.Transports.UTP;
|
|
using UnityEngine.Assertions;
|
|
|
|
|
|
namespace Unity.BossRoom.Utils.Editor
|
|
{
|
|
public class NetworkLatencyWarning : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
NetworkSimulator m_NetworkSimulator;
|
|
|
|
TextMeshProUGUI m_LatencyText;
|
|
bool m_LatencyTextCreated;
|
|
|
|
Color m_TextColor = Color.red;
|
|
|
|
bool m_ArtificialLatencyEnabled;
|
|
|
|
void Update()
|
|
{
|
|
if (NetworkManager.Singleton != null && (NetworkManager.Singleton.IsClient || NetworkManager.Singleton.IsServer))
|
|
{
|
|
var unityTransport = (UnityTransport)NetworkManager.Singleton.NetworkConfig.NetworkTransport;
|
|
|
|
// adding this preprocessor directive check since UnityTransport's simulator tools only inject latency in #UNITY_EDITOR or in #DEVELOPMENT_BUILD
|
|
#if UNITY_EDITOR || DEVELOPMENT_BUILD
|
|
var currentSimulationPreset = m_NetworkSimulator.CurrentPreset;
|
|
m_ArtificialLatencyEnabled = currentSimulationPreset.PacketDelayMs > 0 ||
|
|
currentSimulationPreset.PacketJitterMs > 0 ||
|
|
currentSimulationPreset.PacketLossInterval > 0 ||
|
|
currentSimulationPreset.PacketLossPercent > 0;
|
|
#else
|
|
m_ArtificialLatencyEnabled = false;
|
|
#endif
|
|
|
|
if (m_ArtificialLatencyEnabled)
|
|
{
|
|
if (!m_LatencyTextCreated)
|
|
{
|
|
m_LatencyTextCreated = true;
|
|
CreateLatencyText();
|
|
}
|
|
|
|
m_TextColor.a = Mathf.PingPong(Time.time, 1f);
|
|
m_LatencyText.color = m_TextColor;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_ArtificialLatencyEnabled = false;
|
|
}
|
|
|
|
if (!m_ArtificialLatencyEnabled)
|
|
{
|
|
if (m_LatencyTextCreated)
|
|
{
|
|
m_LatencyTextCreated = false;
|
|
Destroy(m_LatencyText);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Creating a UI text object and add it to NetworkOverlay canvas
|
|
void CreateLatencyText()
|
|
{
|
|
Assert.IsNotNull(NetworkOverlay.Instance,
|
|
"No NetworkOverlay object part of scene. Add NetworkOverlay prefab to bootstrap scene!");
|
|
|
|
NetworkOverlay.Instance.AddTextToUI("UI Latency Warning Text", "Network Latency Enabled", out m_LatencyText);
|
|
}
|
|
}
|
|
}
|