aula cameras
Post on 02-Jul-2015
155 Views
Preview:
DESCRIPTION
TRANSCRIPT
Projeto de jogos RAD:Câmeras
Augusto Bülow
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)
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 *
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
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;
}
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
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);
}
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);
}
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);
}
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;}
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
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;
}
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;
}
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
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;
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);
}
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);
}
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;
}
Unity3D• Render Port (view)
• Definição de tamanho
• Definição de posição na tela
• Valores de 0..1 (porcentagem da tela)
• Exemplo:
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
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
top related