Desenvolvimento Unity

Como fazer personagem seguir o movimento do mouse – Unity 2D

  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.

Danilo Filitto

Sou Mestre em Ciência da Computação pela Universidade Estadual de Maringá – UEM, Pós-Graduado em Redes de Computadores e Comunicação de Dados pela Universidade do Estado do Paraná – UEL, Bacharel em Ciência da Computação pela Universidade do Oeste Paulista – UNOESTE.
Atuo na área acadêmica como professor desde 2006. Além de professor sou desenvolvedor de jogos, palestrante e mantenedor dos sites dfilitto e Make Indie Games.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 2.252 outros assinantes

Anúncios

Aprenda a criar seus jogos com os melhores desenvolvedores de jogos

Advertisement

Quer aprender a programar?