Aula6 colisao2

15
Projetos RAD : Unity 3D Colisões Parte 2 Character Controller e Triggers Augusto Bülow

Transcript of Aula6 colisao2

Page 1: Aula6 colisao2

Projetos RAD : Unity 3DColisões Parte 2

Character Controller e Triggers

Augusto Bülow

Page 2: Aula6 colisao2

Unity

• Colisões Objetos– Collider : formato da colisão

• Estáticos (static collider)

– Dinâmicos : componentes adicionais• RigidBody :

– movimento e comportamento físico (realístico)

• Character Controller :– Componnte especial para players

– Detecção de colisões geral

– Controle mais direto (física = simulação automática)

Page 3: Aula6 colisao2

Unity

• Character Controller– Personagens em geral controlados por animações e

ações, sem necessariamente um comportamento realístico (total)

• Utiliza-se Character Controller• Maior controle geral (estável em colisões)• Transformações baseadas principalmente em script

– Quando personagem planejado para ter física real:• Utiliza-se RigidBody• Comportamento imprevisível (realístico)• Transformações automáticas baseadas em colisões

Page 4: Aula6 colisao2

Unity

• Character Controller– Adiciona-se por:

• Component->Physics->Character Controller

– Sobrepõe o Collider anterior do objeto– Pode ser utilizado com RigidBody, mas sua

utilização é alternativa (à física realística)

– Character controller: • comandos específicos para controle / movimento

Page 5: Aula6 colisao2

Unity

• Character Controller– Altura– Raio– Slope Limit

• Limite para subida em rampas (graus)

– Step Offset• Altura subida degraus

– Skin Width• Valores maiores para

evitar colisões próximas (grudar = stuck)

Page 6: Aula6 colisao2

Unity

• Acessar o componente Character Controller não pode ser diretamente

• Precisa localizar o componente com:

var ponteiro = GetComponent(CharacterControler)

• GetComponent pode ser usado para acessar qualquer componente do Objeto

• Chamar pelo nome, sem espaços, sem aspas

Page 7: Aula6 colisao2

Unity• Character Controller : função Move• Código básico para movimento:

var velocidade = 15;var forca : Vector3;function Update () {

//CAPTURA INPUT BASICOforca.x = Input.GetAxis("Horizontal");forca.y = 0;forca.z = Input.GetAxis("Vertical");forca *= velocidade;forca *= Time.deltaTime;var controller = GetComponent(CharacterController);controller.Move(forca);}

Page 8: Aula6 colisao2

Unity

• Não usa gravidade direta• Tem Flags auxiliares

– Setadas com o movimento– isGrounded = no chão– CollisionFlags = detalhes da colisão

• None• Sides• Above• Below

Page 9: Aula6 colisao2

Unity• Criando gravidade manualmente

– Basicamente aplicar força y (gravidade)

var gravidade = 20;Function Update() {

//CAPTURA INPUT BASICOforca.x = Input.GetAxis("Horizontal");//forca.y = 0;forca.z = Input.GetAxis("Vertical");forca *= velocidade;//APLICANDO GRAVIDADE SEMPREforca.y -= gravidade;forca *= Time.deltaTime;....

Page 10: Aula6 colisao2

Unity• Criando pulo básico – força y (por tecla)

– Basicamente aplicar força y (pulo)– Gravidade devolve ela a zero (ao solo)– Adicionalmente – só pular se no chão (isGrounded)

var forca_pulo = 20;var no_chao = 0;.... (antes do controller.Move)if (Input.GetKeyDown("space") && no_chao == 1) {

forca.y = forca_pulo;}

... (FLAG atualizada após o Move)

if (controller.isGrounded) {no_chao = 1;}

Page 11: Aula6 colisao2

Unity• Tratando colisões manualmente

– Colisões disparam mensagens para os objetos envolvidos

– Colisões em geral (Colliders):• OnCollisionEnter• OnCollisionStay• OnCollisionExit

– Colisões Character Controller : ESPECIAL• OnControllerColliderHit

• Objeto que colidiu também é passado na mensagem (ponteiro)

Page 12: Aula6 colisao2

Unity• Character Controller : Colisão básica• Recebe um ControllerColliderHit

– Possível acessar propriedades do objeto colidido• Mensagem OnControllerColliderHit • Exemplo:

– retornar o nome do objeto colidido em um Guitext

function OnControllerColliderHit (quem : ControllerColliderHit ) {debug = GameObject.Find("Debug1");debug.guiText.text = "Colisao: ";debug.guiText.text += quem.gameObject.name;}

Page 13: Aula6 colisao2

Unity• RigidBody e Colliders normais• Recebe um Collider

– Possível acessar propriedades do objeto colidido• Mensagens OnCollisionEnter• Observar:

– Character Controller uso diferenciado

function OnCollisionEnter (quem : Collider ) {debug = GameObject.Find("Debug1");debug.guiText.text = "Colisao: ";debug.guiText.text += quem.gameObject.name;}

Page 14: Aula6 colisao2

Unity• Trigger = Gatilhos• Colisões especiais – objetos de marcação

– Não esperada colisão com reação diretamente– Colisão para ativação ou informação– Objeto basicamente passável (mas detecta a colisão)– Uso:

• Bônus e itens• indicar entrada em parte do cenário, etc

– Mensagens Específicas• OnTriggerEnter• OnTriggerStay• OnTriggerExit

Page 15: Aula6 colisao2

Unity• Trigger : Exemplo Colisão

function OnTriggerEnter (quem : Collider ) {debug = GameObject.Find("Debug1");debug.guiText.text = "Colisao TRIGGER: ";debug.guiText.text += quem.gameObject.name;

//Remove item que colidiu Destroy(quem.gameObject);}