SlideShare uma empresa Scribd logo
Introdução à HLAPI (High Level API)
Prof. Fernando Vieira da Silva, MSc.
HLAPI – O que é?
● Sistema para desenvolver capacidade multiplayer em jogos no
Unity
● Funciona SOBRE a LLAPI
● Trata muitas tarefas comuns no desenvolvimento multiplayer
Arquitetura
● Segue o modelo Cliente-Servidor, com SERVIDOR
AUTORITÁRIO
● Um participante pode ser cliente e servidor ao mesmo tempo
(não é necessário servidor dedicado)
Server e Host
● Jogo tem 1 servidor e muitos clientes
● Quando não há servidor dedicado o Host faz o papel de cliente
e servidor no mesmo processo
● Host usa um cliente LocalClient para ser comunicar com o
servidor, enquanto os demais usam um RemoteClient
Jogadores, Jogadores Locais e Autoridades
● Há um objeto associado a cada jogador
● Comandos são enviados aos jogadores (ex: disparar tiro)
● Somente é possível enviar comandos ao seu próprio jogador
(jogador local)
Objetos Não-Jogadores
● Autoridade de Objetos Não-Jogadores (como inimigos) fica com
o servidor
● PS: A partir do Unity 5.2é possível um cliente obter autoridade
de um objeto não-jogador, mas é não é um processo trivial...
NetworkManager
● É o principal componente que controla as funcionalidades de
rede
NetworkManagerHUD
● Interface para escolher abrir o jogo como servidor ou cliente
NetworkIdentity
● Identifica o objeto na rede – Faz com que seu objeto seja
conhecido pelo sistema de Networking da HLAPI
● Componente precisa ser adicionado ao GameObject
NetworkTransform
● Sincroniza a posição do GameObject (posição, rotação e
escala) com todos os demais clientes e o servidor na rede
● Componente precisa ser adicionado ao GameObject
Spawning
● Pode-se controlar os objetos que são feitos spawn diretamente
no NetworkManager através do campos “Player prefab” e
“Spawn Info”.
● Esses objetos serão criados nos clientes e gerenciados pelo
sistema de spawning da HLAPI
Sincronização de Estados: SyncVars
class Player : NetworkBehaviour
{
[SyncVar]
int health;
public void TakeDamage(int amount)
{
if (!isServer)
return;
health -= amount;
}
}
● Variáveis que são sincronizadas do servidor para os clientes
● Quando um objeto é spawned ou um novo jogador entra, os
estados mais atualizados das SyncVars são visíveis.
Jogadores e Comandos
● Jogador no cliente envia comando para o jogador no servidor
● Servidor chama funções nos clientes via RPC (Remote
Procedure Calls)
Exemplo Comando
class Player : NetworkBehaviour
{
public GameObject bulletPrefab;
[Command]
void CmdDoFire(float lifeTime)
{
GameObject bullet = (GameObject)Instantiate(
bulletPrefab,
transform.position + transform.right,
Quaternion.identity);
var bullet2D = bullet.GetComponent<Rigidbody2D>();
bullet2D.velocity = transform.right * bulletSpeed;
Destroy(bullet, lifeTime);
NetworkServer.Spawn(bullet);
}
void Update()
{
if (!isLocalPlayer)
return;
if (Input.GetKeyDown(KeyCode.Space))
{
CmdDoFire(3.0f);
}
}
}
Exemplo RPC
class Player : NetworkBehaviour
{
[SyncVar]
int health;
[ClientRpc]
void RpcDamage(int amount)
{
Debug.Log("Took damage:" + amount);
}
public void TakeDamage(int amount)
{
if (!isServer)
return;
health -= amount;
RpcDamage(amount);
}
}
Fim!

Mais conteúdo relacionado

Semelhante a Introdução à Unity High Level API (HLAPI)

03 arquitetura-cliente-servidor
03   arquitetura-cliente-servidor03   arquitetura-cliente-servidor
03 arquitetura-cliente-servidor
Concurseira Le
 
Aula S.O.R. - Visao Geral.pptx
Aula S.O.R. - Visao Geral.pptxAula S.O.R. - Visao Geral.pptx
Aula S.O.R. - Visao Geral.pptx
Cidrone
 
Trabalhando com eventos e serviços no Zend Framework 2
Trabalhando com eventos e serviços no Zend Framework 2Trabalhando com eventos e serviços no Zend Framework 2
Trabalhando com eventos e serviços no Zend Framework 2
William Felipe
 
Alta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores LinuxAlta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores Linuxelliando dias
 
oVirt - gerenciamento de máquinas virtuais com código aberto
oVirt - gerenciamento de máquinas virtuais com código abertooVirt - gerenciamento de máquinas virtuais com código aberto
oVirt - gerenciamento de máquinas virtuais com código aberto
ehabkost
 
