コード例 #1
0
        /// <summary>
        /// Adds the required particle events to track particles.
        /// </summary>
        public void AddRequiredParticleEvents()
        {
            if (playgroundSystem != null)
            {
                // Hookup events
                birthEvent = GetEventFromType(EVENTTYPEC.Birth);
                if (birthEvent == null)
                {
                    birthEvent = PlaygroundC.CreateEvent(playgroundSystem);
                    birthEvent.broadcastType = EVENTBROADCASTC.EventListeners;
                    birthEvent.eventType     = EVENTTYPEC.Birth;
                }
                birthEvent.particleEvent += OnParticleBirthEvent;

                deathEvent = GetEventFromType(EVENTTYPEC.Death);
                if (deathEvent == null)
                {
                    deathEvent = PlaygroundC.CreateEvent(playgroundSystem);
                    deathEvent.broadcastType = EVENTBROADCASTC.EventListeners;
                    deathEvent.eventType     = EVENTTYPEC.Death;
                }
                deathEvent.particleEvent += OnParticleDeathEvent;

                collisionEvent = GetEventFromType(EVENTTYPEC.Collision);
                if (collisionEvent == null)
                {
                    collisionEvent = PlaygroundC.CreateEvent(playgroundSystem);
                    collisionEvent.broadcastType = EVENTBROADCASTC.EventListeners;
                    collisionEvent.eventType     = EVENTTYPEC.Collision;
                }
                collisionEvent.particleEvent += OnParticleCollisionEvent;
            }
        }
    void Start()
    {
        // Get the event from your particle system
        playgroundEvent = PlaygroundC.GetEvent(0, particles);

        // Subscribe to the event
        AddEventListener();

        // Cache components of this GameObject (helps performance on low-end devices)
        thisTransform = transform;
        thisCollider  = collider;
        thisRenderer  = renderer;

        // Create materials to show if the event listener is active or not
        if (activeMaterial == null)
        {
            activeMaterial       = new Material(Shader.Find("Diffuse"));
            activeMaterial.color = Color.white;
        }
        if (inactiveMaterial == null)
        {
            inactiveMaterial       = new Material(Shader.Find("Diffuse"));
            inactiveMaterial.color = Color.black;
        }

        thisRenderer.sharedMaterial = activeMaterial;
    }
コード例 #3
0
    void Start()
    {
        // Get the first event
        playgroundEvent = PlaygroundC.GetEvent(0, particles);

        // Add listener
        AddListener();
    }
コード例 #4
0
        void Start()
        {
            if (referenceObject == null || particles == null)
            {
                return;
            }

            // Create and setup the birth event
            birthEvent = PlaygroundC.CreateEvent(particles);
            birthEvent.broadcastType = EVENTBROADCASTC.EventListeners;
            birthEvent.eventType     = EVENTTYPEC.Birth;

            // Create and setup the death event
            deathEvent = PlaygroundC.CreateEvent(particles);
            deathEvent.broadcastType = EVENTBROADCASTC.EventListeners;
            deathEvent.eventType     = EVENTTYPEC.Death;

            // Hook up the event listeners to the delegates
            birthEvent.particleEvent += OnParticleDidBirth;
            deathEvent.particleEvent += OnParticleDidDie;

            // Create a parent for all followers (for Hierarchy convenience)
            followerParent        = new GameObject("Followers").transform;
            followerParent.parent = transform;

            // Get the trail renderer (if available) and its time
            referenceTrailRenderer = referenceObject.GetComponent <TrailRenderer>();
            if (referenceTrailRenderer != null)
            {
                trailTime = referenceTrailRenderer.time;
            }

            // Set an extra amount of followers if required (a trail's time will exceed a particle's)
            int extra = followerLifetime <= 0?
                        Mathf.CeilToInt(Mathf.Abs(particles.lifetime - trailTime) + (trailTime - particles.lifetime)) + 2 :
                        Mathf.CeilToInt(Mathf.Abs(particles.lifetime - followerLifetime) + (followerLifetime - particles.lifetime)) + 2;

            if (particles.lifetime <= 1f)
            {
                extra++;
            }

            // Create the follower cache (this will be iterated through and reused whenever a particle rebirths)
            referenceObjectsCache = new PlaygroundFollower[cacheSize > 0? cacheSize : particles.particleCount + Mathf.CeilToInt(particles.particleCount * extra)];
            for (int i = 0; i < referenceObjectsCache.Length; i++)
            {
                GameObject clone = (GameObject)Instantiate(referenceObject);
                referenceObjectsCache[i] = new PlaygroundFollower(clone.transform, clone, clone.GetComponent <TrailRenderer>(), 0, 0);
                referenceObjectsCache[i].transform.parent = followerParent;
                if (referenceObjectsCache[i].trailRenderer != null)
                {
                    referenceObjectsCache[i].trailRenderer.time = 0;
                }
                referenceObjectsCache[i].gameObject.SetActive(false);
            }
        }
