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
Postar um comentário