Unity (WebGL)
El paquete de Unity com.gamealia.sdk es un plugin .jslib más un wrapper en C# sobre el SDK de JavaScript. Unity 2021.3 o más nuevo, con target WebGL.
Instalación
La forma fácil: corré gamealia init --write en la carpeta del proyecto de Unity (o pedíselo a tu asistente, que usa gamealia_integrate_sdk). Agrega:
- el paquete en
Packages/com.gamealia.sdk/(Runtime:Gamealia.cs,Gamealia.jslib); - la plantilla WebGL
Assets/WebGLTemplates/Gamealia/, que carga el SDK antes del loader de Unity.
Después elegí la plantilla en Player Settings → WebGL → Resolution and Presentation → WebGL Template → Gamealia.
¿Usás tu propia plantilla? Agregá esto en su <head>, antes del script del loader de Unity:
<script src="https://gamealia.app/sdk/v1.js"></script>
Compilá para WebGL y subí la carpeta del build (la que tiene index.html y Build/). Si tu build usa hilos (SharedArrayBuffer), poné el aislamiento de la ficha en coop-coep.
Uso
void Start()
{
Gamealia.OnAdStart += () => Time.timeScale = 0f; // el audio se silencia solo (AutoMuteAudio)
Gamealia.OnAdEnd += () => Time.timeScale = 1f;
Gamealia.OnPause += () => Time.timeScale = 0f;
Gamealia.OnResume += () => Time.timeScale = 1f;
Gamealia.Init(info =>
{
// info.locale: "es", "en", ...; info.environment: "gamealia" | "preview" | "autotest" | "mock"
Gamealia.Data.Load(r =>
{
if (r.ok) Gamealia.Data.Get<SaveData>("save", s => { if (s != null) save = s; Ready(); });
else Ready(); // no se pudo leer la partida: usá los valores por defecto y no la pises
});
});
}
void Ready()
{
Gamealia.Game.LoadingStop(); // obligatorio, cuando el juego ya se puede jugar
}
public void StartLevel() => Gamealia.Game.GameplayStart();
public void GameOver()
{
Gamealia.Game.GameplayStop();
Gamealia.Ad.RequestMidgame(shown => ShowGameOverScreen());
}
public void WatchAdForLife()
{
Gamealia.Ad.RequestRewarded((shown, rewarded) => { if (rewarded) lives++; });
}
El ejemplo del paquete (Package Manager → Gamealia SDK → Samples → Basic) tiene un script completo.
API
Cada callback corre en el hilo principal, de forma asíncrona, y nunca lanza excepciones. Si algo falla, devuelve los mismos valores por defecto que el SDK de JavaScript.
| C# | JavaScript |
|---|---|
Gamealia.Init(Action<InitResult>), Gamealia.Info, IsInitialized, Locale, Environment, IsMobile | init() |
Gamealia.IsAvailable | la página cargó el SDK (false en el Editor) |
Gamealia.Game.LoadingStart(), LoadingStop(), GameplayStart(), GameplayStop(), HappyTime() | game.* |
Gamealia.Ad.RequestMidgame(Action<bool> shown) | ad.requestMidgame() |
Gamealia.Ad.RequestRewarded(Action<bool, bool> (shown, rewarded)) | ad.requestRewarded() |
Gamealia.User.Get(Action<PublicUser>), GetToken(Action<string>), RequestLogin(Action<PublicUser>) | user.* |
Gamealia.Data.Load(Action<LoadResult>) (ok, json, error) | data.load() |
Gamealia.Data.Get<T> / Set<T> (tipos de JsonUtility), GetJson / SetJson, GetString / SetString, GetInt / SetInt, GetFloat / SetFloat, GetBool / SetBool, Remove, Clear | data.get/set/remove/clear() |
Gamealia.Room.GetJoinCode() (sincrónica), InviteLink(code, Action<string>), ShowInvite(code), Publish(RoomInfo), Unpublish() | room.* |
Gamealia.Presence.SetStatus(text) | presence.setStatus() |
eventos OnAdStart, OnAdEnd, OnPause, OnResume, OnMute, OnUnmute, OnUserChange, OnRoomJoin | on(event) |
- Audio: con
Gamealia.AutoMuteAudio(por defectotrue) se activaAudioListener.pausemientras se muestra un anuncio. - Partidas: 1 MB por jugador y juego. Los callbacks de
Set*recibenfalsesi no se guardó. - Idioma:
Gamealia.Localees el idioma del jugador; antes de que termineInites el del sistema.
En el Editor
En el Editor, en otras plataformas y en una página WebGL sin el SDK (por ejemplo sin conexión), todas las llamadas funcionan en local: Init responde con environment: "mock", los anuncios responden "no se mostró" y los datos quedan en PlayerPrefs. Compilá y corré gamealia preview para ver el flujo real con anuncios simulados.
Cómo funciona
Gamealia.jslib llama a window.Gamealia y responde con SendMessage("GamealiaBridge", "OnResult", json); los eventos llegan por SendMessage("GamealiaBridge", "OnEvent", json). El GameObject GamealiaBridge se crea solo y sobrevive a los cambios de escena: no lo renombres ni lo destruyas.
Fallas comunes del autotest
sdk_loaded: el build no usa la plantilla de Gamealia (o la tuya no tiene la etiqueta de script).loading_stop:Gamealia.Game.LoadingStop()no se llama dentro de los 15 s; llamalo apenas la primera escena se puede jugar, no después de una descarga larga.engine_integrity: subí la carpeta completa del build; tienen que estar los archivos.loader.js,.framework.js,.datay.wasm.