Puede utilizar un sistema de partículas para crear una explosión convincente pero la dinámica es quizá un poco más complicada de lo que parece en un primer momento. Esencialmente, una explosión es una explosión externa de partículas pero hay algunas modificaciones simples que se pueden utilizar para que parezca mucho más realista.
Una simple explosión produce una bola de fuego que expande hacia afuera rápidamente en todas las direcciones. La explosión inicial tiene mucha energía y por lo tanto es muy caliente (es decir, brillante) y se mueve bastante rápido. Esta energía se disipa rápidamente lo cual resulta en la expansión de una llama disminuyendo y también enfriando (es decir, se vuelve menos brillante). Finalmente, como todo el combustible se quema, las llamas morirán y pronto desaparecerán por completo.
Una partícula de explosión típicamente tendrá un corto tiempo de vida y usted puede variar varias propiedades en el tiempo para simular el efecto. La partícula comenzará a moverse muy rápido pero luego su velocidad se debería reducir en gran medida a medida que se aleja del centro de la explosión. También, el color debería empezar brillante pero luego oscurecerse y eventualmente desvanecerse a un transparente. Finalmente, reducir el tamaño de las partículas en el tiempo dará el efecto de las llamas se dispersarán a medida que el combustible se utilice.
Starting with the default particle system object (menu: GameObject > Effects > Particle System), go to the Shape module and set the emitter shape to a small Sphere, say about 0.5 units in radius. The particles in the standard assets include a material called Fire Add which is very suitable for explosions (menu: Assets > Import Package > ParticleSystems). You can set this material for the system using the Renderer module. With the Renderer open, you should also disable Cast Shadows and Receive Shadows since the explosion flames are supposed to give out light rather than receive it.
En esta etapa, el sistema se ve mucho como pequeñas bolas de fuegos que están siendo disparadas desde un punto central. La explosión debería, crear una ráfaga con muchas partículas una sola vez. En el módulo de Emission, usted puede configurar el valor Rate a cero y agregar una solo Burst (ráfaga) de partículas en tiempo cero. La cantidad de partículas en la ráfaga dependerá en el tamaño y la intensidad que usted quiera que la explosión tenga pero un buen comienzo es alrededor de cincuenta partículas. Con el burst (ráfaga) configurado, el sistema se está empezando a ver más como una explosión pero es bastante lenta y las llamas parecen estar colgando por mucho tiempo. En el módulo del Particle System (el cual tendrá el mismo nombre que el GameObject, ex, “Explosion”), configure ambas la Duration del sistema y el Start Lifetime de las partículas a dos segundos.
Usted también puede utilizar el módulo Size Over Lifetime para crear el efecto de las llamas utilizando su combustible. Configure la curva de tamaño utilizando la pre-configuración “ramp down” (es decir, el tamaño empieza en 100% y se reduce a 0. Para hacer que las llamas se oscurezcan y desvanezcan, habilite el módulo Color Over Lifetime y configure el gradiente para que empiece con blanco a la izquierdo y termine en negro a la derecha. Ya que el material Fire Add utiliza un shader additive (aditivo) para renderizar, la oscuridad de la propiedad color también controla la transparencia de la partícula; las llamas se volverán transparentes a medida que el color se desvanezca a negro. También el material aditivo permite que el brillo de las partículas se “agreguen” juntas a medida que son dibujadas una encima de otra. Esto ayuda para aumentar la impresión de un destello brillante al principio de la explosión cuando las partículas todas están cercas.
Como está, la explosión está tomando forma pero se ve como si estuviera sucediendo afuera en el espacio. Las partículas son lanzadas hacia afuera y viajan una larga distancia con una velocidad constante antes de desvanecerse. Si su juego está en el espacio entonces este podría ser el efecto que usted desea. Sin embargo, una explosión que ocurre en la atmósfera disminuirá y amortiguado por el aire que la rodea. Habilite el módulo Limit Velocity Over Lifetime y configure la Speed a 3.0 y la fracción Dampen a 0.4 y usted debería ver que la explosión pierde fuerza a medida que progresa.
Una última cosa para tener en cuenta es que a medida que las partículas se mueven lejos del centro de la explosión, sus formas individuales se vuelven más reconocibles. En particular, ver todas las partículas con el mismo tamaño y con la misma rotación hace que sea obvio que la misma gráfica sea re-utilizada para cada partícula. Una manera simple de evitar esto es agregar un poco de una variación aleatoria al tamaño y rotación de las partículas a medida que son generadas. En el módulo Particle System, encima del inspector, oprima la pequeña flecha a la derecha de las propiedades Start Size y Start Rotation y configure ambas a Random Between Two Constants. Para la rotación, configure ambos valores a 0 y 360 (es decir, una rotación completamente aleatoria). Para el tamaño configure los valores a 0.5 y 1.5 para darle alguna variación sin arriesgarse en tener partículas gigantes o chiquitas. Usted debería ver que la repetición gráfica de las partículas se nota mucho menos.
Durante las pruebas, es útil tener la propiedad Looping prendida para que usted pueda ver la explosión varias veces pero en el juego terminado, usted debería apagar esto para que la explosión suceda solamente una vez. Cuando la explosión está diseñada para un objeto que tiene el potencial en explotar (un tanque de combustible digamos) usted podría querer agregar el componente Particle System al objeto con la propiedad Play On Awake desactivada. Usted puede luego apagar la explosión desde script si es necesario.
void Explode() {
var exp = GetComponent<ParticleSystem>();
exp.Play();
Destroy(gameObject, exp.duration);
}
En otros casos, las explosiones suceden en algunos puntos de impacto. Si la explosión origina desde un objeto (digamos una granada) entonces usted podría llamar la función Explode
detallada arriba después de una demora en el tiempo o cuando haga contacto con el objetivo.
// Granada explota después de un retraso de tiempo.
public float fuseTime;
void Start() {
Invoke("Explode", fuseTime);
}
// Granada explota en el impacto.
void OnCollisionEnter(Collision coll) {
Explode();
}
Dónde la explosión venga de un objeto que en realidad no está representando en el juego (es decir, un proyectil que viaja muy rápido para ser visto), usted puede simplemente instanciar una explosión en el lugar apropiado. Usted podría determinar el punto de contacto desde un raycast, por ejemplo.
//En el objeto explosivo
void Start() {
var exp = GetComponent<ParticleSystem>();
exp.Play();
Destroy(gameObject, exp.duration);
}
// Script posible del projectile.
public GameObject explosionPrefab;
void Update() {
RaycastHit hit;
if (Physics.Raycast (Camera.main.ScreenPointToRay (Input.mousePosition), out hit)) {
Instantiate (explosionPrefab, hit.point, Quaternion.identity);
}
}
La explosión desarrollada aquí es muy básica pero usted puede modificarla en varios aspectos para obtener la sensación exacta que usted está buscando en su juego.
El gráfico de la partícula que usted utiliza tendrá un efecto grande en cómo el jugador “lee” la explosión. Al tener muchas llamas pequeñas, separadas reconocibles sugiere unas piezas que se están quemando lanzadas hacia fuera. Unas partículas más grandes que no se muevan completamente a aparte parecen como si fueran una bola de fuego alimentada por un tanque destruido. Típicamente, usted tendrá que cambiar varias propiedades en conjunto para completar el efecto. Por ejemplo, la bola de fuego durará más y se expandirá menos antes de que desaparezca mientras que una ráfaga aguda puede dispersar unas piezas quemándose alguna distancia.
Unas pocas propiedades están configuradas con valores aleatorias aquí pero otras muchas propiedades tienen una opción Random Between Two Constants/Curves y usted puede utilizarlas para agregar variación en todos sentidos. Al variar el tamaño y rotación ayuda evitar los efectos más obvios de la repetición de partículas pero usted puede también considerar agregar algo de aleatorio a las propiedades Start Delay, Start Lifetime y Start Speed. Una pequeña cantidad de variaciones ayuda reforzar la impresión de una explosión “natural” con un efecto impredecible en vez de un proceso mecánico controlado. Unas variaciones más grandes sugieren una explosión más “sucia”. Por ejemplo, variar Start Delay producirá una explosión de que ya no es aguda pero se dispara más lento, de pronto porque los tanques de combustión de un vehículo están siendo encendidos por separado.
2017–09–19 Page amended with limited editorial review
Menú GameObject cambiado en Unity 4.6