SlideShare a Scribd company logo
1 of 18
Projeto de jogos RAD: 
Disparos, tiros e balas 
Augusto Bülow
Unity3D 
• Tiros: analogia ao mundo real 
• Objeto disparado com direção e velocidade 
• Jogo : mesma forma 
• Objeto próprio = bala 
• Velocidade(s) iniciais 
• Percebe / Trata colisões : códigos 
• Efeitos: inicial, rastro, explosão 
• Prefab: re-utilização balas
Unity3D 
• Prototipar objeto – criação normal 
• Quando completo = cria-se PREFAB 
• Criar Objeto Bala (esfera) 
• Precisa de Collider (RigidBody*) 
• Balas alta velocidade = desligar gravidade 
• RigidBody / UseGravity = 0 
• Criar Script controle básico da bala
Unity3D 
• Script Básico: 
• Disparar sons 
• Inicializar tiro (velocidades) 
• Ativar efeitos 
• Perceber colisões -> Criar efeito 
• Perceber colisões -> Remover 
• Remover distância * (finalizar sempre objetos)
Unity3D 
var vetor_forca : Vector3; 
var velo_tiro = 300; 
//inicializar 
function Start () { 
Start = inicializa velo bala 
//DEBUG = MOSTRA DISPARO 
debug = gameObject.Find("Debug2"); 
debug.guiText.text = "BALA DISPARADA"; 
//forca inicial 
vetor_forca.x = 0; 
vetor_forca.y = 0; 
vetor_forca.z = velo_tiro; 
//converte forca para direcao 
vetor_forca = transform.TransformDirection(vetor_forca); 
//adiciona forca inicial da bala ( convertida para sua direcao) 
rigidbody.AddForce(vetor_forca); 
}
Unity3D 
• Update = usando Física = FixedUpdate() 
• Cuidar da remoção da bala * 
• Por tempo 
• Por distância 
//fisica = fixed update 
function FixedUpdate () { 
//distancia em relação ao player – localizar player 
player = GameObject.Find("Player"); 
var distancia = Vector3.Distance(transform.position,player.transform.position); 
if (distancia > 100) { 
Destroy(gameObject); 
} 
}
Unity3D 
• Perceber / Controlar Colisão da Bala 
• RigidBody = OnCollisionEnter 
// Perceber tratar colisoes 
function OnCollisionEnter(quem : Collision) { 
//DEBUG = MOSTRA COLSIAO / DEL 
debug = gameObject.Find("Debug2"); 
debug.guiText.text = "BALA COLIDIU"; 
//auto destroi na colisao 
Destroy(gameObject); 
}
Unity3D 
• Disparo Balas : código em quem vai disparar 
• Re-utilização objeto bala = Instantiate / Prefab 
• Transformar nossa bala em Prefab 
• Criar novo prefab -> Inserir objeto bala no prefab 
• Instantiate -> utiliza Prefab 
// Tecla ativa tiro 
if (Input.GetButton("Fire1") { 
Atira(); 
} 
• Controlando disparo com função
Unity3D 
• Função disparo / Atira 
//Variavel ponteiro para bala (prefab) 
var bala : Transform; 
function Atira() { 
//CRIA BALA POSICAO E ROTACAO DE QUEM DISPARA 
Instantiate(bala, transform.position, transform.rotation); 
}
Unity3D 
• Possíveis problemas neste ponto 
• Tiros sem delay: 
• Muitas balas criadas (1 por ciclo) = auto colisão entre balas 
• Colisão com objeto “emissor” 
• Tiro disparado da posição do player = auto colisão com o player 
• Inicializado dentro da área de colisão de “quem dispara”
Unity3D 
• Temporizar tiros: delay mínimo entre-tiros (normal armas) 
var timer_tiro = 0.0; 
var delay_tiro = 0.5; 
.... 
//ZERA TIMER ENTRE TIROS 
if (timer_tiro > 0) { 
timer_tiro -= Time.deltaTime; 
} 
//DISPARA TECLA + TIMER OK 
if (Input.GetButton("Fire1") && timer_tiro <= 0) { 
timer_tiro = delay_tiro; 
Atira(); 
}
Unity3D 
• Posição inicial bala = fora da colisão do emissor 
• Calcular Posição relativa = a frente (fora collider) 
var posicao_bala : Vector3; 
var dist_tiro = 1.5; 
var altura_tiro = 0.9; 
function Atira() { 
//calculando posicao relativa - a frente - evita colisao player 
var angulo = transform.eulerAngles.y * Mathf.Deg2Rad; 
posicao_bala.x = transform.position.x + dist_tiro * Mathf.Sin(angulo); 
posicao_bala.y = transform.position.y + altura_tiro; 
posicao_bala.z = transform.position.z + dist_tiro * Mathf.Cos(angulo); 
//CRIA TIRO POSICAO LIVRE 
Instantiate(bala, posicao_bala, transform.rotation); 
}
Unity3D 
• Criando efeito para explosão da bala 
• Criar um objeto : controlar a explosão 
• Transformar em Prefab pós pronto (re-uso) 
• Criar objeto vazio 
• Adicionar / Criar efeito explosão (partículas) 
• Adicionar Particle Emitter + Particle Renderer + Particle Animator 
• Setar Renderer -> Material -> Fire Add 
• Setar Emissor: OneShot 
• Setar Animator: AutoDestruct 
• Roda uma vez e Auto-remove objeto Explosão
Unity3D 
• Acionar explosão no momento da batida : bala 
• Instanciar objeto explosão (Prefab) 
• Codigo bala: 
var explode = 0; 
var explosao_obj : Transform; 
..... 
//cria explosao e destroi – centralizo cod. no update 
if (explode == 1) { 
Instantiate(explosao_obj, transform.position, transform.rotation); 
Destroy(gameObject); 
}
Unity3D 
• Sons acionados por eventos 
• Facilidade: Sons vinculados aos objetos 
– - Inserir AudioSource 
– - Autoplay : play on awake 
• - criaçao da bala: som disparo 
• - criaçao da explosão: som 
• Inserir sons exemplo: arma01.wav, explo01.wav
Unity3D 
• Inimigos IA = mesmo esquema de tiro 
• Pode-se aproveitar codigo 
• Diferença: IA auto-ativa tiros, não teclas 
– - Criar estados especifico para atirar IA* 
– - Observar timer 
– - Observar posiçao 
• - não colidir ao iniciar
Unity3D 
• Atirador IA simples 
var timer_atira = 0.0; 
var entre_tiros =1; 
function Update () { 
player = GameObject.Find("Player"); 
transform.LookAt(player.transform.position); 
timer_atira -= Time.deltaTime; 
if (timer_atira <= 0) { 
timer_atira = entre_tiros; 
Atira(); 
}
Unity3D 
• Função atira = mesma 
var bala : Transform; 
var posicao_bala : Vector3; 
var dist_tiro = 1.5; 
var altura_tiro = 0.6; 
function Atira() { 
//calculando posicao relativa - a frente - evita colisao player 
var angulo = transform.eulerAngles.y * Mathf.Deg2Rad; 
posicao_bala.x = transform.position.x + dist_tiro * Mathf.Sin(angulo); 
posicao_bala.y = transform.position.y + altura_tiro; 
posicao_bala.z = transform.position.z + dist_tiro * Mathf.Cos(angulo); 
//CRIA TIRO POSICAO LIVRE 
Instantiate(bala, posicao_bala, transform.rotation); 
}

More Related Content

Similar to Aula disparos (7)

Aula cameras
Aula camerasAula cameras
Aula cameras
 
Aula anima-modelos
Aula anima-modelosAula anima-modelos
Aula anima-modelos
 
Aula ia
Aula iaAula ia
Aula ia
 
06 colisao final
06 colisao final06 colisao final
06 colisao final
 
Aula8 instancias
Aula8 instanciasAula8 instancias
Aula8 instancias
 
Aula1 intro
Aula1  introAula1  intro
Aula1 intro
 
Aula anima1
Aula anima1Aula anima1
Aula anima1
 

More from Marcos Batista (17)

Aula terrain
Aula terrainAula terrain
Aula terrain
 
Aula som
Aula somAula som
Aula som
 
Aula sky
Aula skyAula sky
Aula sky
 
Aula particulas
Aula particulasAula particulas
Aula particulas
 
Aula modelos
Aula modelosAula modelos
Aula modelos
 
Aula menus
Aula menusAula menus
Aula menus
 
Aula maps
Aula mapsAula maps
Aula maps
 
Aula ia2
Aula ia2Aula ia2
Aula ia2
 
Aula gui
Aula guiAula gui
Aula gui
 
Aula disparos
Aula disparosAula disparos
Aula disparos
 
Aula9 material
Aula9 materialAula9 material
Aula9 material
 
Aula7 velocidade
Aula7 velocidadeAula7 velocidade
Aula7 velocidade
 
Aula6 colisao2
Aula6 colisao2Aula6 colisao2
Aula6 colisao2
 
Aula5 colisao1
Aula5 colisao1Aula5 colisao1
Aula5 colisao1
 
Aula4 debug
Aula4   debugAula4   debug
Aula4 debug
 
Aula3 input
Aula3   inputAula3   input
Aula3 input
 
Aula2 intro2
Aula2   intro2Aula2   intro2
Aula2 intro2
 

Recently uploaded

Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
marlene54545
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
AntonioVieira539017
 

Recently uploaded (20)

PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptx
 
Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptx
 
LENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretaçãoLENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretação
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmico
 
Conflitos entre: ISRAEL E PALESTINA.pdf
Conflitos entre:  ISRAEL E PALESTINA.pdfConflitos entre:  ISRAEL E PALESTINA.pdf
Conflitos entre: ISRAEL E PALESTINA.pdf
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfTCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
 
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 

Aula disparos

  • 1. Projeto de jogos RAD: Disparos, tiros e balas Augusto Bülow
  • 2. Unity3D • Tiros: analogia ao mundo real • Objeto disparado com direção e velocidade • Jogo : mesma forma • Objeto próprio = bala • Velocidade(s) iniciais • Percebe / Trata colisões : códigos • Efeitos: inicial, rastro, explosão • Prefab: re-utilização balas
  • 3. Unity3D • Prototipar objeto – criação normal • Quando completo = cria-se PREFAB • Criar Objeto Bala (esfera) • Precisa de Collider (RigidBody*) • Balas alta velocidade = desligar gravidade • RigidBody / UseGravity = 0 • Criar Script controle básico da bala
  • 4. Unity3D • Script Básico: • Disparar sons • Inicializar tiro (velocidades) • Ativar efeitos • Perceber colisões -> Criar efeito • Perceber colisões -> Remover • Remover distância * (finalizar sempre objetos)
  • 5. Unity3D var vetor_forca : Vector3; var velo_tiro = 300; //inicializar function Start () { Start = inicializa velo bala //DEBUG = MOSTRA DISPARO debug = gameObject.Find("Debug2"); debug.guiText.text = "BALA DISPARADA"; //forca inicial vetor_forca.x = 0; vetor_forca.y = 0; vetor_forca.z = velo_tiro; //converte forca para direcao vetor_forca = transform.TransformDirection(vetor_forca); //adiciona forca inicial da bala ( convertida para sua direcao) rigidbody.AddForce(vetor_forca); }
  • 6. Unity3D • Update = usando Física = FixedUpdate() • Cuidar da remoção da bala * • Por tempo • Por distância //fisica = fixed update function FixedUpdate () { //distancia em relação ao player – localizar player player = GameObject.Find("Player"); var distancia = Vector3.Distance(transform.position,player.transform.position); if (distancia > 100) { Destroy(gameObject); } }
  • 7. Unity3D • Perceber / Controlar Colisão da Bala • RigidBody = OnCollisionEnter // Perceber tratar colisoes function OnCollisionEnter(quem : Collision) { //DEBUG = MOSTRA COLSIAO / DEL debug = gameObject.Find("Debug2"); debug.guiText.text = "BALA COLIDIU"; //auto destroi na colisao Destroy(gameObject); }
  • 8. Unity3D • Disparo Balas : código em quem vai disparar • Re-utilização objeto bala = Instantiate / Prefab • Transformar nossa bala em Prefab • Criar novo prefab -> Inserir objeto bala no prefab • Instantiate -> utiliza Prefab // Tecla ativa tiro if (Input.GetButton("Fire1") { Atira(); } • Controlando disparo com função
  • 9. Unity3D • Função disparo / Atira //Variavel ponteiro para bala (prefab) var bala : Transform; function Atira() { //CRIA BALA POSICAO E ROTACAO DE QUEM DISPARA Instantiate(bala, transform.position, transform.rotation); }
  • 10. Unity3D • Possíveis problemas neste ponto • Tiros sem delay: • Muitas balas criadas (1 por ciclo) = auto colisão entre balas • Colisão com objeto “emissor” • Tiro disparado da posição do player = auto colisão com o player • Inicializado dentro da área de colisão de “quem dispara”
  • 11. Unity3D • Temporizar tiros: delay mínimo entre-tiros (normal armas) var timer_tiro = 0.0; var delay_tiro = 0.5; .... //ZERA TIMER ENTRE TIROS if (timer_tiro > 0) { timer_tiro -= Time.deltaTime; } //DISPARA TECLA + TIMER OK if (Input.GetButton("Fire1") && timer_tiro <= 0) { timer_tiro = delay_tiro; Atira(); }
  • 12. Unity3D • Posição inicial bala = fora da colisão do emissor • Calcular Posição relativa = a frente (fora collider) var posicao_bala : Vector3; var dist_tiro = 1.5; var altura_tiro = 0.9; function Atira() { //calculando posicao relativa - a frente - evita colisao player var angulo = transform.eulerAngles.y * Mathf.Deg2Rad; posicao_bala.x = transform.position.x + dist_tiro * Mathf.Sin(angulo); posicao_bala.y = transform.position.y + altura_tiro; posicao_bala.z = transform.position.z + dist_tiro * Mathf.Cos(angulo); //CRIA TIRO POSICAO LIVRE Instantiate(bala, posicao_bala, transform.rotation); }
  • 13. Unity3D • Criando efeito para explosão da bala • Criar um objeto : controlar a explosão • Transformar em Prefab pós pronto (re-uso) • Criar objeto vazio • Adicionar / Criar efeito explosão (partículas) • Adicionar Particle Emitter + Particle Renderer + Particle Animator • Setar Renderer -> Material -> Fire Add • Setar Emissor: OneShot • Setar Animator: AutoDestruct • Roda uma vez e Auto-remove objeto Explosão
  • 14. Unity3D • Acionar explosão no momento da batida : bala • Instanciar objeto explosão (Prefab) • Codigo bala: var explode = 0; var explosao_obj : Transform; ..... //cria explosao e destroi – centralizo cod. no update if (explode == 1) { Instantiate(explosao_obj, transform.position, transform.rotation); Destroy(gameObject); }
  • 15. Unity3D • Sons acionados por eventos • Facilidade: Sons vinculados aos objetos – - Inserir AudioSource – - Autoplay : play on awake • - criaçao da bala: som disparo • - criaçao da explosão: som • Inserir sons exemplo: arma01.wav, explo01.wav
  • 16. Unity3D • Inimigos IA = mesmo esquema de tiro • Pode-se aproveitar codigo • Diferença: IA auto-ativa tiros, não teclas – - Criar estados especifico para atirar IA* – - Observar timer – - Observar posiçao • - não colidir ao iniciar
  • 17. Unity3D • Atirador IA simples var timer_atira = 0.0; var entre_tiros =1; function Update () { player = GameObject.Find("Player"); transform.LookAt(player.transform.position); timer_atira -= Time.deltaTime; if (timer_atira <= 0) { timer_atira = entre_tiros; Atira(); }
  • 18. Unity3D • Função atira = mesma var bala : Transform; var posicao_bala : Vector3; var dist_tiro = 1.5; var altura_tiro = 0.6; function Atira() { //calculando posicao relativa - a frente - evita colisao player var angulo = transform.eulerAngles.y * Mathf.Deg2Rad; posicao_bala.x = transform.position.x + dist_tiro * Mathf.Sin(angulo); posicao_bala.y = transform.position.y + altura_tiro; posicao_bala.z = transform.position.z + dist_tiro * Mathf.Cos(angulo); //CRIA TIRO POSICAO LIVRE Instantiate(bala, posicao_bala, transform.rotation); }