160 lines
5.7 KiB
C#
160 lines
5.7 KiB
C#
using UnityEngine;
|
|
using Unity.Netcode;
|
|
using Unity.Netcode.Transports.UTP;
|
|
|
|
namespace Northbound
|
|
{
|
|
/// <summary>
|
|
/// Fixes common network connection issues with Unity Netcode
|
|
/// </summary>
|
|
public class NetworkConnectionFixer : MonoBehaviour
|
|
{
|
|
[Header("Auto-Fix Settings")]
|
|
[SerializeField] private bool autoFixOnStart = true;
|
|
[SerializeField] private bool ensureTransportSettings = true;
|
|
[SerializeField] private bool increaseTimeouts = true;
|
|
|
|
private NetworkManager _networkManager;
|
|
private UnityTransport _transport;
|
|
|
|
private void Awake()
|
|
{
|
|
_networkManager = NetworkManager.Singleton;
|
|
if (_networkManager == null)
|
|
{
|
|
Debug.LogError("[NetworkConnectionFixer] NetworkManager not found!");
|
|
return;
|
|
}
|
|
|
|
_transport = _networkManager.GetComponent<UnityTransport>();
|
|
if (_transport == null)
|
|
{
|
|
Debug.LogError("[NetworkConnectionFixer] UnityTransport not found!");
|
|
return;
|
|
}
|
|
|
|
if (autoFixOnStart)
|
|
{
|
|
FixNetworkSettings();
|
|
}
|
|
}
|
|
|
|
public void FixNetworkSettings()
|
|
{
|
|
Debug.Log("[NetworkConnectionFixer] Applying network fixes...");
|
|
|
|
if (ensureTransportSettings)
|
|
{
|
|
FixTransportSettings();
|
|
}
|
|
|
|
if (increaseTimeouts)
|
|
{
|
|
IncreaseTimeouts();
|
|
}
|
|
|
|
Debug.Log("[NetworkConnectionFixer] Network fixes applied successfully!");
|
|
}
|
|
|
|
private void FixTransportSettings()
|
|
{
|
|
Debug.Log("[NetworkConnectionFixer] Fixing transport settings...");
|
|
|
|
if (_transport == null) return;
|
|
|
|
ushort port = _transport.ConnectionData.Port;
|
|
string address = _transport.ConnectionData.Address;
|
|
|
|
Debug.Log($"Current Port: {port}");
|
|
Debug.Log($"Current Address: {address}");
|
|
|
|
if (port <= 0)
|
|
{
|
|
Debug.LogWarning("[NetworkConnectionFixer] Invalid port detected, setting to 7777");
|
|
_transport.SetConnectionData("0.0.0.0", 7777);
|
|
}
|
|
}
|
|
|
|
private void IncreaseTimeouts()
|
|
{
|
|
Debug.Log("[NetworkConnectionFixer] Increasing network timeouts...");
|
|
|
|
if (_transport == null) return;
|
|
|
|
int currentTimeout = _transport.ConnectTimeoutMS;
|
|
Debug.Log($"Current Connect Timeout: {currentTimeout}ms");
|
|
|
|
if (currentTimeout < 10000)
|
|
{
|
|
_transport.ConnectTimeoutMS = 15000;
|
|
Debug.Log("[NetworkConnectionFixer] Increased Connect Timeout to 15000ms (15 seconds)");
|
|
}
|
|
|
|
int maxAttempts = _transport.MaxConnectAttempts;
|
|
Debug.Log($"Current Max Connect Attempts: {maxAttempts}");
|
|
|
|
if (maxAttempts < 10)
|
|
{
|
|
_transport.MaxConnectAttempts = 10;
|
|
Debug.Log("[NetworkConnectionFixer] Increased Max Connect Attempts to 10");
|
|
}
|
|
}
|
|
|
|
public void SetServerAddress(string ipAddress, ushort port)
|
|
{
|
|
if (_transport == null) return;
|
|
|
|
Debug.Log($"[NetworkConnectionFixer] Setting server address to {ipAddress}:{port}");
|
|
_transport.SetConnectionData(ipAddress, port);
|
|
}
|
|
|
|
public void SetListenAddress(string listenAddress, ushort port)
|
|
{
|
|
if (_transport == null) return;
|
|
|
|
Debug.Log($"[NetworkConnectionFixer] Setting listen address to {listenAddress}:{port}");
|
|
_transport.SetConnectionData("0.0.0.0", port, listenAddress);
|
|
}
|
|
|
|
[ContextMenu("Log Current Transport Settings")]
|
|
public void LogTransportSettings()
|
|
{
|
|
if (_transport == null) return;
|
|
|
|
Debug.Log("=== CURRENT TRANSPORT SETTINGS ===");
|
|
Debug.Log("Connection Data:");
|
|
Debug.Log(" Address: " + _transport.ConnectionData.Address);
|
|
Debug.Log(" Port: " + _transport.ConnectionData.Port);
|
|
Debug.Log(" Server Listen Address: " + _transport.ConnectionData.ServerListenAddress);
|
|
Debug.Log("Timeouts:");
|
|
Debug.Log(" Connect Timeout (ms): " + _transport.ConnectTimeoutMS);
|
|
Debug.Log(" Max Connect Attempts: " + _transport.MaxConnectAttempts);
|
|
Debug.Log("Other:");
|
|
Debug.Log(" Max Packet Queue Size: " + _transport.MaxPacketQueueSize);
|
|
Debug.Log("===================================");
|
|
}
|
|
|
|
[ContextMenu("Fix All Known Issues")]
|
|
public void FixAllKnownIssues()
|
|
{
|
|
Debug.Log("[NetworkConnectionFixer] Fixing all known issues...");
|
|
|
|
FixNetworkSettings();
|
|
LogTransportSettings();
|
|
|
|
Debug.Log("[NetworkConnectionFixer] All fixes applied!");
|
|
}
|
|
|
|
[ContextMenu("Test Connection Setup")]
|
|
public void TestConnectionSetup()
|
|
{
|
|
Debug.Log("=== CONNECTION SETUP TEST ===");
|
|
Debug.Log("NetworkManager: " + (_networkManager != null ? "Found" : "NOT FOUND"));
|
|
Debug.Log("UnityTransport: " + (_transport != null ? "Found" : "NOT FOUND"));
|
|
Debug.Log("Player Prefab: " + (_networkManager?.NetworkConfig?.PlayerPrefab != null ? "Found" : "NOT FOUND"));
|
|
Debug.Log("Connection Approval: " + (_networkManager?.NetworkConfig?.ConnectionApproval ?? false));
|
|
Debug.Log("=============================");
|
|
}
|
|
}
|
|
}
|