É comum quando inciamos no desenvolvimento de jogos na Unity, ficarmos confuso na hora de criar a movimentação dos personagens.
Pois, em cada aula ou tutorial que vemos, é ensinado uma maneira diferente de mover os objetos.
E existem diversas formas de se fazer a mesma coisa, então vamos te ajudar entender as formas mais básicas.
Movimentações na Unity
A Unity tem um componente feito exclusivamente para facilitar o uso da física dentro da engine.
E se chama Rigidbody, e através dele é possível aplicar forças no objeto de diferentes formas.
E é muito útil, pois, ele já faz todo o cálculo matemático do movimento e também com relação às colisões.
Mas, existem formas de movimentar os objetos sem o uso da física, através do próprio component Transform.
E é um component padrão em todos os objetos, e resumidamente é responsável pela sua localização no mundo do jogo.
Velocity
A primeira movimentação mais utilizada é aplicando uma força através do Velocity do Rigidbody.
E aqui é aplicada uma força linear em unidades por segundo, que simula de fato um objeto com velocidade constante.
E ao pressionar o input, por exemplo, esse corpo receberá a mesma força, independente do tempo que mantenha pressionado.
E para utilizar, basta acessar o Rigidibody, e escolher o velocity, passando para receber um novo Vector 2.
E o primeiro parâmetro definirá a velocidade no eixo X, e o segundo definirá a velocidade no eixo Y.
AddForce (Force)
Através do AddForce(Force), o objeto vai ganhando aceleração conforme for apertando o Input.
E diferente do velocity, aqui ele vai adicionando mais e mais força conforme passa o tempo.
E um exemplo de uso, seria em uma mecânica de aceleração de carros, onde o carra ganha velocidade aos poucos.
E para usar basta acessar o Rigidbody, escolher o AddForce, e de dentro do parenteses passar o vetor de força.
Pois, serão referentes aos eixos direcionais dentro do game, Vector 2 para 2D, e Vector 3 para 3D.
E colocamos uma vírgula para adicionar o comando ForceMode e escolher o Force, para definir esse padrão de força.
AddForce (Impulse)
Através do AddForce(Impulse), o objeto receberá de uma só vez a força aplicada que você definiu.
E mesmo que você pressione e solte o input rapidamente, essa força já foi adicionada ao objeto.
E é muito utilizado para criar a mecânica de pulo, por realmente dar um impulso no corpo do personagem.
E para utilizar esse modo de força, é só seguir os mesmos passos ensinados anteriormente no modo Force.
Porém, você escolherá o Impulse, como modo de força a ser utilizado dessa vez.
Transform.Position
As movimentações realizadas diretamente no Tranform dos objetos, não usam da física do RigidBody.
Pois, elas basicamente forçam o component Transform a atualizar sua posição no mundo do jogo.
E com o Transform.Position, você basicamente estará passando para o objeto uma nova localização.
Pois, você estará constantemente atualizando um novo Position ao objeto, e por consequência, mudando sua posição.
E uma das formas de fazer essa movimentação, seria acessando o transform.position e fazendo ele receber um tranform.right.
E basicamente é um Vector que passa 1 no eixo X, e os demais eixos 0, direcionando para a direita.
E agora multiplicamos por Time.deltaTime, para normalizar a movimentação feita no Update.
E multiplicar pela variável speed, e para a direção contraria, basta fazer o mesmo comando.
Mas agora subtraindo o transfor.right, assim como foi demonstrado na imagem de exemplo.
Transform.Translate
Já o transform.translate é basicamente a mesma movimentação feita pelo transform.position.
Mas, a diferença é que você tem a possibilidade de modificar quem será a base da movimentação.
Pois, utilizando Space.Self, você move o objeto com base em seu próprio transform.
Por exemplo, se ele estiver rotacionado na diagonal e você pressionar o input, ele se moverá em diagonal.
Mas, escolhendo Space.World, mesmo rotacionado na diagonal, ao pressionar o input, ele se moverá no eixo X normalmente.
Pois, o objeto tomara como base da movimentação, os eixos do mundo do jogo, independente da sua rotação própria.
Update vs FixedUpdate
Uma boa dica seria escolher a função mais recomendada, para o tipo de movimentação que você irá utilizar.
Pois, para movimentações com o Rigidbody, é recomendado o FixedUpdate, que é feito para lidar com a física.
E essa função já foi totalmente criada e ajustada para lidar com as atualizações de física do jogo.
E para as movimentações feitas através do Transform, utilize sempre o Update e sempre multiplique por Time.deltaTime.
Pois, esse comando irá padronizar a movimentação, independente do FPs atual do jogo.
E dessa forma o objeto terá o mesmo padrão de movimento em um super pc ou em um pc de entrada.
Existem diversas formas de criar movimentações dentro da Unity, seja com uso da física ou não.
E a maneira correta de fazer é aquela que mais se encaixar em seu jogo, e que funcionar melhor.
E esperamos que esse artigo possa te ajudar a entender as principais diferenças entre essas movimentações.
Logo abaixo deixaremos um video muito top te ensinado o básico de C# em 30 min, saca só:
Seja o primeiro a comentar.