Pular para o conteúdo principal

RPC e lógica de jogo no servidor

Última atualização: 16 de julho de 2026

RPC no PlayServ é o mecanismo para rodar lógica de jogo no game server. O código de servidor é escrito dentro do codebase do cliente, marcado para descoberta, extraído pelo analisador de código durante a implantação e executado no runtime do servidor.


Quando usar RPC​

Use RPC quando você precisa que a lógica de gameplay execute no game server, para reduzir o risco de cheating e evitar expor cenários importantes na build do cliente.

informação

O PlayServ não depende de rodar um runtime completo de engine headless no servidor, como é comum em algumas arquiteturas tradicionais de multiplayer. Em vez disso, o PlayServ analisa o código do jogo, descobre o código de servidor e implanta no runtime do servidor apenas esse código.

A lógica de servidor é descrita em classes separadas do código de gameplay do cliente. Isso permite execução e depuração locais, mas exige vincular o código de servidor onde ele é usado.


Modelo de execução no servidor​

A lógica de servidor é escrita por desenvolvedores de cliente no codebase do cliente, mas precisa ser descrita explicitamente para que o analisador de código consiga detectá-la e enviá-la ao servidor durante a implantação.

Codebase do clientecliente + classes [Server]analisarAnalisador de códigodescobre o código [Server]empacotarBundle do servidorArchive.zipimplantarRuntime do servidorexecuta o RPCem runtime: PlayServ.Remote(Domain) o invoca

Um exemplo mínimo de classe de servidor:

[Server]
public class Domain
{
// May contain state
bool flag = true;

public void RollDice(int dice)
{
flag = dice % 2 > 0;

var player = PlayServ.GetPlayer("a123");
player.Name = "Vasya";
player.Update();
}

public string DoSomethingCool(int dice)
{
return flag ? "Ice!" : "Nice";
}
}

Chamando esse código de servidor a partir do código do cliente:

class CustomBehaviour : NetworkBehaviour
{
// Allows local debugging and remote execution
private Domain _domain = PlayServ.Remote(Domain);

public void Init(Vector3 velocity, PlayerRef owner)
{
_domain.RollDice(1);
_domain.DoSomethingCool(); // "Ice!"
}
}

Chamando o SDK a partir do código de servidor​

O código de servidor no PlayServ tem acesso ao SDK, o que permite implementar um game server completo.

O SDK usado para compilar o código de servidor inclui o mesmo protocolo de transporte que os módulos de serviço do SDK usam para trocar sinais entre si. Isso permite que o código de servidor atue como um cliente do SDK ao chamar outro código de servidor ou módulos de plataforma.

Diferente de um client de jogo comum, o código de servidor não precisa se conectar ao Proxy Module. Os sinais dele são roteados direto para o barramento e então entregues aos destinatários finais.


Chamadas servidor-a-servidor e empacotamento​

aviso

Se uma classe de servidor chama outra classe de servidor, as classes chamadas podem não ser incluídas no bundle do servidor (Archive.zip).

Por causa disso, o analisador do lado do servidor substitui essas referências por um stub voltado a RPC e gera uma classe proxy com stubs de método que fazem as invocações via RPC.

// Instead of:
private RPC_Domain _domain = PlayServ.Remote(RPC_Domain);

// Use:
PlayServ.Remote("Domain").Invoke("DoSomethingCool", params);

Classes de servidor estáticas​

Uma abordagem alternativa é usar classes de servidor static. Isso elimina a necessidade de inicializar domínios de servidor e permite que o analisador detecte chamadas a métodos [Server] e as substitua por chamadas RPC de forma mais confiável.


Próximos passos​