Resumen: pool de balas
Parte de la sección Arquitectura de juegos en Unity del Journey de Unity de Coddy. Lección 40 de 50.
Desafío
IntermedioPráctica de tiro. Las flechas deslizan el tanque hacia la izquierda y la derecha (listo), y los dos objetivos rojos tienen un script Target con Hit() (listo). Haz que el tanque dispare balas reutilizadas del pool:
- En
Tank.cs, mantén unObjectPool<Bullet>que cree balas a partir debulletPrefab, las active cuando se saquen y las desactive cuando vuelvan, destruya las que se descarten y conserve como máximo 4 balas de repuesto. - La barra espaciadora toma una bala del pool y la inicia a 1 unidad delante del tanque.
- En
Bullet.cs, una bala vuela hacia delante (+z) aspeed(15). Cuando golpea algo con un script Target (el colisionador de la bala es un disparador), llama aHit()del objetivo y vuelve al pool inmediatamente. Una bala que no golpea nada vuelve después delife(1) segundos. - Cada disparo le da a la bala su vida útil completa, también si se reutiliza, y la bala vuelve al pool una sola vez por disparo.
Pulsa Play, dispara a ambos objetivos y luego pulsa Check.
Pruébalo tú mismo
using UnityEngine;
using UnityEngine.Pool;
public class Bullet : MonoBehaviour
{
public float speed = 15f;
public float life = 1f;
// Avanza; vuelve al pool cuando golpees un Target o después de life segundos
}
Todas las lecciones de Arquitectura de juegos en Unity
1Componentes, no jerarquías
Componentes pequeñosUn script base para enemigosComponentes abstractosComponentes que trabajan juntosRepaso: torreta modular4Datos serializados
Clases serializablesListas en el InspectorEnumeraciones en el InspectorRepaso: tabla de botín7Máquinas de estados
Estados como clasesUna máquina de estadosTransicionesCerebros de enemigosRepaso: estados de puertas10Proyecto: Superviviente de la arena
El héroeTipos de enemigos2Interfaces en Unity
IDamageableInterfaces y TryGetComponentGetComponentsRepaso: tecla de interacción5ScriptableObjects
Recursos de datosEstadísticas de armasConfiguración compartidaOleadas como datosRepaso: base de datos de objetos3Eventos
Eventos de C# en UnitySuscribirse en OnEnableCampos de UnityEventLos eventos controlan la interfazRepaso: ventana emergente de logro6Guardar con JSON
JsonUtilityGuardar la partidaCargar y valores predeterminadosRepaso: ranuras de guardado9Pool de objetos
Por qué usar un pool de objetosUn pool con una colaObjectPool de UnityResumen: pool de balas