134 lines
3.8 KiB
Markdown
134 lines
3.8 KiB
Markdown
# WebRTC Multiplayer Setup
|
|
|
|
The game now supports WebRTC multiplayer for WebAssembly (browser) builds!
|
|
|
|
## How It Works
|
|
|
|
The `NetworkManager` automatically detects the platform:
|
|
- **Native builds** (Windows, Linux, Mac): Uses **ENet** (traditional UDP networking)
|
|
- **Web builds**: Uses **WebRTC** (peer-to-peer browser networking)
|
|
|
|
## Important Note About WebRTC
|
|
|
|
WebRTC requires a **signaling mechanism** to establish connections between peers. This is different from ENet which uses direct IP:port connections.
|
|
|
|
### Current Implementation Status
|
|
|
|
✅ **Done:**
|
|
- Auto-detection of web platform
|
|
- WebRTCMultiplayerPeer creation for host and client
|
|
- Basic connection setup
|
|
- **STUN server configured** (`stun:ruinborn.thefirstboss.com:3578`) for NAT traversal
|
|
|
|
⚠️ **Requires Additional Setup:**
|
|
- **Signaling server** to exchange connection info between peers
|
|
- Session Description Protocol (SDP) offer/answer exchange
|
|
- ICE candidate exchange
|
|
|
|
## Quick Setup Options
|
|
|
|
### Option 1: Use a Public Signaling Server (Easiest)
|
|
|
|
Use a service like:
|
|
- [peerjs-server](https://github.com/peers/peerjs-server)
|
|
- [Matchbox](https://github.com/johanhelsing/matchbox) (Godot-specific)
|
|
- Roll your own simple WebSocket server
|
|
|
|
### Option 2: Manual Connection (For Testing)
|
|
|
|
For local testing, you can manually exchange connection strings:
|
|
1. Host creates a game
|
|
2. Host copies their connection info
|
|
3. Joiner pastes host's connection info
|
|
4. Joiner generates their own connection info
|
|
5. Host pastes joiner's connection info
|
|
|
|
### Option 3: Implement Signaling Server (Recommended for Production)
|
|
|
|
Create a simple WebSocket signaling server that:
|
|
1. Maintains a list of active lobbies
|
|
2. Relays SDP offers/answers between peers
|
|
3. Relays ICE candidates between peers
|
|
|
|
## Example: Using Matchbox (Recommended)
|
|
|
|
Matchbox is a simple signaling server specifically for Godot WebRTC:
|
|
|
|
```bash
|
|
# Install matchbox server
|
|
cargo install matchbox_server
|
|
|
|
# Run the server
|
|
matchbox_server
|
|
```
|
|
|
|
Then update the code to connect to your matchbox server when in web mode.
|
|
|
|
## Testing WebRTC Locally
|
|
|
|
1. **Export for HTML5**:
|
|
- Project -> Export -> Add -> HTML5 (WebAssembly)
|
|
- Export the project
|
|
|
|
2. **Run a local web server**:
|
|
```bash
|
|
# Python 3
|
|
python -m http.server 8000
|
|
|
|
# Or use any web server
|
|
```
|
|
|
|
3. **Open in browsers**:
|
|
- Host: `http://localhost:8000`
|
|
- Client: `http://localhost:8000` (in another browser tab/window)
|
|
|
|
4. **Connect**:
|
|
- One browser hosts
|
|
- Other browser joins
|
|
- (Requires signaling server to be running)
|
|
|
|
## Alternative: WebSocket Multiplayer
|
|
|
|
If WebRTC setup is too complex, you can use WebSocketMultiplayerPeer instead:
|
|
|
|
```gdscript
|
|
# In network_manager.gd, replace WebRTCMultiplayerPeer with:
|
|
var peer = WebSocketMultiplayerPeer.new()
|
|
|
|
# For host:
|
|
peer.create_server(port)
|
|
|
|
# For client:
|
|
peer.create_client("ws://your-server:port")
|
|
```
|
|
|
|
WebSocket is simpler but requires a dedicated server (can't be P2P like WebRTC).
|
|
|
|
## Production Deployment
|
|
|
|
For production, you'll need:
|
|
1. A signaling server (for WebRTC) or game server (for WebSocket)
|
|
2. HTTPS hosting (required for WebRTC in browsers)
|
|
3. Proper CORS configuration
|
|
4. STUN/TURN servers for NAT traversal (optional but recommended)
|
|
|
|
## Current Status
|
|
|
|
The game will:
|
|
- ✅ Detect web platform automatically
|
|
- ✅ Create WebRTC peers
|
|
- ⚠️ Require signaling server setup to actually connect
|
|
|
|
**To complete the setup**, implement one of the options above based on your needs.
|
|
|
|
## Quick Recommendation
|
|
|
|
**For Testing**: Use Matchbox (Option 3)
|
|
**For Production**: Implement a proper signaling server with lobby/matchmaking
|
|
|
|
## Resources
|
|
|
|
- [Godot WebRTC Documentation](https://docs.godotengine.org/en/stable/tutorials/networking/webrtc.html)
|
|
- [Matchbox Server](https://github.com/johanhelsing/matchbox)
|
|
- [WebRTC for Godot Tutorial](https://docs.godotengine.org/en/stable/tutorials/networking/high_level_multiplayer.html#webrtc)
|