Projetos RAD : Unity 3D 
Colisõ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 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); 
}
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 BASICO 
forca.x = Input.GetAxis("Horizontal"); 
//forca.y = 0; 
forca.z = Input.GetAxis("Vertical"); 
forca *= velocidade; 
//APLICANDO GRAVIDADE SEMPRE 
forca.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); 
}

Mais conteúdo relacionado

PPT
Aula5 colisao1
PPT
Aula8 instancias
PPT
Aula7 velocidade
PPT
Aula anima1
PPT
Aula disparos
ODP
Aula disparos
PPT
Aula3 input
PPT
Aula9 material
Aula5 colisao1
Aula8 instancias
Aula7 velocidade
Aula anima1
Aula disparos
Aula disparos
Aula3 input
Aula9 material

Mais de Marcos Batista (15)

PPT
Aula terrain
PPT
Aula som
PPT
Aula sky
PPT
Aula particulas
PPT
Aula modelos
PPT
Aula menus
PPT
Aula maps
PPT
Aula ia2
PPT
PPT
Aula gui
PPT
Aula cameras
PPT
Aula anima-modelos
PPT
Aula4 debug
PPT
Aula2 intro2
PPT
Aula1 intro
Aula terrain
Aula som
Aula sky
Aula particulas
Aula modelos
Aula menus
Aula maps
Aula ia2
Aula gui
Aula cameras
Aula anima-modelos
Aula4 debug
Aula2 intro2
Aula1 intro
Anúncio

Último (20)

PPSX
1. A Cultura da Ágora - HistóriaCArtes.ppsx
PPTX
Adaptação Curricular para Alunos com Deficiências - EMEB. ODIR (1).pptx
PDF
morfologia5.pdfllllllllllllllllllllllllllll
PDF
edital-de-chamamento-publico-no-3-2025.pdf
PPTX
PERÍODO SIMPLES - TERMOS ESSENCIAIS DA ORAÇÃO - Valdeci.pptx
PPTX
NR 5 Treinamento completo gestão CIPA.pptx
PPT
1ª Telefonia Fixa Padrao Novo Jailton 2012_22.ppt
PPTX
entorseestadodechoque. Aula de primeiros socorros
PPTX
Treinamento de Espaço Confinado_Trabalhadores e Vigias NR 33.pptx
PPTX
Slides Lição 8, Betel, Jesus e a Mulher Adúltera, 3Tr25.pptx
PPT
AS VANGUARDAS EUROPEIAS NA LITERATURA E N
PDF
Historia da Gastronomia Mundial por Daianna Marques dos Santos
PPTX
São João Eudes, 1601 – 1680, padre e fondador, Francés.pptx
PDF
HORÁRIO GERAL SIGAA 2025_PRÉVIA_SIGAA-1.pdf
PDF
DECISÃO (2).pdf Derrota histórica do Sintero expõe racha interno e fragilidad...
PPSX
4. A Cultura da Catedral - HistóriaCArtes .ppsx
PDF
Caderno do Futuro 1º Ano CIÊNCIAS Aluno.pdf
PDF
ENTREVISTA-PROCESSO-SELETIVO-idc8j5.pdf 1
PPTX
125511 - Aula 1 - América portuguesa antes da conquista patrimônio e preserva...
PDF
Historia-da-Psicologia-Rumos-e-percursos.pdf
1. A Cultura da Ágora - HistóriaCArtes.ppsx
Adaptação Curricular para Alunos com Deficiências - EMEB. ODIR (1).pptx
morfologia5.pdfllllllllllllllllllllllllllll
edital-de-chamamento-publico-no-3-2025.pdf
PERÍODO SIMPLES - TERMOS ESSENCIAIS DA ORAÇÃO - Valdeci.pptx
NR 5 Treinamento completo gestão CIPA.pptx
1ª Telefonia Fixa Padrao Novo Jailton 2012_22.ppt
entorseestadodechoque. Aula de primeiros socorros
Treinamento de Espaço Confinado_Trabalhadores e Vigias NR 33.pptx
Slides Lição 8, Betel, Jesus e a Mulher Adúltera, 3Tr25.pptx
AS VANGUARDAS EUROPEIAS NA LITERATURA E N
Historia da Gastronomia Mundial por Daianna Marques dos Santos
São João Eudes, 1601 – 1680, padre e fondador, Francés.pptx
HORÁRIO GERAL SIGAA 2025_PRÉVIA_SIGAA-1.pdf
DECISÃO (2).pdf Derrota histórica do Sintero expõe racha interno e fragilidad...
4. A Cultura da Catedral - HistóriaCArtes .ppsx
Caderno do Futuro 1º Ano CIÊNCIAS Aluno.pdf
ENTREVISTA-PROCESSO-SELETIVO-idc8j5.pdf 1
125511 - Aula 1 - América portuguesa antes da conquista patrimônio e preserva...
Historia-da-Psicologia-Rumos-e-percursos.pdf
Anúncio

Aula6 colisao2

  • 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
  • 9. Unity • Criando gravidade manualmente – Basicamente aplicar força y (gravidade) var gravidade = 20; Function Update() { //CAPTURA INPUT BASICO forca.x = Input.GetAxis("Horizontal"); //forca.y = 0; forca.z = Input.GetAxis("Vertical"); forca *= velocidade; //APLICANDO GRAVIDADE SEMPRE forca.y -= gravidade; forca *= Time.deltaTime; ....
  • 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
  • 15. 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); }