164 lines
5.0 KiB
Markdown
164 lines
5.0 KiB
Markdown
# Connection Failure Troubleshooting Guide
|
|
|
|
## Problem: "Failed to connect to server" error
|
|
|
|
### Quick Fixes to Try
|
|
|
|
1. **Add NetworkDebugger to scene**
|
|
- Add `NetworkDebugger` component to NetworkManager
|
|
- Check Console for detailed connection logs
|
|
- Look for:
|
|
- Connection approval status
|
|
- Transport binding errors
|
|
- Timeout messages
|
|
|
|
2. **Add NetworkConnectionFixer to scene**
|
|
- Add `NetworkConnectionFixer` component to NetworkManager
|
|
- Right-click component → "Fix All Known Issues"
|
|
- This auto-fixes common transport timeout issues
|
|
|
|
3. **Check Firewall (Most Likely Cause)**
|
|
Even with port forwarding, Windows Firewall may block connections:
|
|
|
|
**Windows:**
|
|
- Windows Security → Firewall & network protection → Allow an app through firewall
|
|
- Add Unity Editor AND your built executable
|
|
- Allow on both Private and Public networks
|
|
- Add exception for port 7777 (or your port)
|
|
|
|
**Command Line (Quick Fix):**
|
|
```
|
|
netsh advfirewall firewall add rule name="Unity Network" dir=in action=allow protocol=TCP localport=7777
|
|
```
|
|
|
|
4. **Verify Transport Settings**
|
|
In Play mode, on NetworkManager → UnityTransport:
|
|
- ConnectionData.Address should be `0.0.0.0` for Host/Server
|
|
- ConnectionData.Port should be 7777 (or your forwarded port)
|
|
- ServerListenAddress can be left default
|
|
|
|
5. **Test Port Forwarding**
|
|
- Use online tool: https://www.yougetsignal.com/tools/open-ports/
|
|
- Enter your public IP and port
|
|
- Should show "Open" (not "Closed" or "Timed out")
|
|
|
|
6. **Disable IPv6 (Temporary Fix)**
|
|
Some network configurations have IPv6 issues:
|
|
```
|
|
Control Panel → Network and Internet → Network Connections
|
|
→ Right-click adapter → Properties → Uncheck Internet Protocol Version 6
|
|
```
|
|
(Reboot required)
|
|
|
|
7. **Increase Network Timeouts**
|
|
- On UnityTransport component:
|
|
- Connect Timeout MS: 15000 (15 seconds)
|
|
- Max Connect Attempts: 10
|
|
|
|
## Debug Steps
|
|
|
|
### 1. Check Server Side
|
|
```
|
|
Add NetworkDebugger → Play → Start Host
|
|
Check Console for:
|
|
✓ "Server Started Successfully"
|
|
✓ "Listening on: 0.0.0.0:7777"
|
|
✗ Any binding errors
|
|
```
|
|
|
|
### 2. Check Client Side
|
|
```
|
|
Add NetworkDebugger → Play → Connect to PUBLIC IP
|
|
Check Console for:
|
|
✓ "Connection Approval Request from Client"
|
|
✓ "Approval Response: Approved: true"
|
|
✗ "TRANSPORT FAILURE"
|
|
✗ "Failed to connect to server"
|
|
```
|
|
|
|
### 3. Common Error Patterns
|
|
|
|
**Error: "Failed to connect to server" + "TRANSPORT FAILURE"**
|
|
- Cause: Firewall blocking
|
|
- Fix: Allow Unity through firewall, check port forwarding
|
|
|
|
**Error: Connection approval never happens**
|
|
- Cause: NetworkManager configuration issue
|
|
- Fix: Check NetworkConfig → Connection Approval = true
|
|
|
|
**Error: Client shows "Connected" but no player spawns**
|
|
- Cause: ConnectionApproval returning false or spawn point issues
|
|
- Fix: Check NetworkConnectionHandler logs
|
|
|
|
## Advanced Troubleshooting
|
|
|
|
### Log Network State
|
|
```csharp
|
|
// Add this component and right-click → "Log Current Network State"
|
|
public void CheckConnection()
|
|
{
|
|
Debug.Log("IsServer: " + NetworkManager.Singleton.IsServer);
|
|
Debug.Log("IsClient: " + NetworkManager.Singleton.IsClient);
|
|
Debug.Log("IsConnectedClient: " + NetworkManager.Singleton.IsConnectedClient);
|
|
}
|
|
```
|
|
|
|
### Test Local Connection First
|
|
1. Host: Connect to 127.0.0.1 (should always work)
|
|
2. If fails: Project setup issue, not network issue
|
|
3. If works: Network/Firewall issue with public IP
|
|
|
|
### Check NetworkManager Configuration
|
|
Ensure:
|
|
- Player Prefab assigned
|
|
- Network Prefabs list populated
|
|
- Connection Approval enabled
|
|
- Scene Management enabled (if using scenes)
|
|
- Transport is Unity Transport (UTP)
|
|
|
|
## Alternative Solutions
|
|
|
|
### Option 1: Use LAN instead of Internet
|
|
If possible, use VPN or Hamachi:
|
|
- Creates virtual LAN
|
|
- Both players appear on same network
|
|
- No port forwarding needed
|
|
|
|
### Option 2: Use Relay Service
|
|
Unity Relay bypasses NAT/Firewall:
|
|
- Requires Unity Services account
|
|
- Free tier available
|
|
- More reliable for internet play
|
|
|
|
### Option 3: Dedicated Server
|
|
- Host on cloud server (AWS, Azure, etc.)
|
|
- No port forwarding needed on client side
|
|
- Better performance and reliability
|
|
|
|
## Quick Checklist
|
|
|
|
- [ ] Port forwarded correctly (verify with online tool)
|
|
- [ ] Firewall allows Unity/Build executable
|
|
- [ ] Using public IP (not 127.0.0.1 or 192.168.x.x)
|
|
- [ ] Same Unity version and Netcode version on both sides
|
|
- [ ] Same port on both client and server
|
|
- [ ] NetworkManager has Player Prefab assigned
|
|
- [ ] Host started BEFORE client tries to connect
|
|
- [ ] No antivirus/security software blocking
|
|
- [ ] Both using Release builds (not Debug)
|
|
|
|
## When to Ask for Help
|
|
|
|
If you've tried:
|
|
1. All firewall fixes
|
|
2. Verified port forwarding with online tool
|
|
3. Tested local connection (127.0.0.1) works
|
|
4. Checked NetworkManager configuration
|
|
5. Added NetworkDebugger and NetworkConnectionFixer
|
|
|
|
Then share:
|
|
- Full Console logs from BOTH host and client
|
|
- NetworkManager inspector screenshot
|
|
- UnityTransport settings screenshot
|
|
- Port forwarding confirmation (screenshot or online tool result)
|