Aula6 colisao2
-
Upload
marcos-batista -
Category
Education
-
view
397 -
download
6
Transcript of Aula6 colisao2
Projetos RAD : Unity 3DColisões Parte 2
Character Controller e Triggers
Augusto Bülow
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)
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
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
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)
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
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);}
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
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;....
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;}
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)
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;}
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;}
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
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);}