[TUTORIAL] Multiplayer global em múltiplos dispositivos
5 participantes
Página 1 de 1
[TUTORIAL] Multiplayer global em múltiplos dispositivos
implementado multiplayer global!!, jogue em vários pcs em qualquer lugar, usando o matchmaking da unity (grátuito)
CRÉDITOS PARA O VIDEO DO CANAL DO YOUTUBE " Brackeys" (video em inglês)
link do vídeo: https://www.youtube.com/watch?v=X9Ra0D7JJ88
Brackeys é um canal (em inglês) de tutoriais sobre unity, recomendo a todos link do canal: https://www.youtube.com/channel/UCYbK_tjZ2OrIZFBvU6CCMiA
==========================-----------------==========================
a implementação desse sistema é muito fácil!
para quem já manja do sistema usual de multiplayer (que não consegue jogar em multiplos dispositivos ;-; ), siga para o 8° passo onde iremos deixar nosso antigo networking em LAN para GLOBAL (vc poderá testa seu projeto com seus amigos agora )
resumo:
-do ponto 1 ao 7 : implementação do sistema de multiplayer usual (em LAN) => donwload do projeto configurado em LAN no topico 7.
- a partir do ponto 8: implementação do unity matchmaking - transformando o multiplayer de LAN para GLOBAL => sem projeto já configurado, pois
>>>>duvidas e sugestões serão bem vindas! <<<<<
>>>> download do projeto já configurado no final do post <<<<
é o seguinte, nesse tutorial vou ensinar a vcs como transformar seu jogo em um multiplayer de maneira fácil e rápida com o novo networking da unity (UNET).
BORA COMEÇAR O TUTO!
1° passo => criei um novo projeto com o nome "Networking", não é necessário importar nada, nos vamos fazer tudo (o que não é muita coisa )
================================/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\===============================
===============================================================================
2° criaremos 2 pastas para melhor organização, a primeira será "Scripts" (onde ficarão nossos scripts) e a segunda será "Recursos" (essa aki é opcional, vou usá-la para guardar texturas, etc para fazer um cenário melhor)
- Spoiler:
================================/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\===============================
===============================================================================
3° criei um simples cenário:
- Spoiler:
salve a sua cena (eu coloquei o nome de "cenaOnline");
crie outra cena sem nada e salve-a (eu coloquei o nome de "cenaOffline");
nessa cena sem nada, crie um objeto vazio mude seu nome para "NetworkManager" (esse objeto será o gerenciador da network), adicione os componentes <NetworkManager> e <NetworkManager Hud>
- Spoiler:
agora vá em file>build settings> e arraste todas as cenas para o campo "scene in build" (obs: coloque a "cenaOffline" como a primeira da lista e a "cenaOnline" como a segunda, isso é porque vamos iniciar o game com a cenaOffline onde configuraremos o game) .
no componente <NetworkManager> no campo "offlineScene" adicione a cena "cenaOffline" e no campo "onlineScene" adicione a cena "cenaOnline" (em offlineScene é a cena que aparecerá quando o jogador estiver desconectado do servidor e a online é quando ele estiver conectado )
================================/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\===============================
===============================================================================
4° vamos fazer nosso player (obs: não vou usar o player do standard assets da unity, pois ele é muito bagunçado, na minha opinião ) é bem simples de fazer nosso próprio player, vamos usar o componente "character controller" e adicionaremos um simples script de movimentação e um de visão ("MovePlayer" e "MouseLook")
-->vamos criar um objeto que será o corpo do player, vou usar uma "Capsule" (GameObject>3dObject>Capsule) e renomeá-la para "player";
--> depois colocamos a nossa câmera como filho do player e posicionamos corretamente;
--> vou adicionar um cubo para representar a mão do player, coloque o cubo como filho da camera e modifique sua posição e sua escala para que fique parecido com um braço (vou renomeá-lo para "mão");
o meu ficou assim:
- Spoiler:
================================/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\===============================
===============================================================================
5° agora vamos configurar o player:
--> remova o componente <Capsule Collider> do player e adicione o componente <Character Controller> , <Network identity>(marque a caixa "local player authority") e <Network Transform> (nele mude o "send rate" (taxa de transmissão, tipo FPS) para 20")
--> crie um script chamado "MovePlayer", cole o codigo abaixo nele e coloque-o no player:
- Spoiler:
- Código:
using UnityEngine;
using System.Collections;
public class MovePlayer : MonoBehaviour {
private CharacterController controller;
public float speed = 6.0F;
public float jumpSpeed = 8.0F;
public float gravity = 20.0F;
private Vector3 moveDirection = Vector3.zero;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
if (controller.isGrounded)
{
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetKeyDown(KeyCode.Space))
moveDirection.y = jumpSpeed;
}
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
}
}
--> criei outro script "MouseLook" cole o codigo abaixo nele e coloque-o no player:
- Spoiler:
- Código:
using UnityEngine;
using System.Collections;
public class MouseLook : MonoBehaviour {
public Transform mainCamera;
public float mouseSensitivity = 100.0f;
public float clampAngle = 80.0f;
private float rotY;
private float rotX;
void Start ()
{
rotY = transform.localRotation.eulerAngles.y;
rotX = mainCamera.transform.localRotation.eulerAngles.x;
}
void Update ()
{
float mouseX = Input.GetAxis("Mouse X");
rotY += mouseX * mouseSensitivity * Time.deltaTime;
float mouseY = -Input.GetAxis("Mouse Y");
rotX += mouseY * mouseSensitivity * Time.deltaTime;
rotX = Mathf.Clamp(rotX, -clampAngle, clampAngle);
transform.rotation = Quaternion.Euler (transform.rotation.x, rotY, transform.rotation.z);
mainCamera.rotation = Quaternion.Euler (rotX, rotY, transform.rotation.z);
}
}
--> criei outro script "IndividualizeClient" cole o codigo abaixo nele e coloque-o no player:
- Spoiler:
- Código:
using UnityEngine;
using System.Collections;
//importar essa biblioteca para usar os comandos
using UnityEngine.Networking;
// use o NetworkBehaviour
public class IndividualizeClient : NetworkBehaviour {
void Start ()
{
//desativa os componentes do outro player para não dar confrontos entre esse player e ou outro
if (!isLocalPlayer)
{
GetComponentInChildren<Camera> ().enabled = false;
GetComponentInChildren<AudioListener> ().enabled = false;
GetComponentInChildren<MouseLook> ().enabled = false;
GetComponent<MovePlayer> ().enabled = false;
GetComponent<IndividualizeClient> ().enabled = false;
}
}
}
--> link a câmera do player no script "MouseLook";
--> pronto seu player já está configurado
================================/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\===============================
===============================================================================
6° crie uma pasta chamada "prefabs" e arraste o player para essa pasta para criar um prefab dele;
--> exclua o player da cena e salve-a;
-->abra a cenaOffline e vamos configurar o "NetworkManager";
--> maximize a opção "spawn info" e em player prefab, coloque o prefab do player;
================================/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\===============================
===============================================================================
7° PRONTO! agr vc pode compilar o seu projeto, abra seu game na unity e escolha a primeira opção "LAN HOST" (ser o servidor) e no seu projeto ja compilado clique em "LAN CLIENT". (ou abra duas ou mais instancias do seu game e escolha uma para ser o servidor onde as outras irão conectar)
================================/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\===============================
===============================================================================
download do projeto configurado:
obs: esse projeto vem configurando com o network local (exatamente do tutorial acima), pois o sistema de network global precisa de dados da sua conta unity para usar o serviços de matchmaking da unity.
mediafire:
http://www.mediafire.com/download/9j2oi3tqkme9qur/Networking.rar
dropbox:
https://www.dropbox.com/s/jj9ma3991stdxbl/Networking.rar?dl=0
googleDrive:
https://drive.google.com/open?id=0B9NlCPUlMpzzNy1rRUFMcVhNN2s
>>>DEIXANDO SEU SISTEMA DE MULTIPLAYER DE LAN PARA GLOBAL!
8° com tudo configurado em seu projeto (rodando em networking local), continuaremos para transforma-lo em um multiplayer global
================================/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\===============================
===============================================================================
9° abra a janela "services" do unity , no campo "select organization" selecione a sua organização (qualquer uma) em seguida clique em "create" :
- Spoiler:
================================/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\===============================
===============================================================================
10° um monte de serviços irá aparecer, o que nos interessa é o serviço "Multiplayer", clique nele, em seguida, clique em "go to dashboard" :
- Spoiler:
================================/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\===============================
===============================================================================
11° uma pagina da internet será aberta no seu navegador , nela terá um campo onde você irá colocar o máximo de jogadores por sala (no meu caso eu coloquei 10) em seguida clique em "save"
- Spoiler:
================================/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\===============================
===============================================================================
12° após isso, volte para a unity e clique em "refresh" na aba "multiplayer", alguns dados serão mostrados, mas não iremos precisar deles no momento:
- Spoiler:
================================/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\===============================
===============================================================================
13° TUDO QUE PRECISAMOS CONFIGURAR JA FOI CONFIGURADO (sim! só foi necessario fazer esses pequenos passos o.o )
================================/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\===============================
===============================================================================
14° agora vem a melhor parte! criaremos a sala e entraremos nela, o processo é praticamente o mesmo do mostrado no item "7°", porém, em vez de clicar em em "LAN Host" para criar o servidor, e "LAN Client" para conectar, iremos clicar em:
- "enable match maker", em seguida > "create internet match" (para criar o servidor)
- para conectar ao servidor, clique em "enable match maker" em seguida em "find internet match" a sala que vc criou estará lá, é só clicar e pronto
================================/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\===============================
===============================================================================
OBS: vc pode criar o servidor em um computador por exemplo e conectar em um dispositivo android, ou outro pc que esteja rodando o mesmo projeto.
JailtonUnity- MembroAvançado
- PONTOS : 3779
REPUTAÇÃO : 38
Idade : 25
Respeito as regras :
Re: [TUTORIAL] Multiplayer global em múltiplos dispositivos
Tem como eu colocar para o cliente ser outro player? se sim como eu faria isso???
thzin- Avançado
- PONTOS : 2891
REPUTAÇÃO : 19
Idade : 22
Áreas de atuação : Básico 3ds Max
Básico Maya
Básico Photoshop
Intermediário Blender
Intermediário Unreal Engine
Interm
Respeito as regras :
Re: [TUTORIAL] Multiplayer global em múltiplos dispositivos
Galera só tomem cuidado com algumas coisas...
Isso é ótimo pra testes rápidos ou jogos em que você vai jogar com alguns amigos, pra produção não rola.
Pra um multiplayer de "produção" temos que levar algumas coisas em consideração:
- NUNCA dê autoridade local ao player;
- SEMPRE trabalhe na compensação de lag/previsão de movimento.
- O matchmaking basicamente é uma conexão P2P só que sem a necessidade de se preocupar com a liberação de portas, então, se a conexão de um player estiver ruim, os demais vão ser prejudicados.
De qualquer forma, é ótimo abordar esse tema!
Valeu Jailton!
Abraços e sucesso!
Isso é ótimo pra testes rápidos ou jogos em que você vai jogar com alguns amigos, pra produção não rola.
Pra um multiplayer de "produção" temos que levar algumas coisas em consideração:
- NUNCA dê autoridade local ao player;
- SEMPRE trabalhe na compensação de lag/previsão de movimento.
- O matchmaking basicamente é uma conexão P2P só que sem a necessidade de se preocupar com a liberação de portas, então, se a conexão de um player estiver ruim, os demais vão ser prejudicados.
De qualquer forma, é ótimo abordar esse tema!
Valeu Jailton!
Abraços e sucesso!
Re: [TUTORIAL] Multiplayer global em múltiplos dispositivos
thzin escreveu:Tem como eu colocar para o cliente ser outro player? se sim como eu faria isso???
você quer trocar o player que fiz no tutorial por outro certo? basta deletar esse player e colocar o script "IndividualizeClient" e os componente "Network identity" e ""Network transform" para o seu outro player. no componente "Network identity" marque a caixa "local player authority"
obs: mude o prefab do player para o seu novo player no network manager (que fica na "CenaOffline") no campo "Spaw Info"
JailtonUnity- MembroAvançado
- PONTOS : 3779
REPUTAÇÃO : 38
Idade : 25
Respeito as regras :
Re: [TUTORIAL] Multiplayer global em múltiplos dispositivos
hum... o botão para abrir a imagem (botão "spoiler") não está funcionando, ou só a imagem que não aparece? pois aqui está funcionando normal.Callyde Jr escreveu:Aqui as imagens nao aparece?
aki os links de todas as imagens:
imagem referente ao 2° passo:
https://i.imgur.com/XWlrbSk.png
3° passo
https://i.imgur.com/vDY7zbo.png
https://i.imgur.com/xlrbYzb.png
4° passso
https://i.imgur.com/9pKiO29.png
9° passo
https://i.imgur.com/poi4A6k.jpg
10° passo
https://i.imgur.com/4yCqJvA.jpg
11° passo
https://i.imgur.com/2ohpBS2.jpg
12° passo
https://i.imgur.com/zNntf57.jpg
JailtonUnity- MembroAvançado
- PONTOS : 3779
REPUTAÇÃO : 38
Idade : 25
Respeito as regras :
Re: [TUTORIAL] Multiplayer global em múltiplos dispositivos
o que eu quero é por exemplo, o host vai ser um player e o a outra pessoa que entrar (no caso o client) vai ser outro, tem como?JailtonUnity escreveu:thzin escreveu:Tem como eu colocar para o cliente ser outro player? se sim como eu faria isso???
você quer trocar o player que fiz no tutorial por outro certo? basta deletar esse player e colocar o script "IndividualizeClient" e os componente "Network identity" e ""Network transform" para o seu outro player. no componente "Network identity" marque a caixa "local player authority"
obs: mude o prefab do player para o seu novo player no network manager (que fica na "CenaOffline") no campo "Spaw Info"
thzin- Avançado
- PONTOS : 2891
REPUTAÇÃO : 19
Idade : 22
Áreas de atuação : Básico 3ds Max
Básico Maya
Básico Photoshop
Intermediário Blender
Intermediário Unreal Engine
Interm
Respeito as regras :
Re: [TUTORIAL] Multiplayer global em múltiplos dispositivos
https://www.assetstore.unity3d.com/en/#!/content/69172
Re: [TUTORIAL] Multiplayer global em múltiplos dispositivos
thzin escreveu:o que eu quero é por exemplo, o host vai ser um player e o a outra pessoa que entrar (no caso o client) vai ser outro, tem como?JailtonUnity escreveu:thzin escreveu:Tem como eu colocar para o cliente ser outro player? se sim como eu faria isso???
você quer trocar o player que fiz no tutorial por outro certo? basta deletar esse player e colocar o script "IndividualizeClient" e os componente "Network identity" e ""Network transform" para o seu outro player. no componente "Network identity" marque a caixa "local player authority"
obs: mude o prefab do player para o seu novo player no network manager (que fica na "CenaOffline") no campo "Spaw Info"
não estou entendendo direito, vc quer usar um player diferente para um outro client? por exemplo, um player mais rápido para o client 1 e um mais lento para o client 2?
no caso você teria que implementar um sistema para escolher o player antes de criar ou conectar no server, mudando o "player prefab" no network manager ou mudá-lo dinamicamente dentro do server.
aqui tem um link da referência da unity sobre add player: (inglês)
https://docs.unity3d.com/ScriptReference/Networking.ClientScene.AddPlayer.html
JailtonUnity- MembroAvançado
- PONTOS : 3779
REPUTAÇÃO : 38
Idade : 25
Respeito as regras :
Re: [TUTORIAL] Multiplayer global em múltiplos dispositivos
Eu posso fazer um código em uma UI que quando eu clico em um botão muda o prefab la do network?JailtonUnity escreveu:thzin escreveu:o que eu quero é por exemplo, o host vai ser um player e o a outra pessoa que entrar (no caso o client) vai ser outro, tem como?JailtonUnity escreveu:thzin escreveu:Tem como eu colocar para o cliente ser outro player? se sim como eu faria isso???
você quer trocar o player que fiz no tutorial por outro certo? basta deletar esse player e colocar o script "IndividualizeClient" e os componente "Network identity" e ""Network transform" para o seu outro player. no componente "Network identity" marque a caixa "local player authority"
obs: mude o prefab do player para o seu novo player no network manager (que fica na "CenaOffline") no campo "Spaw Info"
não estou entendendo direito, vc quer usar um player diferente para um outro client? por exemplo, um player mais rápido para o client 1 e um mais lento para o client 2?
no caso você teria que implementar um sistema para escolher o player antes de criar ou conectar no server, mudando o "player prefab" no network manager ou mudá-lo dinamicamente dentro do server.
aqui tem um link da referência da unity sobre add player: (inglês)
https://docs.unity3d.com/ScriptReference/Networking.ClientScene.AddPlayer.html
thzin- Avançado
- PONTOS : 2891
REPUTAÇÃO : 19
Idade : 22
Áreas de atuação : Básico 3ds Max
Básico Maya
Básico Photoshop
Intermediário Blender
Intermediário Unreal Engine
Interm
Respeito as regras :
Re: [TUTORIAL] Multiplayer global em múltiplos dispositivos
essa é a ideia, porém não sei como fazer issothzin escreveu:Eu posso fazer um código em uma UI que quando eu clico em um botão muda o prefab la do network?JailtonUnity escreveu:thzin escreveu:o que eu quero é por exemplo, o host vai ser um player e o a outra pessoa que entrar (no caso o client) vai ser outro, tem como?JailtonUnity escreveu:thzin escreveu:Tem como eu colocar para o cliente ser outro player? se sim como eu faria isso???
você quer trocar o player que fiz no tutorial por outro certo? basta deletar esse player e colocar o script "IndividualizeClient" e os componente "Network identity" e ""Network transform" para o seu outro player. no componente "Network identity" marque a caixa "local player authority"
obs: mude o prefab do player para o seu novo player no network manager (que fica na "CenaOffline") no campo "Spaw Info"
não estou entendendo direito, vc quer usar um player diferente para um outro client? por exemplo, um player mais rápido para o client 1 e um mais lento para o client 2?
no caso você teria que implementar um sistema para escolher o player antes de criar ou conectar no server, mudando o "player prefab" no network manager ou mudá-lo dinamicamente dentro do server.
aqui tem um link da referência da unity sobre add player: (inglês)
https://docs.unity3d.com/ScriptReference/Networking.ClientScene.AddPlayer.html
JailtonUnity- MembroAvançado
- PONTOS : 3779
REPUTAÇÃO : 38
Idade : 25
Respeito as regras :
Tópicos semelhantes
» [TUTORIAL] Criando um simples Multiplayer [UNITY 5]
» [TUTORIAL] Correção para múltiplos audio Listeners
» [TUTORIAL] Como criar um HUD MULTIPLAYER personalizavel
» [PEDIDO] Tutorial de Multiplayer
» [TUTORIAL] Sincronizando variáveis no multiplayer
» [TUTORIAL] Correção para múltiplos audio Listeners
» [TUTORIAL] Como criar um HUD MULTIPLAYER personalizavel
» [PEDIDO] Tutorial de Multiplayer
» [TUTORIAL] Sincronizando variáveis no multiplayer
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos