Quando pensamos em criar um novo objeto dinamicamente por meio
do Unity, a funo Instantiate a primeira na qual pensamos. No entanto,
para um jogo multiplayer que faz uso do Unity Networking, atravs da API de Alto Nvel, instanciar um novo objeto significa que ele deve ser criado em todos os clientes conectados ao servidor e que este objeto estar sob a gerencia do sistema de spawn. Uma vez administrado por este sistema, atualizaes sobre o estado do objeto so enviadas aos clientes quando houver alteraes deste no servidor. Essencialmente isso significa que tudo gerido em alto nvel, sem a necessidade de codificao. Porm, para que tudo isto acontea alguns passos precisam ser observados. Primeiramente, o objeto precisa de um NetworkIdentity, que o responsvel por sincronizar variveis em rede, o transform e estado de movimentao no servidor e no (s) cliente (s). Desta maneira, os objetos sempre estaro atualizados quando forem criados.
Em segundo lugar, o objeto pr-fabricado precisa ser adicionado
lista de objetos do gerente de rede, tambm responsvel pelo sistema de spawn. Como alternativa a este segundo passo, h a funo ClienteScene.RegisterPrefab responsvel por atribuir um identificador nico ao prefab, visto que por meio deste valor que o cliente capaz de gerar o objeto.
Neste exemplo, o usurio iria arrastar um prefab para o alienPrefab
para que quando um objeto fosse gerado no servidor, o mesmo fosse criado nos clientes. O registro do objeto garante que ele esteja pronto quando houve a requisio. O terceiro passo o da codificao em si, pois nele que utilizamos a funo NetworkServer.Spawn, como demonstrado abaixo:
neste momento que a mgica acontece. Este exemplo, gera um
nmero randmico de folhas em uma rvore. Ele est associado a um prefab com NetworkIdentity e est registrado como um Spawnable Prefab, conforme ilustrao:
H ainda uma ltima observao: quando falamos sobre
NetworkIdentity e no buscamos criar dinamicamente um objeto que controlado por um jogador ou de serventia exclusiva para o servidor, como folhas de uma rvore ou os projetis das armas dos jogadores no preciso selecionar nenhuma opo disponvel no NetworkIdentity e so elas: Server Only, indicado para objetos especficos do servidor e Local Player Authority, indicado para objetos controlados clientes. Esta somente uma frao daquilo que se pode aprender para jogos multiplayer atravs da HLAPI e do Unity Networking, abaixo alguns links que serviram para esse texto e que podem ser teis para pesquisas futuras: https://docs.unity3d.com/Manual/UNetOverview.html https://docs.unity3d.com/Manual/UNetSpawning.html https://docs.unity3d.com/Manual/UNetConcepts.html