161 lines
4.8 KiB
Markdown
161 lines
4.8 KiB
Markdown
# Quick Fix Guide for "Failed to Connect to Server"
|
|
|
|
## Your Issue: Teammate sees "CONNECTED" but can't join
|
|
|
|
This is likely a **Firewall** issue even with port forwarding.
|
|
|
|
## Immediate Actions (Try in Order)
|
|
|
|
### 1. Disable Windows Firewall Temporarily (Test Only)
|
|
```
|
|
Windows Security → Firewall & network protection → Private network → Microsoft Defender Firewall: OFF
|
|
Public network → Microsoft Defender Firewall: OFF
|
|
```
|
|
Then test connection. If it works, re-enable and create specific rule for Unity.
|
|
|
|
### 2. Add Unity Exclusion to Firewall
|
|
Run these commands as Administrator in PowerShell/CMD:
|
|
|
|
```
|
|
# Allow Unity Editor
|
|
netsh advfirewall firewall add rule name="Unity Editor" dir=in action=allow program="%ProgramFiles%\Unity\Hub\Editor\*\Unity.exe" enable=yes
|
|
|
|
# Allow your built executable (replace path)
|
|
netsh advfirewall firewall add rule name="Northbound Game" dir=in action=allow program="D:\Northbound\Build\Northbound.exe" enable=yes profile=any
|
|
|
|
# Allow port 7777
|
|
netsh advfirewall firewall add rule name="Unity Port 7777" dir=in action=allow protocol=TCP localport=7777 enable=yes profile=any
|
|
```
|
|
|
|
### 3. Verify Port Forwarding is Working
|
|
Go to: https://www.yougetsignal.com/tools/open-ports/
|
|
- Enter your PUBLIC IP (what you give to teammate)
|
|
- Enter port 7777
|
|
- Click "Check Port"
|
|
|
|
**Expected:** "Port 7777 is open on [YOUR PUBLIC IP]"
|
|
**If closed:** Port forwarding is incorrect
|
|
|
|
### 4. Add Debug Scripts to Scene
|
|
Add these components to your NetworkManager GameObject:
|
|
1. **ConnectionDiagnostics** - Checks for configuration issues
|
|
2. **NetworkDebugger** - Shows detailed connection logs
|
|
3. **NetworkConnectionFixer** - Fixes common timeout issues
|
|
|
|
Right-click each and select "Run Diagnostics" or "Fix All Known Issues"
|
|
|
|
## What to Check in Console
|
|
|
|
### Host Should See:
|
|
```
|
|
✓ [NetworkConnectionFixer] Network fixes applied
|
|
✓ [ConnectionDiagnostics] System Healthy
|
|
✓ [NetworkDebugger] Server Started Successfully
|
|
✓ [NetworkDebugger] Listening on: 0.0.0.0:7777
|
|
✓ [NetworkDebugger] Client Connected: [ID]
|
|
✓ [ConnectionHandler] 클라이언트 [ID] 승인됨. 수동 스폰으로 대기.
|
|
```
|
|
|
|
### Client Should See:
|
|
```
|
|
✓ [NetworkConnectionFixer] Network fixes applied
|
|
✓ [ConnectionDiagnostics] System Healthy
|
|
✓ [NetworkDebugger] Connection Approval Request from Client [ID]
|
|
✓ [NetworkDebugger] Approval Response: Approved: true
|
|
```
|
|
|
|
## If Still Not Working
|
|
|
|
### Check These Settings:
|
|
|
|
**On NetworkManager GameObject:**
|
|
- [ ] Player Prefab assigned
|
|
- [ ] Network Prefabs list populated
|
|
- [ ] Transport component = Unity Transport (UTP)
|
|
|
|
**On Unity Transport Component:**
|
|
- [ ] ConnectionData.Port = 7777 (or your port)
|
|
- [ ] ConnectionData.Address = **0.0.0.0** for Host
|
|
- [ ] Connect Timeout MS = 15000
|
|
- [ ] Max Connect Attempts = 10
|
|
|
|
**In NetworkManager Inspector (Network Config):**
|
|
- [ ] Connection Approval = **checked**
|
|
- [ ] Enable Scene Management = **checked**
|
|
|
|
## Common Mistakes
|
|
|
|
❌ Using 127.0.0.1 or 192.168.x.x for teammate
|
|
✓ Use your PUBLIC IP for teammate
|
|
|
|
❌ Firewall blocking Unity
|
|
✓ Add exception for Unity and your game
|
|
|
|
❌ Port not actually forwarded
|
|
✓ Verify with online port checker
|
|
|
|
❌ Wrong transport address on host
|
|
✓ Host should use 0.0.0.0, client uses YOUR public IP
|
|
|
|
❌ Player prefab missing NetworkObject
|
|
✓ Ensure player prefab has NetworkObject component
|
|
|
|
## Quick Test Sequence
|
|
|
|
1. **Test Local:**
|
|
- Start Host (connect to 127.0.0.1 from same instance)
|
|
- If this fails: Project setup issue
|
|
|
|
2. **Test LAN:**
|
|
- Use 192.168.x.x (local network IP)
|
|
- If this fails: Network/Firewall issue
|
|
|
|
3. **Test Internet:**
|
|
- Use public IP
|
|
- If this fails: Port forwarding issue
|
|
|
|
## Console Commands for Diagnostics
|
|
|
|
Add this to a MonoBehaviour:
|
|
```csharp
|
|
[ContextMenu("Check Everything")]
|
|
void CheckEverything()
|
|
{
|
|
Debug.Log("IsServer: " + NetworkManager.Singleton.IsServer);
|
|
Debug.Log("IsClient: " + NetworkManager.Singleton.IsClient);
|
|
Debug.Log("ConnectedClients: " + NetworkManager.Singleton.ConnectedClients.Count);
|
|
Debug.Log("Local IP: " + NetworkUtility.GetLocalIPv4());
|
|
}
|
|
```
|
|
|
|
## Last Resort Solutions
|
|
|
|
1. **Use VPN/Hamachi**
|
|
- Creates virtual LAN between you and teammate
|
|
- No port forwarding needed
|
|
- Both connect to VPN IP
|
|
|
|
2. **Use Unity Relay**
|
|
- Built into Unity Netcode
|
|
- Bypasses NAT/Firewall completely
|
|
- Requires Unity Services account
|
|
|
|
3. **Host on Cloud Server**
|
|
- AWS/Azure/Google Cloud
|
|
- Static IP, no port forwarding
|
|
- More reliable
|
|
|
|
## Share These for Help
|
|
|
|
If still broken, share:
|
|
1. Full Console log (Host and Client)
|
|
2. Screenshot: NetworkManager inspector
|
|
3. Screenshot: Unity Transport settings
|
|
4. Port checker result screenshot
|
|
5. Windows Firewall rules screenshot
|
|
|
|
---
|
|
|
|
**Most likely issue:** Windows Firewall is blocking even with port forwarding.
|
|
**Fix:** Run firewall commands in step 2.
|