Aula cameras

508 visualizações

Publicada em

Aula para criação de cameras para unity3D

Publicada em: Educação
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
508
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
13
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Aula cameras

  1. 1. Projeto de jogos RAD: Câmeras Augusto Bülow
  2. 2. 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)
  3. 3. 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 *
  4. 4. 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
  5. 5. Unity3D • Código básico para Mouse Look function 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; }
  6. 6. 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
  7. 7. Unity3D • Código para Smooth Look at var 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); }
  8. 8. Unity3D • Câmera em posição fixa, olhando o alvo var 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); }
  9. 9. 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); }
  10. 10. Unity3D • Adicionalmente câmera pode ser Ortográfica (sem perspectiva) • Específica para algumas visões / jogos if (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; }
  11. 11. 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
  12. 12. 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; }
  13. 13. 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; }
  14. 14. 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
  15. 15. 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;
  16. 16. Unity3D var 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); }
  17. 17. Unity3D • Orbitar player = posição relativa (ao ângulo) + ângulo adicional variável • Câmera Estilo Matrix if (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); }
  18. 18. 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; }
  19. 19. Unity3D • Render Port (view) • Definição de tamanho • Definição de posição na tela • Valores de 0..1 (porcentagem da tela) • Exemplo:
  20. 20. 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
  21. 21. 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

×