Motores e casos especiais
O plicflix abre a versão web do seu jogo. O que muda de um motor para
outro é só como o jogo fala com o SDK do navegador (window.Plicflix). A
troca do token no servidor (SDK) é
igual para todos.
| o seu jogo | o caminho |
|---|---|
| JavaScript/TypeScript (Phaser, PixiJS, Three.js, Babylon.js, Construct, PlayCanvas, puro…) | chame Plicflix.* direto — SDK |
| Unity WebGL | Unity |
| Godot 4 (Web) | Godot |
| Flutter web | Flutter web |
| outro motor que exporta para a web e fala com JavaScript (Defold, GameMaker HTML5, Bevy/wasm, Emscripten…) | chame as funções do window.Plicflix pela ponte JS do motor, ou fale o protocolo de mensagens |
| sem servidor (só arquivos estáticos) | Jogo sem servidor |
| só app nativo (Android, iOS, PC), sem versão web | Ainda não |
Antes de tudo: exporte sem threads
Unity com "Multithreading" e Godot com "Thread Support" precisam de
SharedArrayBuffer, que exige os cabeçalhos COOP/COEP — e eles não
funcionam com o jogo dentro de um iframe de outro site (o app do plicflix).
Exporte sem threads:
- Unity: Player Settings → WebGL → Publishing Settings → Enable Multithreading desligado (é o padrão).
- Godot 4.3+: Exportar → Web → Thread Support desligado. (Godot 4.0–4.2 sempre usa threads na web: use 4.3 ou mais novo.)
Recarregar a página
Depois da primeira entrada, o token já foi usado: se o jogador recarregar a
página, entrar falha. Nesse caso, use a sessão que o seu servidor já
abriu (o cookie): peça ao seu servidor "quem sou eu" (ex.: GET /api/eu) e
siga. Só mostre erro se não houver sessão. Os exemplos abaixo mostram onde.
Unity WebGL
Arquivos prontos:
Plicflix.jslib→Assets/Plugins/WebGL/Plicflix.jslibPlicflix.cs→Assets/Plicflix/Plicflix.cs
Passos:
- No seu template WebGL (
Assets/WebGLTemplates/<seu>/index.html), antes do loader do Unity:<script src="plicflix.js"></script>, e copie oplicflix.jspara a pasta do template. - Na primeira cena, crie um GameObject chamado
Plicflixe adicione o componentePlicflix. - No seu código:
void Start() {
if (!Plicflix.I.Dentro) { /* aberto fora do plicflix: o seu login de sempre */ return; }
Plicflix.I.Progresso(20, "Entrando…");
Plicflix.I.AoEntrou += json => { // a resposta do SEU servidor
// JsonUtility.FromJson<MinhaResposta>(json) …
Plicflix.I.Pronto();
};
Plicflix.I.AoFalhou += erro => StartCoroutine(UsarSessaoOuErro()); // recarregou? a sessão já existe
Plicflix.I.AoSairDoJogo += terminou => { SalvarProgresso(); terminou(); };
Plicflix.I.AoPedirIrPara += destinoJson => { /* leve o jogador */ Plicflix.I.FoiPara(true); };
Plicflix.I.Entrar("/api/plicflix/entrar"); // o seu servidor troca o token
}
IEnumerator UsarSessaoOuErro() {
using var r = UnityEngine.Networking.UnityWebRequest.Get("/api/eu"); // o cookie vai junto
yield return r.SendWebRequest();
if (r.result == UnityEngine.Networking.UnityWebRequest.Result.Success) Plicflix.I.Pronto();
else Plicflix.I.Erro("Não foi possível entrar. Abra o jogo de novo pelo plicflix.");
}
// a cada troca de cena:
Plicflix.I.Onde("{\"texto\":\"Floresta\",\"area\":\"mundo/floresta\"}");
No Editor (fora da web), todas as chamadas são ignoradas e Dentro é
false: o jogo roda normal.
O servidor: o jogo Unity é servido pelo seu servidor web; a rota
/api/plicflix/entrar e os cabeçalhos (frame-ancestors, cookie) são os do
SDK. Sem servidor próprio, use
Plicflix.I.Jogador() (veja abaixo).
Godot 4 (Web)
Arquivo pronto: plicflix.gd.
- Projeto → Exportar → Web → Head Include:
<script src="plicflix.js"></script>, e copie oplicflix.jspara a pasta exportada. - Projeto → Configurações do projeto → Autoload: adicione o
plicflix.gdcom o nomePlicflix. - No seu jogo:
func _ready():
if not Plicflix.dentro():
return # fora do plicflix
Plicflix.progresso(20, "Entrando…")
Plicflix.ao_sair = func(): salvar_progresso()
Plicflix.ao_ir_para = func(destino): return levar_ate(destino) # true/false
var r = await Plicflix.entrar("/api/plicflix/entrar") # {} se falhou
if r.is_empty():
# recarregou a página? a sessão (cookie) já existe: pergunte ao seu servidor
# (ex.: HTTPRequest em /api/eu); sem sessão, Plicflix.erro("…") e pare aqui
pass
Plicflix.pronto()
Plicflix.onde({"texto": "Floresta", "area": "mundo/floresta"})
Fora da web (OS.has_feature("web") falso), tudo é ignorado.
Flutter web
import 'dart:js_interop';
import 'dart:js_interop_unsafe';
final plicflix = globalContext['Plicflix'] as JSObject?;
bool get dentro => plicflix?.callMethod<JSBoolean>('dentro'.toJS).toDart ?? false;
void pronto() => plicflix?.callMethod('pronto'.toJS);
void onde(String texto) => plicflix?.callMethod('onde'.toJS, texto.toJS);
Future<void> entrar(String url) async =>
(plicflix!.callMethod<JSPromise>('entrar'.toJS, url.toJS)).toDart;
Carregue o plicflix.js no web/index.html, antes do flutter_bootstrap.js.
Jogo sem servidor
Se o seu jogo é só arquivos estáticos (sem um servidor seu para guardar a
chave), use Plicflix.jogador() no lugar do Plicflix.entrar:
if (Plicflix.dentro()) {
const { jogador } = await Plicflix.jogador(); // { id: "pf_…", nome: "Ana" }
carregarSave(localStorage.getItem("save:" + jogador.id));
Plicflix.aoSair(() => localStorage.setItem("save:" + jogador.id, gerarSave()));
Plicflix.pronto();
}
Como funciona: a página troca o token direto na API do plicflix
(POST https://api.plicflix.com/v1/ingresso/navegador), sem chave. Só vale se
o pedido vier da origem cadastrada do seu jogo. Recarregar a página devolve
o mesmo jogador (fica guardado na aba).
O limite: tudo o que roda no navegador pode ser forjado por quem sabe mexer. Serve para mostrar o nome e guardar progresso local. Não use para moedas, ranking, compras ou qualquer coisa de valor — para isso, um servidor com a troca normal.
O resto da integração (frame-ancestors, pronto, aoSair, onde) é igual.
Hospedagens estáticas: o cabeçalho vai num arquivo de configuração —
Netlify/Cloudflare Pages: _headers com
/* → Content-Security-Policy: frame-ancestors 'self' https://plicflix.com;
Vercel: headers no vercel.json. (GitHub Pages não deixa mudar cabeçalhos:
não serve.)
Jogos só nativos
Hoje o plicflix abre jogos pela web (no app do celular, por uma WebView). Um
jogo que só existe como app Android/iOS ou executável de PC ainda não
consegue entrar. Se o seu motor exporta para a web (Unity, Godot, Defold,
GameMaker…), exporte e siga esta página. Jogo em nuvem (streaming de vídeo do
jogo rodando num servidor) está nos planos; fale com suporte@plicflix.com se
for o seu caso.
