21
Projeto de jogos RAD: Câmeras Augusto Bülow

Aula cameras

Embed Size (px)

DESCRIPTION

Aula para criação de cameras para unity3D

Citation preview

Page 1: Aula cameras

Projeto de jogos RAD:Câmeras

Augusto Bülow

Page 2: Aula cameras

Unity3D

• Câmera = nossos olhos no game• Game: Mostra o que a câmera aponta

• Câmeras variadas = tipo de jogo• 1a pessoa, 3a pessoa, fixa, top / side view

• Entender câmera como objeto 3D• Posição : onde está no mundo• Ângulo : para onde aponta (o que focaliza)

Page 3: Aula cameras

Unity3D

• Em todos os momentos do jogo• Câmera em uma posição (X,Y,Z)• Câmera com uma rotação (X,Y,Z)• resultado = cena do jogo

• Câmera mostra a ação do jogo

• Câmera essencial gameplay *

Page 4: Aula cameras

Unity3D

• Câmeras prontas : Unity• Standard Assets -> Camera Scripts• Mouse Look:

• movimento mouse = ângulos da câmera• Limites básicos de ângulos

• Normal 1a pessoa

Page 5: Aula cameras

Unity3D• Código básico para Mouse Lookfunction Update () {

forca_angulo.y = Input.GetAxis("Mouse X");

forca_angulo.x = -Input.GetAxis("Mouse Y");

forca_angulo.z = 0;

//adiciono a forca aos angulos atuais da camera

angulo_camera += forca_angulo;

//limites nos angulo_camera

angulo_camera.x = Mathf.Clamp(angulo_camera.x, -30, 30);

//rotar a camera diretamente - uso eulerAngles facilita a rot

transform.eulerAngles = angulo_camera;

}

Page 6: Aula cameras

Unity3D• Smooth Look at

• Olhando para o player (alvo)• Fazer apontar para posição do foco

• Saber posição do alvo• Ajustar ângulos para visualizar alvo

• + Separar modos de câmera = var

Page 7: Aula cameras

Unity3D• Código para Smooth Look atvar foco : Transform;

function Update () {

if (Input.GetKeyDown("1")) { modo_camera = 1; }

if (Input.GetKeyDown("2")) { modo_camera = 2; }

if (modo_camera == 2) {

transform.LookAt(foco);

}

Page 8: Aula cameras

Unity3D• Câmera em posição fixa, olhando o alvovar foco : Transform;

function Update () {

if (Input.GetKeyDown(“3")) { modo_camera = 3; }

if (modo_camera == 3) {

transform.position.x = 0;

transform.position.y = 10;

transform.position.x = 2;

transform.LookAt(foco);

}

Page 9: Aula cameras

Unity3D• Câmera em posição fixa, com ângulo fixo

• Top View / Side View

• Planejar e setar posição e ângulos (fixos)function Update () {

if (Input.GetKeyDown(“4")) { modo_camera = 4; }

if (modo_camera == 4) {

transform.position.x = 0;

transform.position.y = 20;

transform.position.z = -20;

transform.eulerAngles(30, 0, 0);

}

Page 10: Aula cameras

Unity3D• Adicionalmente câmera pode ser

Ortográfica (sem perspectiva)

• Específica para algumas visões / jogosif (modo_camera == 4) {

transform.position.x = 0;

transform.position.y = 20;

transform.position.z = -20;

transform.eulerAngles = Vector3(30, 0, 0);

camera.orthographic = enabled;

camera.orthographicSize = 10;}

Page 11: Aula cameras

Unity3D• Câmera 1a Pessoa

• Segue posição do player

• Segue rotação do player

• + ângulos adicionais : Mouse Look• Não movem o player – apenas a câmera

• Altura adicional + posição dos olhos

Page 12: Aula cameras

Unity3D• Camera 1a Pessoa : Código Básico

var jogador : Transform;

var altura_olhos = 0.5;

if (modo_camera == 5) {

transform.position = jogador.position;

transform.position.y += altura_olhos;

transform.rotation = jogador.rotation;

}

Page 13: Aula cameras

Unity3D• Camera 1a Pessoa : Código Básico +

Ângulo adicional (cima / baixo)if (modo_camera == 5) {

transform.position = jogador.position;

transform.position.y += altura_olhos;

//rotação basica X inclinação (TILT) move mouse

aux_x += -Input.GetAxis("Mouse Y");

angulo_camera.x = jogador.rotation.x + aux_x;angulo_camera.y = jogador.eulerAngles.y;

angulo_camera.z = jogador.eulerAngles.z;

transform.eulerAngles = angulo_camera;

}

Page 14: Aula cameras

Unity3D• Câmera 3a pessoa, seguir em posição

relativa ao player• Atrás, X distancia• Acima, Y distancia

• + Olhar para o player

• Calcular posição relativa• Em relação ao ângulo do player• Trigonometria

Page 15: Aula cameras

Unity3D• Posição relativa (em relação ao ângulo)

• Trigonometria básica (Seno e Coseno)

• Classe Mathf.

• Sin e Cos = usam medidas em RAD

• Converter Rad em Degrees• Rad = ângulo * Mathf.Deg2Rad;• Grau = ângulo * Mathf.Rad2Deg;

Page 16: Aula cameras

Unity3Dvar dist_segue = -2;

var altura_segue = 2;

if (modo_camera == 6) {

var angulo = jogador.eulerAngles.y * Mathf.Deg2Rad;

transform.position.x = jogador.position.x + dist_segue * Mathf.Sin(angulo);

transform.position.y = jogador.position.y + altura_segue;

transform.position.z = jogador.position.z + dist_segue * Mathf.Cos(angulo);

transform.LookAt(jogador);

}

Page 17: Aula cameras

Unity3D• Orbitar player = posição relativa (ao

ângulo) + ângulo adicional variável

• Câmera Estilo Matrixif (modo_camera == 7) {

angulo_matrix += 1;

transform.position.x = jogador.position.x + dist_segue * Mathf.Sin(angulo_matrix * Mathf.Deg2Rad);

transform.position.y = jogador.position.y + altura_segue;

transform.position.z = jogador.position.z + dist_segue * Mathf.Cos(angulo_matrix * Mathf.Deg2Rad);

transform.LookAt(jogador);

}

Page 18: Aula cameras

Unity3D• Field of View (FOV) campo de visão

• Abertura da lente (Câmera)

• Funciona como • Zoom (sniper, binóculo...)

• Perspectiva maior (distância e velocidade)if (Input.GetKey("i")) {

camera.fieldOfView += 5 * Time.deltaTime;

}

if (Input.GetKey("o")) {

camera.fieldOfView -= 5 * Time.deltaTime;

}

Page 19: Aula cameras

Unity3D• Render Port (view)

• Definição de tamanho

• Definição de posição na tela

• Valores de 0..1 (porcentagem da tela)

• Exemplo:

Page 20: Aula cameras

Unity3D• Possibilidade de inserir mais câmeras de jogo

(independentes)

• Cada câmera com suas definições de tamanho e posição

• Cada câmera com sua posição e ângulos

Page 21: Aula cameras

Unity3D• Definição de Corte (Clip)

• Distancia da camera objetos não são renderizados

• Próximos e distantes

• = performance

• + necessidade de distancia por cenário e tipo de jogo

• Manter menor distancia possível (far)• Near – próximos a câmera

• Far – distantes da câmera