Pular para o conteúdo principal

Camera Follow

Quando se vai criar um jogo na Unity, um recurso que muitas pessoas gostam de usar é fazer com que a câmera siga o player principal.

Para fazer com que um objeto siga o outro, é preciso mexer apenas na posição do objeto "seguidor".

Como?

A seguir um código que fará com que isso aconteça de forma simples. Olhe:


var target:GameObject;
var smoothTime = 0.3;
var smooth:boolean;
private var velocity = Vector3.zero;
private var offset:Vector3;
function Start () {
 offset = target.transform.position - transform.position;
}

function Update () {
 if(smooth){
  var targetPosition : Vector3 = target.transform.position - offset;
  transform.position = Vector3.SmoothDamp(transform.position, targetPosition, velocity, smoothTime);
 }else{
  transform.position = target.transform.position - offset;
 }    
}

O que está acontecendo?

No código acima temos três variáveis públicas, e são elas: target, smoothTime e smooth. A variável target será quem a câmera deverá seguir, smoothTime servira junto com a variável smooth, smoothTime diz qual o tempo de smooth da câmera até o target, e smooth é uma variável boolean que informa se o modo de seguir será ou não com a opção smooth.

Mas o que é smooth?

Smooth é apenas um "efeito gradual" no movimento a câmera, isso será mais visível com a execução do código.

Depois tem-se duas variáveis private, que são? velocity e offset. Offset é a principal, pois ela independe de usar smooth ou não, ela servirá para guardar a diferença de posição entre o player e a camera, no inicio do jogo, já a variavel velocuty sera a velocidade máxima em cada eixo que a camera poderá atingir caso o smooth esteja ativado.

Na função Start() escolhe o valor de offset para a diferença das posições entre player e câmera, isso serve para manter a visão que você escolheu durante a criação do jogo na unity.

Já na função Update() tem uma condição que depende do valor da variável smooth, explicar o else será mais fácil agora. Logo, se smooth estiver false, a posição da câmera será a posição do player menos(-) o offset, fazendo assim com que a câmera já siga o player. Porém você vai perceber que a cÂmera ficará meio travada, dando um "socos" durante o movimento do personagem, por isso criou-se o smooth, para minimizar isso.

Agora, voltando para o smooth == true, tem-se que, se smooth estive marcado como true, uma nova variável "targetPosition" foi criada, ela recebe o valor da posição do target menos(-) o offset, ou seja, ela receberá o valor da posição que nossa câmera deverá ir. Após isso, usou-se o método SmoothDamp do Vector3, que faz o smooth de forma automática, para o SmoothDamp é necessário passar a posição atual do objeto, ou seja, transform.position, em seguida, para onde o objeto deve ir, que foi pego na variável targetPosition, a velocidade máxima que poderá atingir, no caso usou-se Vector3.zero, isso indica que será infinita a velocidade nos eixos e por último a velocidade com que essa transição ocorrerá, quanto menor, mais rápido. Depois disso colocar a posição da câmera no retorno desse Vector3.SmoothDamp.

Pronto!!

E é isso, com esse código você um script simples que fará com que sua câmera siga seu personagem de forma mais "hard" ou "soft" dependendo da necessidade do seu jogo. Esse código foi usado para a câmera, mas pode ser adaptado para outros objetos dentro do seu jogo, como por exemplo, pets ou itens.

Comentários

Postagens mais visitadas deste blog

Comera Follow com Rotate

Ainda pensando no movimento da câmera, outro recurso muito utilizado é a rotação dela em torno do player. Observe o código a seguir. var player:Transform; var turnSpeed:float = 4.0f; var smooth:boolean = false; private var offset:Vector3; private var velocidade:Vector3; function Start () { offset = transform.position - player.position; Cursor.lockState = CursorLockMode.Locked; } function LateUpdate(){ offset = Quaternion.AngleAxis (Input.GetAxis("Mouse X") * turnSpeed, Vector3.up) * offset; if(smooth){ var targetPosition : Vector3 = player.position + offset; transform.position = Vector3.SmoothDamp(transform.position, targetPosition, velocidade, 0.3f); }else{ transform.position = player.position + offset; } transform.LookAt(player.position); } Nesse código tem-se agora, o player ou target do tipo Transform, atente-se a isso, dessa forma temos acesso apenas à propriedade Transform do player, existe também a variável turnSpeed que será a velocidade de rotaçã...

GUI

Nesse artigo será abordado como trabalhar com alguns elementos da GUI. Os elementos abordados serão, TextField, Button, Slider e Box. Quando for trabalhar com elementos da UI (User Interface) deve-se primeiro fazer o import necessário no início do arquivo de script  import UnityEngine.UI;  A função OnGUI da própria Unity é a responsável por exibir e interagir com os elementos criados via código.  function OnGUI(){  } Botão Para criar botões, o código será o seguinte if ( GUI.Button( Rect( 10, 70, 100, 30 ), "Input"  ) ){         Debug.Log(stringToEdit);     } Essa é uma das maneiras de criar um botão, pois o método GUI.Button tem várias assinaturas. Da maneira utilizada o primeiro parâmetro está relacionado à posição do botão na interface, que s...

Input GetKey

Quando se trata de entrada do usuário, na unity temos vários métodos que permitem isso, nesse post será explicado sobre as teclas. Quando se quer saber se alguma tecla foi apertada, pode-se usar Input.GetKey, Input.GetKeyDown e Input.GetKeyUp. Esse três métodos retornam valores booleanos (true ou false), caso a tecla passada como parâmetro atenda a condição de cada método, por exemplo Input.GetKey(tecla) : retorna true se a tecla estiver pressionada. Input.GetKeyDown(tecla) : retorna true se a tecla foi pressionada e já altera seu valor, enquanto a tecla nao for solta e pressionada novamente, não volta a ser true. Input.GetKeyUp(tecla) : retorna true quando a tecla é solta, o oposto do Input.GetKeyDown. O exemplo abaixo vai mudar a cor do nosso gameObject dependendo do estado da tecla. private var cor:Material; function Start () { cor = GetComponent. ().material; } function Update () {...