Um controlador de personagem pode ajudá-lo a implementar física de movimento simples em seu jogo.
Você pode abordar os controladores de personagem Unity3D de vários ângulos. Se você usa uma biblioteca com classes e funções poderosas, criar um controlador de personagem baseado em física pode ser um lugar divertido para começar o desenvolvimento do jogo.
Etapa 1: criar uma cena com objetos de jogador e terreno
Depois que o Unity estiver aberto e você tiver criado um novo projeto, poderá começar adicionando alguns objetos à sua cena. Você pode criar esses objetos na ordem que desejar, mas tome cuidado para garantir que está usando as configurações corretas. Embora este projeto seja básico, é uma ótima maneira de começar a usar o Unity.
Um objeto plano 3D para terreno
O primeiro objeto a ser adicionado à sua cena é um avião. Clique com o botão direito dentro do painel de hierarquia, passe o mouse sobre
Objeto 3De selecione Avião da lista. Você pode ajustar o tamanho do plano para fornecer uma área de teste maior, mas não precisa fazer mais nada.Um modelo de jogador de objeto de cubo
Em seguida, é hora de adicionar um cubo à cena para atuar como modelo de jogador. Clique com o botão direito dentro do painel de hierarquia, passe o mouse sobre Objeto 3De selecione Cubo no menu suspenso. Posicione o novo cubo para que fique acima do plano que você também adicionou. Você também precisa adicionar um componente de corpo rígido para transformar o cubo em um objeto físico.
Selecione o cubo e vá para o Inspetor. Clique em Adicionar componente na parte inferior do painel, procure por rigidbody e selecione Corpo rígido da lista quando ela aparecer. Marque a Usar Gravidade caixa de seleção e deixe o restante das configurações como estão.
Você pode encontrar recursos gratuitos do Unity on-line para enfeitar seu projeto.
Uma câmera em terceira pessoa
Sua cena já deve ter uma câmera que você pode usar como câmera de terceira pessoa. Posicione a câmera de modo que fique em uma posição confortável de terceira pessoa acima do seu cubo. Vá para o painel de hierarquia antes de arrastar e soltar a câmera no cubo para criar um relacionamento pai-filho. A câmera seguirá automaticamente seu cubo com isso feito.
Um teste rápido
Embora sua cena ainda não tenha nenhum código, você pode testar o trabalho que fez até agora. Clique no Jogar botão na parte superior da tela para carregar o jogo. Você deve ver o cubo cair e pousar no topo do avião, e a câmera deve seguir o cubo conforme ele cai.
Etapa 2: configurar um arquivo C#
Agora é hora de criar um arquivo C# para que você possa começar a programar algum movimento. Vá para a seção Projeto, clique com o botão direito do mouse, passe o mouse sobre Criar e selecione Pasta na lista. Nomeie a pasta Scripts ou algo semelhante.
Navegue dentro de sua nova pasta e repita o processo, mas selecione C# Script na lista. Você pode dar a este arquivo qualquer nome, mas este também será o nome da função principal dentro dele. Certifique-se de que seu novo C# esteja assim.
usando Sistema. Coleções;
usando Sistema. Coleções. Genérico;
usando UnityEngine;públicoaulaCharacter_Control: MonoComportamento {
vazioComeçar() {
}
vazioAtualizar() {
}
}
Etapa 3: Use C# para criar movimento para frente e para trás com Velocity
Antes de adicionar funções em seu arquivo de script, declare algumas variáveis públicas. O primeiro é um Rigidbody para armazenar o modelo do jogador. Declare também um float para acompanhar a velocidade do movimento. Essas variáveis vão na classe principal, fora de qualquer função.
público Rigidbody rigidbody;
públicoflutuador velocidade;
Em seguida, é hora de adicionar uma única linha de código à função Iniciar. Isso usa uma declaração GetComponent para atribuir o componente rigidbody do cubo à variável rigidbody que você criou.
vazioComeçar() {
rigidbody = GetComponent < Rigidbody > ();
}
Agora você pode adicionar algum código que fará com que seu modelo de player se mova. Este código é bom e simples; você só precisa de duas instruções if, uma para avançar e outra para retroceder. Você pode usar Entrada. GetKey para determinar quando uma tecla está sendo pressionada. Nesse caso, você está procurando pressionamentos das teclas W e S.
Pressionar qualquer uma dessas teclas adiciona uma força ao cubo rigidbody usando rigidbody. AddForce. Você pode calcular a direção e a velocidade da força adicionada multiplicando sua posição no eixo Z (transform.forward) pela variável de velocidade. Não há nenhuma classe transform.backward para você usar para o movimento para trás, mas isso é possível multiplicando transform.forward por -1.
se (Entrada. GetKey("c")) {
corpo rígido. AddForce (transform.forward * velocidade);
}
se (Entrada. GetKey("s")) {
corpo rígido. AddForce((transform.forward * -1) * velocidade);
}
Salve o arquivo C# e navegue de volta para o Unity. Encontre o script dentro do painel Projeto e arraste e solte-o no cubo do modelo de personagem dentro da hierarquia para atribuir o script a esse objeto. Ao selecionar o Cubo, você verá o script como um componente no painel Inspetor. Clique dentro da caixa da variável rigidbody e selecione o rigidbody do seu cubo.
Agora você pode usar o botão Play para iniciar o jogo e testar seu código. Mas espere! Há um problema; seu cubo vai rolar em vez de seguir em frente. Volte para o inspetor do Cube, encontre o componente Rigidbody e marque as caixas para Freeze Rotation nos eixos X e Z antes de iniciar o jogo novamente. Agora deve funcionar.
Etapa 4: Use C# para criar giros à esquerda e à direita com torque
Ao contrário de mover para frente e para trás, girar o modelo do Cube Player requer uma força chamada torque. Você precisa de outra variável para isso: um flutuador público para atribuir um valor de torque.
públicoflutuador torque;
O código para virar à esquerda e à direita neste script é muito semelhante ao usado para avançar e retroceder também. Há uma se declaração para cada direção que procura pressionamentos da tecla D (virar à direita) ou da tecla A (virar à esquerda).
A primeira etapa em cada instrução if é determinar a direção da curva usando o Input. GetAxis e atribua o resultado a uma variável float. Em seguida, use rigidbody. AddTorque para aplicar força rotacional ao modelo de personagem Cube multiplicando o torque, o giro e o eixo Z do cubo.
se (Entrada. GetKey("d")) {
flutuador virar = Entrada. GetAxis("Horizontal");
corpo rígido. AddTorque (transform.up * torque * turn);
}
se (Entrada. GetKey("a")) {
flutuador virar = Entrada. GetAxis("Horizontal");
corpo rígido. AddTorque (transform.up * torque * turn);
}
Salve seu código e volte para o Unity para testá-lo. Você pode ajustar a velocidade e o tempo de aceleração da rotação do modelo do jogador selecionando o cubo e editando as variáveis de massa, arrasto e torque do corpo rígido em seu script. Este projeto de exemplo estabelece 1 massa, 1 arrasto e 2 torque.
Etapa 5: usar C# para programar saltos
Como elemento final deste controlador de personagem Unity, é hora de criar seu salto. Criar um salto é mais complexo do que os outros controles básicos nos quais você trabalhou, já que um salto deve ter uma altura limitada. Comece adicionando uma variável booleana privada para rastrear se o jogador está ou não pulando.
privadobool estápulando = falso;
Essa variável não fará nada sem uma instrução para testá-la. Nesse caso, uma instrução if básica para verificar se a variável é falsa resolverá o problema. Adicionar a mesma condição ao outro movimento se as instruções impedirão o jogador de se mover durante os saltos.
se (!está pulando) {
}
Adicionar a mesma condição ao outro movimento se as instruções impedirão o jogador de se mover durante os saltos.
se (Entrada. GetKey("c") && !isJumping) {
corpo rígido. AddForce (transform.forward * velocidade);
}
Dentro da instrução if !isJumping, você precisa de outra instrução if, desta vez para verificar se o botão de salto foi pressionado. Definir a variável isJumping como true é a primeira coisa a fazer nessa instrução if, seguida por uma declaração rigidbody.angularVelocity para remover as forças atualmente aplicadas ao cubo.
Agora você pode usar o corpo rígido. Declaração AddForce para adicionar força ao cubo em seu eixo Z, criando o movimento ascendente de um salto. Finalmente, é hora de usar uma declaração de chamada para chamar uma função diferente após 0,8 segundos.
se (!está pulando) {
se (Entrada. GetKeyDown("espaço")) {
estápulando = verdadeiro;
corpo rígido. AddForce (transform.up * velocidade * 120);
rigidbody.angularVelocity = Vector3.zero;
Invocar("Move_Setter", 0.8 f);
}
}
Esta função define a variável isJumping de volta para false para que o movimento/salto seja possível mais uma vez, e o atraso de 0,8 segundo impede que ele seja acionado muito cedo.
vazioMove_Setter() {
estápulando = falso;
}
Etapa 6: teste o código do controlador de personagem
Salve seu arquivo e volte para o Unity para testar o código que você escreveu. Como a maioria dos compiladores, o Unity fornece informações sobre erros e outros problemas com seu código para facilitar a visualização do que você precisa alterar. Você pode ver o código completo para este projeto em nosso GitHub página.
Criando controladores de personagem Unity
Você pode escolher entre uma variedade de abordagens diferentes ao criar um controlador de personagem no Unity. Usar a física é uma opção, mas você também pode usar o sistema de controle de personagem embutido, se quiser.
Explorar diferentes opções como essa é uma ótima maneira de aprender sobre ferramentas como Unity.