Introdução a plataforma de aplicativos Redu
Introdução a plataforma de aplicativos ReduIntrodução a plataforma de aplicativos Redu
Introdução a plataforma de aplicativos Redu
Guilherme
 
Aulas Google Android
Aulas Google AndroidAulas Google Android
Aulas Google Android
Iury Teixeira
 
Tratamento de latência em jogos Multi-jogadores
Tratamento de latência em jogos Multi-jogadoresTratamento de latência em jogos Multi-jogadores
Tratamento de latência em jogos Multi-jogadores
Fernando Vieira da Silva
 
Igor Oliveira - Puppet
Igor Oliveira - PuppetIgor Oliveira - Puppet
Igor Oliveira - Puppet
PotiLivre Sobrenome
 
Tech Talk AWS lambda
Tech Talk  AWS lambdaTech Talk  AWS lambda
Tech Talk AWS lambda
Guilherme Santos
 
Linux Kernel Input: mouse, teclado, joystick
Linux Kernel Input: mouse, teclado, joystickLinux Kernel Input: mouse, teclado, joystick
Linux Kernel Input: mouse, teclado, joystick
Marcos Paulo de Souza
 
[Grupo 2] Apresentação II
[Grupo 2] Apresentação II[Grupo 2] Apresentação II
[Grupo 2] Apresentação II
Priscilla Vasconcelos
 
Codelab - Actions on Google
Codelab - Actions on GoogleCodelab - Actions on Google
Codelab - Actions on Google
Alvaro Viebrantz
 
REST - The right way
REST - The right wayREST - The right way
REST - The right waysantosluis87
 
VDI e Projeto OSDVT
VDI e Projeto OSDVTVDI e Projeto OSDVT
VDI e Projeto OSDVTapsegundo
 
Datacenter na nuvem
Datacenter na nuvemDatacenter na nuvem
Datacenter na nuvem
Ignacio Nin
 
Aplicações web parte 1
Aplicações web parte 1Aplicações web parte 1
Aplicações web parte 1
Elaine Cecília Gatto
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
tdc-globalcode
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
tdc-globalcode
 

Semelhante a Introdução à Unity High Level API (HLAPI) (20)

03 arquitetura-cliente-servidor
03   arquitetura-cliente-servidor03   arquitetura-cliente-servidor
03 arquitetura-cliente-servidor
 
Aula S.O.R. - Visao Geral.pptx
Aula S.O.R. - Visao Geral.pptxAula S.O.R. - Visao Geral.pptx
Aula S.O.R. - Visao Geral.pptx
 
Trabalhando com eventos e serviços no Zend Framework 2
Trabalhando com eventos e serviços no Zend Framework 2Trabalhando com eventos e serviços no Zend Framework 2
Trabalhando com eventos e serviços no Zend Framework 2
 
Alta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores LinuxAlta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores Linux
 
oVirt - gerenciamento de máquinas virtuais com código aberto
oVirt - gerenciamento de máquinas virtuais com código abertooVirt - gerenciamento de máquinas virtuais com código aberto
oVirt - gerenciamento de máquinas virtuais com código aberto
 
Introdução a plataforma de aplicativos Redu
Introdução a plataforma de aplicativos ReduIntrodução a plataforma de aplicativos Redu
Introdução a plataforma de aplicativos Redu
 
Aulas Google Android
Aulas Google AndroidAulas Google Android
Aulas Google Android
 
Tratamento de latência em jogos Multi-jogadores
Tratamento de latência em jogos Multi-jogadoresTratamento de latência em jogos Multi-jogadores
Tratamento de latência em jogos Multi-jogadores
 
Igor Oliveira - Puppet
Igor Oliveira - PuppetIgor Oliveira - Puppet
Igor Oliveira - Puppet
 
Tech Talk AWS lambda
Tech Talk  AWS lambdaTech Talk  AWS lambda
Tech Talk AWS lambda
 
Linux Kernel Input: mouse, teclado, joystick
Linux Kernel Input: mouse, teclado, joystickLinux Kernel Input: mouse, teclado, joystick
Linux Kernel Input: mouse, teclado, joystick
 
[Grupo 2] Apresentação II
[Grupo 2] Apresentação II[Grupo 2] Apresentação II
[Grupo 2] Apresentação II
 
Codelab - Actions on Google
Codelab - Actions on GoogleCodelab - Actions on Google
Codelab - Actions on Google
 
REST - The right way
REST - The right wayREST - The right way
REST - The right way
 
VDI e Projeto OSDVT
VDI e Projeto OSDVTVDI e Projeto OSDVT
VDI e Projeto OSDVT
 
Datacenter na nuvem
Datacenter na nuvemDatacenter na nuvem
Datacenter na nuvem
 
Presentation ii
Presentation iiPresentation ii
Presentation ii
 
Aplicações web parte 1
Aplicações web parte 1Aplicações web parte 1
Aplicações web parte 1
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
 

Mais de Fernando Vieira da Silva

Introdução a jogos Multi-jogadores
Introdução a jogos Multi-jogadoresIntrodução a jogos Multi-jogadores
Introdução a jogos Multi-jogadores
Fernando Vieira da Silva
 
Arquitetura de jogos multi-jogadores: Estudo de caso "Starsiege Tribes"
Arquitetura de jogos multi-jogadores: Estudo de caso "Starsiege Tribes"Arquitetura de jogos multi-jogadores: Estudo de caso "Starsiege Tribes"
Arquitetura de jogos multi-jogadores: Estudo de caso "Starsiege Tribes"
Fernando Vieira da Silva
 
Jogos Multi-jogadores: Revisão sobre Redes de computadores
Jogos Multi-jogadores: Revisão sobre Redes de computadoresJogos Multi-jogadores: Revisão sobre Redes de computadores
Jogos Multi-jogadores: Revisão sobre Redes de computadores
Fernando Vieira da Silva
 
Arquitetura de Jogos Multi-jogadores: Estudo de caso "Age of Empires"
Arquitetura de Jogos Multi-jogadores: Estudo de caso "Age of Empires"Arquitetura de Jogos Multi-jogadores: Estudo de caso "Age of Empires"
Arquitetura de Jogos Multi-jogadores: Estudo de caso "Age of Empires"
Fernando Vieira da Silva
 
Arquitetura ponto-a-ponto para jogos Multi-jogadores
Arquitetura ponto-a-ponto para jogos Multi-jogadoresArquitetura ponto-a-ponto para jogos Multi-jogadores
Arquitetura ponto-a-ponto para jogos Multi-jogadores
Fernando Vieira da Silva
 
Escalabilidade em Jogos Multi-jogadores
Escalabilidade em Jogos Multi-jogadoresEscalabilidade em Jogos Multi-jogadores
Escalabilidade em Jogos Multi-jogadores
Fernando Vieira da Silva
 
Problemas de Rede em Jogos Multi-jogadores
Problemas de Rede em Jogos Multi-jogadoresProblemas de Rede em Jogos Multi-jogadores
Problemas de Rede em Jogos Multi-jogadores
Fernando Vieira da Silva
 
Instruções para Anotações de Emoções em Tweets
Instruções para Anotações de Emoções em TweetsInstruções para Anotações de Emoções em Tweets
Instruções para Anotações de Emoções em Tweets
Fernando Vieira da Silva
 
Identifying Emotions in Tweets related to the Brazilian Stock Market
Identifying Emotions in Tweets related to the Brazilian Stock MarketIdentifying Emotions in Tweets related to the Brazilian Stock Market
Identifying Emotions in Tweets related to the Brazilian Stock Market
Fernando Vieira da Silva
 
Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...
Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...
Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...
Fernando Vieira da Silva
 
Palestra otimização em linguagem c - e-stude.com
Palestra otimização em linguagem c - e-stude.comPalestra otimização em linguagem c - e-stude.com
Palestra otimização em linguagem c - e-stude.com
Fernando Vieira da Silva
 

Mais de Fernando Vieira da Silva (11)

Introdução a jogos Multi-jogadores
Introdução a jogos Multi-jogadoresIntrodução a jogos Multi-jogadores
Introdução a jogos Multi-jogadores
 
Arquitetura de jogos multi-jogadores: Estudo de caso "Starsiege Tribes"
Arquitetura de jogos multi-jogadores: Estudo de caso "Starsiege Tribes"Arquitetura de jogos multi-jogadores: Estudo de caso "Starsiege Tribes"
Arquitetura de jogos multi-jogadores: Estudo de caso "Starsiege Tribes"
 
Jogos Multi-jogadores: Revisão sobre Redes de computadores
Jogos Multi-jogadores: Revisão sobre Redes de computadoresJogos Multi-jogadores: Revisão sobre Redes de computadores
Jogos Multi-jogadores: Revisão sobre Redes de computadores
 
Arquitetura de Jogos Multi-jogadores: Estudo de caso "Age of Empires"
Arquitetura de Jogos Multi-jogadores: Estudo de caso "Age of Empires"Arquitetura de Jogos Multi-jogadores: Estudo de caso "Age of Empires"
Arquitetura de Jogos Multi-jogadores: Estudo de caso "Age of Empires"
 
Arquitetura ponto-a-ponto para jogos Multi-jogadores
Arquitetura ponto-a-ponto para jogos Multi-jogadoresArquitetura ponto-a-ponto para jogos Multi-jogadores
Arquitetura ponto-a-ponto para jogos Multi-jogadores
 
