Limitando campo de visão da Câmera na Unity 3D

Gunnar CorreaGunnar Correa11/02/2021 - 1.213 acessos

Limitando campo de visão da Câmera na Unity 3D

Usando a classe Mathf.Clamp conseguimos atribuir as posições mínima e máxima para a câmera.


Independente do jogo que você está construindo, vai precisar que o player de alguma forma não sai do cenário, porém, em muitos casos é necessário que até mesmo a câmera não sai de uma determinada posição, seja para limitar o campo de visão dando deixando o jogo mais imersivo ou por limitações técnicas.

Vamos ver nesse artigo alguns scripts e videoaulas que vão te ajudar a limitar a posição da câmera dentro da Unity 3D.

Limitando o campo de visão da Câmera

Assista as nossas videoaulas abaixo, nelas criamos tanto um personagem para se mover pelo cenário, quanto o script para que a câmera não mostre mais do que o necessário.

Criando o cenário e movimentação do player

Nessa aula vamos criar nosso cenário com ajuda de cubos, plano e um cilindro que será o nosso player. Para dar mais dinamismo ao projeto, damos vida ao player incluindo um script que permite com que ele faça movimentações pelo cenário.

 

Criando o script que limita a posição da câmera

Uma vez que o script e o cenário está montado e funcionando, precisamos finalmente criar o script de movimentação da câmera, na qual a gente precisa especificar as posições mínimas e máximas para os Eixos X e Z, assim, fazendo com que a câmera pare de acompanhar o player em determinados pontos da tela.

Como o Mathf.Clamp funciona

A funcionalidade do Método Mathf.Clamp é bem simples, ela recebe os seguintes parâmetros:

  • Value - Posição ou número atual a ser validade;
  • Min - Qual a posição ou o menor número possível;
  • Max - Qual a posição ou maior número possível.

Sempre que o método receber um valor que extrapole o valor mínimo permitido, então ela vai ignora-lo e vai retornar o valor mínimo especificado. O mesmo acontece para o valor máximo quando extrapolado.

Como o método Methf.Clamp funciona na Unity
Como o método Methf.Clamp funciona na Unity

Script limitação de câmera com Unity 3D

Abaixo estão os dois scripts criados durante as aulas, porém apenas inseri-los no seu projeto não vai resolver o problema, é necessário que você assista as duas videoaulas para entender como configura-los.

PlayerController.cs

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float velocidade = 10.0f;
    
    
    void Update()
    {
       Vector3 pos = new Vector3(
           Input.GetAxis("Horizontal"),
           0,
           Input.GetAxis("Vertical")
       );

       transform.Translate(pos * velocidade * Time.deltaTime);
    }
}

CameraController.cs

using UnityEngine;

public class CameraController : MonoBehaviour
{
    //Velocidade de movimentação, quanto maior, mais rápido
    public float velocidade = 5.0f;

    [Space(10)]
    //Distância adicional do player
    public Vector3 offset = Vector3.up;

    //Player em cena
    public Transform player;

    [Space(15)]
    //Posição min e max em X da câmera
    public float[] xClamp = new float[2];

    //Posição min e max em z da câmera
    public float[] zClamp = new float[2];

    //Roda a cada quadro
    void Update()
    {
        //Cria uma nova variável e adiciona a posição do player a ela
        Vector3 playerPos = player.position;

        //Obtém a posição em X
        float posX = Mathf.Clamp(playerPos.x, xClamp[0], xClamp[1]);

        //Obtém a posição em z
        float posZ = Mathf.Clamp(playerPos.z, zClamp[0], zClamp[1]);

        //Movimenta a câmera suavimente até a posição do player
        transform.position = Vector3.Lerp(
                    transform.position, //Posição autual
                    new Vector3(posX, 0, posZ) + offset, //Nova posição com o espaçamento
                    velocidade * Time.deltaTime //Tempo da transição
                );
    }
}

Por hora é isso, a gente se vê na próxima.


unity unity 3d camera unity camera limitar camera unity camera games games desenvolvimento jogos games gamedev programação de jogos programação camera programação posição camera unity camera seguir player mathf mathf.clamp

Compartilhe nas redes sociais



Gunnar Correa

Gunnar Correa

Autodidata, Graduado em Desenvolvimento Web, Especialista em Tecnologias na Educação e Pós-graduando em Segurança da Informação. Começou seus estudos na área de programação quando era criança, e atualmente, está estudando desenvolvimento de jogos. É CEO do portal SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.


Fórum

Ficou com alguma dúvida? utilize nosso fórum de perguntas e respostas, lá nossa comunidade poderá te ajudar.

https://forum.satellasoft.com