Você que é fã de jogos estilo Top-Down, programa utilizando a Engine Unity 2D e quer criar personagens para seu game. Então você vai adorar o post “Como fazer personagem seguir o movimento do mouse”, pois o mesmo ensina de maneira fácil e rápida a implementação da mecânica de fazer seu jogador olhar para onde o cursor do seu mouse está apontando!
Como fazer personagem seguir o movimento do mouse
Muitos jogos de estilo Top-Down tem como solução de mira seguir o cursor do mouse. Para reproduzirmos essa mecânica, vamos seguir os passos abaixo!
Script Base
using System.Collections; using System.Collections.Generic; using UnityEngine; public class FollowMouse : MonoBehaviour { public float bulletVelocity; public GameObject bullet1; public Transform Muzzle1; public Transform Muzzle2; void Update() { MouseFollow(); if (Input.GetButtonDown("Fire1")) Fire(); } void Fire() { Vector3 worldMousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); Vector2 direction = (Vector2)((worldMousePos - transform.position)); direction.Normalize(); //instanciando bala 1 GameObject bullet = (GameObject)Instantiate(bullet1, Muzzle1.position + (Vector3)(direction * 0.5f), Muzzle1.rotation); //instanciando bala 2 GameObject bullet2 = (GameObject)Instantiate(bullet1, Muzzle2.position + (Vector3)(direction * 0.5f), Muzzle2.rotation); //Aplicando velocidade para ambas as balas bullet.GetComponent<Rigidbody2D>().velocity = direction * bulletVelocity; bullet2.GetComponent<Rigidbody2D>().velocity = direction * bulletVelocity; Destroy(bullet, 2f); Destroy(bullet2, 2f); } void MouseFollow() { Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position; difference.Normalize(); float rotationZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg; transform.rotation = Quaternion.Euler(0f, 0f, rotationZ); } }
Analisando as variáveis
A variável “bulletVelocity” será a velocidade da nossa bala, “bullet1” é o prefab da nossa bala, o qual será instanciado na hora em que atirarmos. Já as variáveis “Muzzle1” e “Muzzle2” são as posições das nossas armas, posições das quais as nossas balas vão ser instanciadas.
Os Muzzles são game objects vazios e filhos do jogador dentro da nossa cena, servindo apenas de referência para a localização das armas.
Não esqueça de referenciar os respectivos objetos no inspector!
Destrinchando o código
Vamos analisar o nosso script e ver como tudo foi construído. Nossos dois métodos base são “Fire” e “MouseFollow”. No método “MouseFollow” vamos fazer com que o nosso jogador sempre olhe para a posição atual do nosso cursor.
Para que isso aconteça, vamos pegar a posição do nosso mouse “Camera.main.ScreenToWorldPoint(Input.mousePosition)” e subtrai-la pela posição do nosso jogador “transform.position” após sabermos a diferença entre a posição do mouse e a posição do jogador, vamos aplicá-la a função “Mathf.Atan2” e multiplicá-la pela função “Mathf.Rad2Deg”. Para saber mais saber essas funções, clique sobre as mesmas!
Na função “Fire” nós vamos atirar na direção do nosso mouse. Assim como na função anterior, precisamos saber a posição atual do cursor, para isso, salvamos essa posição na variável “worldMousePos”.
Depois disso só precisamos instanciar nossas balas nas posições corretas “GameObject bullet = (GameObject) Instantiate (bullet1, Muzzle1.position + (Vector3)(direction * 0.5f) + offset, Muzzle1.rotation)”;
Por fim, no “Update” vamos chamar a nossa função “MouseFollow” e chamar a função “Fire” quando o jogador clicar com o botão esquerdo do mouse.
Pronto! Agora o seu personagem segue a posição do seu cursor!
Acesse a nossa área de cursos para aprender a desenvolver jogos utilizando as ferramentas Unity, Construct 2, Game Maker e MonoGame. Participe também do nosso grupo de estudos no Facebook.