Version: 5.4
Módulo Collision (Colisiones)
Módulo Sub Emitters

Módulo Triggers

Los Particle systems (sistemas de partículas) tienen la habilidad de activar un Callback cuando interactúen con uno o más Colliders en la Escena.

Usted puede utilizar el Callback como una simple manera de destruir una partícula cuando entra a un Collider (por ejemplo, para prevenir que las gotas de lluvia penetren los techos), o se puede utilizar para modificar cualquiera o todas las propiedades de las partículas.

El módulo Triggers también ofrece la opción de Kill para quitar de manera automática las partículas, y la opción Ignore para ignorar eventos de colisión, como se muestra abajo.

Módulo Particle Systems Triggers
Módulo Particle Systems Triggers

Para utilizar el módulo, primero agregue los Colliders a los cuales usted quiere crear triggers, luego seleccione qué eventos utilizar.

Usted puede elegir trigger (activar) un evento cuando la partícula está:

  • Dentro de los limites del Collider
  • Afuera de los limites del Collider
  • Ingresando a los limites de un Collider
  • Saliendo de los limites de un Collider
Propiedad: Función:
Inside Seleccione Callback si usted quiere que el evento se trigger (active) cuando la partícula está dentro del Collider. Seleccione Ignore para que el evento NO se trigger cuando la partícula está adentro del Collider. Seleccione Kill para destruir las partículas afuera del Collider.
Outside Seleccione Callback si usted quiere que el evento se trigger (active) cuando la partícula está afuera del Collider. Seleccione Ignore para que el evento NO se trigger cuando la partícula está adentro del Collider. Seleccione Kill para destruir las partículas afuera del Collider.
Enter Seleccione Callback si usted quiere que el evento se trigger (active) cuando la partícula ingresa al Collider. Seleccione Ignore para que el evento NO se trigger cuando la partícula ingresa al Collider. Seleccione Kill para destruir las partículas cuando ingresen al Collider.
Exit Seleccione Callback si usted quiere que el evento se trigger (active) cuando la partícula sale del Collider. Seleccione Ignore para que el evento NO se trigger cuando la partícula sale del Collider. Seleccione Kill para destruir las partículas cuando salen Collider.

Radius Scale: Este parámetro configura los limites del Collider de la partícula, lo cual permite que parezca que un evento ocurre antes o después que la partícula toca el Collider. Por ejemplo, usted podría querer que una partícula penetre la superficie de un objeto que tiene el Collider un poquito antes de que rebote, en tal caso usted configuraría el Radius Scale que sea menor a 1. Tenga en cuenta que este ajuste no cambia cuando el evento en realidad se trigger (activa), pero puede retrasar o avanzar el efecto visual del trigger.

  • Ingrese 1 para que el evento parezca que suceda a medida que la Partícula toca el Collider
  • Ingrese un valor menor a 1 para que el trigger parezca que suceda después de que una Partícula penetra el Collider
  • Ingrese un valor mayor a 1 para que el trigger parezca que suceda después de que una Partícula penetre el Collider

Visualize Bounds: Esto le permite a usted mostrar los limites del Collider de la partícula en la ventana del Editor.

Dentro del Callback, usted puede determinar qué partículas coinciden con qué criterio utilizando ParticleSystem.GetTriggerParticles() conjunto con el ParticleSystemTriggerEventType que usted quiere especificar.

El ejemplo de abajo causa que las partículas se vuelvan rojas a medida que ingresan al Collider, y luego verdes a medida que salen de los limites del Collider.

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

[ExecuteInEditMode]
public class TriggerScript : MonoBehaviour
{
    ParticleSystem ps;

    // these lists are used to contain the particles which match
    // the trigger conditions each frame.
    List<ParticleSystem.Particle> enter = new List<ParticleSystem.Particle>();
    List<ParticleSystem.Particle> exit = new List<ParticleSystem.Particle>();

    void OnEnable()
    {
        ps = GetComponent<ParticleSystem>();
    }

    void OnParticleTrigger()
    {
        // get the particles which matched the trigger conditions this frame
        int numEnter = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
        int numExit = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);

        // iterate through the particles which entered the trigger and make them red
        for (int i = 0; i < numEnter; i++)
        {
            ParticleSystem.Particle p = enter[i];
            p.startColor = new Color32(255, 0, 0, 255);
            enter[i] = p;
        }

        // iterate through the particles which exited the trigger and make them green
        for (int i = 0; i < numExit; i++)
        {
            ParticleSystem.Particle p = exit[i];
            p.startColor = new Color32(0, 255, 0, 255);
            exit[i] = p;
        }

        // re-assign the modified particles back into the particle system
        ps.SetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
        ps.SetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
    }
}

El resultado de esto se puede ver en la imagen de abajo:

Editor view
Editor view
Game view
Game view
Módulo Collision (Colisiones)
Módulo Sub Emitters