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óp...
Unity3D 
• Prototipar objeto – criação normal 
• Quando completo = cria-se PREFAB 
• Criar Objeto Bala (esfera) 
• Precisa...
Unity3D 
• Script Básico: 
• Disparar sons 
• Inicializar tiro (velocidades) 
• Ativar efeitos 
• Perceber colisões -> Cri...
Unity3D 
var vetor_forca : Vector3; 
var velo_tiro = 300; 
//inicializar 
function Start () { 
Start = inicializa velo bal...
Unity3D 
• Update = usando Física = FixedUpdate() 
• Cuidar da remoção da bala * 
• Por tempo 
• Por distância 
//fisica =...
Unity3D 
• Perceber / Controlar Colisão da Bala 
• RigidBody = OnCollisionEnter 
// Perceber tratar colisoes 
function OnC...
Unity3D 
• Disparo Balas : código em quem vai disparar 
• Re-utilização objeto bala = Instantiate / Prefab 
• Transformar ...
Unity3D 
• Função disparo / Atira 
//Variavel ponteiro para bala (prefab) 
var bala : Transform; 
function Atira() { 
//CR...
Unity3D 
• Possíveis problemas neste ponto 
• Tiros sem delay: 
• Muitas balas criadas (1 por ciclo) = auto colisão entre ...
Unity3D 
• Temporizar tiros: delay mínimo entre-tiros (normal armas) 
var timer_tiro = 0.0; 
var delay_tiro = 0.5; 
.... 
...
Unity3D 
• Posição inicial bala = fora da colisão do emissor 
• Calcular Posição relativa = a frente (fora collider) 
var ...
Unity3D 
• Criando efeito para explosão da bala 
• Criar um objeto : controlar a explosão 
• Transformar em Prefab pós pro...
Unity3D 
• Acionar explosão no momento da batida : bala 
• Instanciar objeto explosão (Prefab) 
• Codigo bala: 
var explod...
Unity3D 
• Sons acionados por eventos 
• Facilidade: Sons vinculados aos objetos 
– - Inserir AudioSource 
– - Autoplay : ...
Unity3D 
• Inimigos IA = mesmo esquema de tiro 
• Pode-se aproveitar codigo 
• Diferença: IA auto-ativa tiros, não teclas ...
Unity3D 
• Atirador IA simples 
var timer_atira = 0.0; 
var entre_tiros =1; 
function Update () { 
player = GameObject.Fin...
Unity3D 
• Função atira = mesma 
var bala : Transform; 
var posicao_bala : Vector3; 
var dist_tiro = 1.5; 
var altura_tiro...
Próximos SlideShares
Carregando em…5
×

Aula disparos

864 visualizações

Publicada em

Aula para criação de disparos no unity 3D

Publicada em: Educação
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
864
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
Ações
Compartilhamentos
0
Downloads
17
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Aula disparos

  1. 1. Projeto de jogos RAD: Disparos, tiros e balas Augusto Bülow
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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); }

×