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#

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);
}
}
}