コード例 #5
0
    // Use this for initialization
    void Start()
    {
        // Events run on a second thread, only use thread-safe methods within the Event Delegate (no GetTransform)
        thisTransform = transform;

        // Get the event from your particle system
        playgroundEvent = PlaygroundC.GetEvent(0, particles);

        // Subscribe to the event
        AddEventListener();
    }
コード例 #6
0
    void Start()
    {
        if (particles == null)
        {
            return;
        }

        // Get the first event
        playgroundEvent = PlaygroundC.GetEvent(0, particles);

        // Add listener
        AddListener();
    }
コード例 #7
0
    void Awake()
    {
        // Create and setup the birth event
        birthEvent = PlaygroundC.CreateEvent(particles);
        birthEvent.broadcastType = EVENTBROADCASTC.EventListeners;
        birthEvent.eventType     = EVENTTYPEC.Birth;

        // Create and setup the death event
        deathEvent = PlaygroundC.CreateEvent(particles);
        deathEvent.broadcastType = EVENTBROADCASTC.EventListeners;
        deathEvent.eventType     = EVENTTYPEC.Death;

        // Hook up the event listeners to the delegates
        birthEvent.particleEvent += OnParticleDidBirth;
        deathEvent.particleEvent += OnParticleDidDie;

        // Setup the followers
        followerParent         = new GameObject("Followers").transform;
        followerParent.parent  = transform;
        referenceTrailRenderer = referenceObject.GetComponent <TrailRenderer>();
        if (referenceTrailRenderer != null)
        {
            trailTime = referenceTrailRenderer.time;
        }

        int extra = followerLifetime <= 0?
                    Mathf.CeilToInt(Mathf.Abs(particles.lifetime - trailTime) + (trailTime - particles.lifetime)) + 2 :
                    Mathf.CeilToInt(Mathf.Abs(particles.lifetime - followerLifetime) + (followerLifetime - particles.lifetime)) + 2;

        if (particles.lifetime <= 1f)
        {
            extra++;
        }
        referenceObjectsCache = new PlaygroundFollower[cacheSize > 0? cacheSize : particles.particleCount + Mathf.CeilToInt(particles.particleCount * extra)];
        for (int i = 0; i < referenceObjectsCache.Length; i++)
        {
            GameObject clone = (GameObject)Instantiate(referenceObject);
            referenceObjectsCache[i] = new PlaygroundFollower(clone.transform, clone, clone.GetComponent <TrailRenderer>(), 0, 0);
            referenceObjectsCache[i].transform.parent = followerParent;
            if (referenceObjectsCache[i].trailRenderer != null)
            {
                referenceObjectsCache[i].trailRenderer.time = 0;
            }
            referenceObjectsCache[i].gameObject.SetActive(false);
        }
    }
コード例 #8
0
    List <Vector3> queuedSystems = new List <Vector3>();                                // The queued list of particle system positions to enable on main-thread

    void Start()
    {
        // Get the event
        PlaygroundEventC mainParticleEvent = PlaygroundC.GetEvent(0, mainParticles);

        // Make sure the event delegate is set to target event listeners
        mainParticleEvent.broadcastType = EVENTBROADCASTC.EventListeners;

        // Hook up to the event delegate
        mainParticleEvent.particleEvent += OnParticleEvent;

        // Cache the particle systems in the pool
        cachedParticles = new List <PlaygroundParticlesC>();
        for (int i = 0; i < quantity; i++)
        {
            GameObject go = (GameObject)Instantiate((Object)particleSystemPoolPrefab);
            cachedParticles.Add(go.GetComponent <PlaygroundParticlesC>());
            cachedParticles[i].particleSystemGameObject.SetActive(false);
        }
    }
コード例 #9
0
 /// <summary>
 /// Removes the required events to track particles.
 /// </summary>
 public void RemoveRequiredEvents()
 {
     if (playgroundSystem != null)
     {
         if (birthEvent != null)
         {
             birthEvent.particleEvent -= OnParticleBirthEvent;
             birthEvent = null;
         }
         if (deathEvent != null)
         {
             deathEvent.particleEvent -= OnParticleDeathEvent;
             deathEvent = null;
         }
         if (collisionEvent != null)
         {
             collisionEvent.particleEvent -= OnParticleCollisionEvent;
             collisionEvent = null;
         }
     }
 }