1
Dapatkan App Key
Seperti Photon App ID — kamu terima satu key unik per game
Hubungi SDK owner (kamu beli / request key) atau buat sendiri via endpoint admin:
http
POST https://api.mabar.studio/apps/register
X-Master-Key: your-master-key
{
"name": "My Awesome Game",
"ownerEmail": "dev@example.com"
}Response kamu dapat:
json
{
"appKey": "mk_a1b2c3d4e5f6g7h8i9j0k1l2",
"name": "My Awesome Game",
"message": "AppKey created. Share this with the developer."
}Simpan AppKey ini. Ini satu-satunya credential yang kamu butuhkan — tidak ada Firebase, tidak ada service account, tidak ada private key.
2
Install Unity SDK
Via UPM — satu URL, langsung masuk ke project
A
Via Git URL (Recommended)
- 1Open Package Manager (Window → Package Manager)
- 2Klik + → "Add package from git URL"
- 3Paste URL di bawah
- 4Klik Add
git url
https://github.com/AzhariMabar/mabar-multiplayer-unity-sdk.gitB
From Disk
- 1Clone repo unity-sdk
- 2+ → "Add package from disk"
- 3Select
package.json - 4Open
3
Set App Key di Inspector
Ini satu-satunya config yang kamu butuhkan
- 1Buka Setup Wizard:
Mabar Multiplayer → Setup Wizard - 2Buat Settings Asset (atau pilih yang sudah ada)
- 3Di tab "Set App Key", paste App Key yang kamu dapat di Step 1
- 4Done — tidak ada config Firebase, tidak ada env vars di Unity
| Field di Inspector | Value |
|---|---|
| App Key | mk_a1b2c3... (dari Step 1) |
| API URL | https://api.mabar.studio (default) |
Itu saja — dua field. Tidak ada Firebase, tidak ada WebSocket URL, tidak ada private key di Unity.
4
Tulis Kode Multiplayer
Assign settings asset, Initialize, connect — selesai
Buat script baru, assign MabarSettings ke field Settings:
csharp
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using Mabar.Multiplayer.Core;
using Mabar.Multiplayer.Models;
public class GameManager : MonoBehaviour
{
public MultiplayerSettings Settings; // assign di Inspector
private string roomId;
private async void Start()
{
Multiplayer.Initialize(Settings);
// Login — dapat playerId + token (otomatis disimpan SDK)
var auth = await Multiplayer.LoginGuest();
Debug.Log($"Logged in as {auth.PlayerId}");
// Buat room (atau JoinRoom jika sudah punya roomId)
var room = await Multiplayer.CreateRoom("Chess Match", maxPlayers: 2);
roomId = room.Id;
Debug.Log($"Room: {roomId} | Giliran: {room.CurrentTurn}");
// Mulai polling giliran lawan
StartCoroutine(PollRoom());
}
// Submit giliran kamu
public async void OnMyTurn(string move)
{
var state = new Dictionary<string, object> { { "lastMove", move } };
var room = await Multiplayer.SubmitTurn(roomId, state);
Debug.Log($"Turn submitted. Sekarang giliran: {room.CurrentTurn}");
}
// Poll state tiap 2 detik — cukup untuk turn-based
private IEnumerator PollRoom()
{
while (true)
{
yield return new WaitForSeconds(2f);
var task = Multiplayer.GetRoom(roomId);
yield return new WaitUntil(() => task.IsCompleted);
var room = task.Result;
if (room.CurrentTurn == Multiplayer.PlayerId)
Debug.Log("Giliran kamu!");
}
}
}