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

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.

Publicado em

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.

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. Fundador da SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.

Deixe um comentário
Aguarde...