Recapitulação: pool de projéteis
Parte da seção Arquitetura de jogos no Unity do Journey de Unity da Coddy. Lição 40 de 50.
Desafio
MédioPratique de tiro. As setas deslizam o Tank para a esquerda e para a direita (pronto), e os dois alvos vermelhos têm um script Target com Hit() (pronto). Faça o tanque disparar balas do pool:
- Em
Tank.cs, mantenha umObjectPool<Bullet>que cria balas a partir debulletPrefab, ativa-as quando são retiradas e desativa-as quando voltam, destrói as que libera e mantém no máximo 4 balas sobressalentes. - A tecla Espaço retira uma bala do pool e a inicia a 1 unidade à frente do tanque.
- Em
Bullet.cs, uma bala voa para a frente (+z) aspeed(15). Quando atinge algo com um script Target (o colisor da bala é um trigger), chamaHit()do alvo e volta imediatamente ao pool. Uma bala que não atinge nada volta apóslife(1) segundo. - Cada disparo dá à bala seu tempo de vida completo, inclusive quando reutilizada, e a bala volta ao pool uma vez por disparo.
Pressione Play, atire nos dois alvos e depois Check.
Experimente você mesmo
using UnityEngine;
using UnityEngine.Pool;
public class Bullet : MonoBehaviour
{
public float speed = 15f;
public float life = 1f;
// Voe para a frente; volte para o pool ao atingir um Target ou após life segundos
}
Todas as lições de Arquitetura de jogos no Unity
1Componentes, não hierarquias
Componentes pequenosUm script-base para inimigosComponentes abstratosComponentes trabalhando juntosRevisão: Torre modular4Dados Serializados
Classes SerializáveisListas no InspectorEnums no InspectorRevisão: Tabela de Loot7Máquinas de Estados
Estados como ClassesUma Máquina de EstadosTransiçõesInteligências dos InimigosRevisão: Estados da Porta10Projeto: Sobrevivente da Arena
O HeróiTipos de Inimigos5ScriptableObjects
Assets de dadosAtributos das armasConfigurações compartilhadasOndas como dadosRevisão: banco de dados de itens3Eventos
Eventos de C# no UnityInscreva-se em OnEnableCampos de UnityEventEventos controlam a interfaceRevisão: janela de conquista9Pool de Objetos
Por que usar um pool de objetosUm pool com uma filaO ObjectPool da UnityRecapitulação: pool de projéteis