Pular para o conteúdo principal

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ção da câmera e a variável boolean, smooth, que indica se o movimento da câmera de de forma gradual ou mais "seca".

De modo privado existem as variáveis offset, que é a diferença de posição entre o player e a câmera, e a velocidade que é necessária para a função SmoothDamp, usada mais para frente.

Como já visto, na função Start() subtraiu a posição da câmera da posição do player, assim chegando no resultado inicial do offset.

Dessa vez, na função Start(), tem-se uma nova linha de código, relacionada ao cursor do mouse. Cursor.lockState, informa à Unity quando o modo do cursor, dessa vez foi escolhida o modo Locked, que trava o cursor na tela, caso você necessite do cursor, pode tirar essa linha, a opção CursorLockMode tem três possíveis valores e são eles: None, Confined e Locked.

Agora, como o movimento da câmera será afetado, usa-se a função LateUpdate(), que executa após cada frame, ou seja, o player é movido na função Update() do seu script, e depois disso o movimento da câmera é realizado. O offset agora será uma multiplicação do ângulo de rotação da câmera, que será dado de acordo com o movimento horizontal do mouse (Mouse X) vezes o turnSpeed, isso no eixo Y (Vector.up) e o offset anterior.

Esse operação é necessária pois agora além da câmera seguir player, ela também poderá girar ao seu redor.

E seguida, tem-se aquele mesmo código de movimento feito no post anterior, que faz a câmera seguir o player, com smooth ou não, dependendo da escolha do programador. E por último, o código LootAt faz com que a câmera aponte/olhe para o player.

Pronto!

Com essas poucas linhas já pode-se ter uma câmera se que segue e gira em torno do player. Lembrando que esse script deve ser colocado na câmera.

Até a próxima!

Comentários

Postagens mais visitadas deste blog

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 () {...