Escalabilidade em Jogos Multi-jogadores
Escalabilidade em Jogos Multi-jogadoresEscalabilidade em Jogos Multi-jogadores
Escalabilidade em Jogos Multi-jogadores
 
Problemas de Rede em Jogos Multi-jogadores
Problemas de Rede em Jogos Multi-jogadoresProblemas de Rede em Jogos Multi-jogadores
Problemas de Rede em Jogos Multi-jogadores
 
Instruções para Anotações de Emoções em Tweets
Instruções para Anotações de Emoções em TweetsInstruções para Anotações de Emoções em Tweets
Instruções para Anotações de Emoções em Tweets
 
Identifying Emotions in Tweets related to the Brazilian Stock Market
Identifying Emotions in Tweets related to the Brazilian Stock MarketIdentifying Emotions in Tweets related to the Brazilian Stock Market
Identifying Emotions in Tweets related to the Brazilian Stock Market
 
Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...
Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...
Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...
 
Palestra otimização em linguagem c - e-stude.com
Palestra otimização em linguagem c - e-stude.comPalestra otimização em linguagem c - e-stude.com
Palestra otimização em linguagem c - e-stude.com
 

Introdução à Unity High Level API (HLAPI)

  • 1. Introdução à HLAPI (High Level API) Prof. Fernando Vieira da Silva, MSc.
  • 2. HLAPI – O que é? ● Sistema para desenvolver capacidade multiplayer em jogos no Unity ● Funciona SOBRE a LLAPI ● Trata muitas tarefas comuns no desenvolvimento multiplayer
  • 3. Arquitetura ● Segue o modelo Cliente-Servidor, com SERVIDOR AUTORITÁRIO ● Um participante pode ser cliente e servidor ao mesmo tempo (não é necessário servidor dedicado)
  • 4. Server e Host ● Jogo tem 1 servidor e muitos clientes ● Quando não há servidor dedicado o Host faz o papel de cliente e servidor no mesmo processo ● Host usa um cliente LocalClient para ser comunicar com o servidor, enquanto os demais usam um RemoteClient
  • 5. Jogadores, Jogadores Locais e Autoridades ● Há um objeto associado a cada jogador ● Comandos são enviados aos jogadores (ex: disparar tiro) ● Somente é possível enviar comandos ao seu próprio jogador (jogador local)
  • 6. Objetos Não-Jogadores ● Autoridade de Objetos Não-Jogadores (como inimigos) fica com o servidor ● PS: A partir do Unity 5.2é possível um cliente obter autoridade de um objeto não-jogador, mas é não é um processo trivial...
  • 7. NetworkManager ● É o principal componente que controla as funcionalidades de rede
  • 8. NetworkManagerHUD ● Interface para escolher abrir o jogo como servidor ou cliente
  • 9. NetworkIdentity ● Identifica o objeto na rede – Faz com que seu objeto seja conhecido pelo sistema de Networking da HLAPI ● Componente precisa ser adicionado ao GameObject
  • 10. NetworkTransform ● Sincroniza a posição do GameObject (posição, rotação e escala) com todos os demais clientes e o servidor na rede ● Componente precisa ser adicionado ao GameObject
  • 11. Spawning ● Pode-se controlar os objetos que são feitos spawn diretamente no NetworkManager através do campos “Player prefab” e “Spawn Info”. ● Esses objetos serão criados nos clientes e gerenciados pelo sistema de spawning da HLAPI
  • 12. Sincronização de Estados: SyncVars class Player : NetworkBehaviour { [SyncVar] int health; public void TakeDamage(int amount) { if (!isServer) return; health -= amount; } } ● Variáveis que são sincronizadas do servidor para os clientes ● Quando um objeto é spawned ou um novo jogador entra, os estados mais atualizados das SyncVars são visíveis.
  • 13. Jogadores e Comandos ● Jogador no cliente envia comando para o jogador no servidor ● Servidor chama funções nos clientes via RPC (Remote Procedure Calls)
  • 14. Exemplo Comando class Player : NetworkBehaviour { public GameObject bulletPrefab; [Command] void CmdDoFire(float lifeTime) { GameObject bullet = (GameObject)Instantiate( bulletPrefab, transform.position + transform.right, Quaternion.identity); var bullet2D = bullet.GetComponent<Rigidbody2D>(); bullet2D.velocity = transform.right * bulletSpeed; Destroy(bullet, lifeTime); NetworkServer.Spawn(bullet); } void Update() { if (!isLocalPlayer) return; if (Input.GetKeyDown(KeyCode.Space)) { CmdDoFire(3.0f); } } }
  • 15. Exemplo RPC class Player : NetworkBehaviour { [SyncVar] int health; [ClientRpc] void RpcDamage(int amount) { Debug.Log("Took damage:" + amount); } public void TakeDamage(int amount) { if (!isServer) return; health -= amount; RpcDamage(amount); } }
  • 16. Fim!