Problemas em dividir controles em multiplayer
2 participantes
Página 1 de 1
Problemas em dividir controles em multiplayer
Estou tentando me aventurar na nova APIde multiplayer da unity(Netcode/mlapi), só que estou tendo problemas em dividir os controles dos player, mexo um player e outro se mexe também. Alguém pode me dar um norte?
Só tenho esse script simples por enquanto:
Só tenho esse script simples por enquanto:
- Código:
public class PlayerController : NetworkBehaviour
{
[SerializeField] private CharacterController characterController;
[SerializeField] private float speed = 3f;
[SerializeField] private float gravity = 10f;
void Start()
{
}
void Update()
{
if(NetworkManager.Singleton.IsServer)
{
Move();
} else{
Move();
}
}
void Move()
{
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
Vector3 movePosition = new Vector3(horizontal, 0f, vertical);
characterController.Move(movePosition * Time.deltaTime * speed);
}
}
Charlesoff- MembroAvançado
- PONTOS : 1781
REPUTAÇÃO : 40
Áreas de atuação : Game dev
Respeito as regras :
Re: Problemas em dividir controles em multiplayer
Ou você deixa a autoridade sobre o movimento no client(aparelho que o jogador está usando, celular, pc...) ou o server fica responsável e o client só manda o input...
Na sua update você tá pegando o input nas duas situações, sendo que provavelmente o primeiro Move() nunca vai ser chamado, pois a menos que você execute o game como host, você nunca vai estar no server, então não tem porque checar "NetworkManager.Singleton.IsServer"
pra limitar os controles apenas ao seu jogador, você tem que entender o conceito de autoridade, por padrão tudo é de autoridade do server.
Quando seu jogador nasce, o server dá autoridade daquele boneco pra você, qualquer script no seu boneco, desde que use a biblioteca de multiplayer(Mirror, Photon, MLAPI), vai te dar acesso a alguma bool pra dizer se você tem ou não autoridade sobre esse boneco. Geralmente é algo como "HasAuthority", "IsOwn" ou "IsLocalPlayer". Isso você vai ter que olhar na documentação da MLAPI pra ter certeza.
Sabendo a bool que controla isso, basta checar que se for o localplayer(seu boneco), você executa os comandos, caso contrário não faz nada.
Na sua update você tá pegando o input nas duas situações, sendo que provavelmente o primeiro Move() nunca vai ser chamado, pois a menos que você execute o game como host, você nunca vai estar no server, então não tem porque checar "NetworkManager.Singleton.IsServer"
pra limitar os controles apenas ao seu jogador, você tem que entender o conceito de autoridade, por padrão tudo é de autoridade do server.
Quando seu jogador nasce, o server dá autoridade daquele boneco pra você, qualquer script no seu boneco, desde que use a biblioteca de multiplayer(Mirror, Photon, MLAPI), vai te dar acesso a alguma bool pra dizer se você tem ou não autoridade sobre esse boneco. Geralmente é algo como "HasAuthority", "IsOwn" ou "IsLocalPlayer". Isso você vai ter que olhar na documentação da MLAPI pra ter certeza.
Sabendo a bool que controla isso, basta checar que se for o localplayer(seu boneco), você executa os comandos, caso contrário não faz nada.
Fagner- Moderador
- PONTOS : 4443
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: Problemas em dividir controles em multiplayer
Tive um pouco de progresso, ainda estou com problemas com isso:
O 'IsLocalPlayer' retonar false em meus clients, depois vejo na documentação como dou autoridade ao meus clients, com isso só o host se move.
- Código:
public class PlayerController : NetworkBehaviour
{
[SerializeField] private CharacterController characterController;
[SerializeField] private float speed = 3f;
[SerializeField] private float gravity = 10f;
public bool localplayer;
void Start()
{
}
void Update()
{
if(IsLocalPlayer)
{
Move();
localplayer = IsLocalPlayer;
}
}
void Move()
{
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
Vector3 movePosition = new Vector3(horizontal, 0f, vertical);
characterController.Move(movePosition * Time.deltaTime * speed);
}
}
O 'IsLocalPlayer' retonar false em meus clients, depois vejo na documentação como dou autoridade ao meus clients, com isso só o host se move.
Charlesoff- MembroAvançado
- PONTOS : 1781
REPUTAÇÃO : 40
Áreas de atuação : Game dev
Respeito as regras :
Tópicos semelhantes
» Dividir uma mesh em dois.
» Como dividir 2 times de jogadores pvp online?
» [Multiplayer] Base para começar um multiplayer?
» Controles desabilitando
» Controles mobile 2d game Kit
» Como dividir 2 times de jogadores pvp online?
» [Multiplayer] Base para começar um multiplayer?
» Controles desabilitando
» Controles mobile 2d game Kit
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos