O documento discute colisões em Unity 3D, especificamente o Character Controller e triggers. Explica as diferenças entre o Character Controller e RigidBody para controlar personagens e como usar funções como OnControllerColliderHit e OnTriggerEnter para tratar colisões e ativar eventos.
1. Projetos RAD : Unity 3D
Colisões Parte 2
Character Controller e Triggers
Augusto Bülow
2. 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)
3. 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
4. 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
5. 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)
6. 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
7. Unity
• Character Controller : função Move
• Código básico para movimento:
var velocidade = 15;
var forca : Vector3;
function Update () {
//CAPTURA INPUT BASICO
forca.x = Input.GetAxis("Horizontal");
forca.y = 0;
forca.z = Input.GetAxis("Vertical");
forca *= velocidade;
forca *= Time.deltaTime;
var controller = GetComponent(CharacterController);
controller.Move(forca);
}
8. 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
10. 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;
}
11. 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)
12. 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;
}
13. 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;
}
14. 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