Exemplo n.º 1
0
        void LateUpdate()
        {
        #if UNITY_EDITOR
            if (!Application.isPlaying)
            {
                _editorTimeDelta   = EditorApplication.timeSinceStartup - _editorTimetracker;
                _editorTimetracker = EditorApplication.timeSinceStartup;
            }
        #endif

            if (transform.childCount <= 1)
            {
                return;
            }

            // emision
            if (_emissionRateTracker <= 0.0f)
            {
                _emissionRateTracker += 1.0f / emissionRate;

                RenewOneDeadParticle();
            }
            _emissionRateTracker -= (Application.isPlaying ? Time.deltaTime : (float)_editorTimeDelta);

            // age them
            foreach (PathParticleTracker tracker in _particle_trackerArray)
            {
                if (tracker.particle.remainingLifetime > 0.0f)
                {
                    tracker.particle.remainingLifetime = Mathf.Max(tracker.particle.remainingLifetime - (Application.isPlaying ? Time.deltaTime : (float)_editorTimeDelta), 0.0f);
                }
            }


            float      normLifetime = 0.0f;
            Path_Point Rpoint;

            // move them
            foreach (PathParticleTracker tracker in _particle_trackerArray)
            {
                if (tracker.particle.remainingLifetime > 0.0f)
                {
                    normLifetime = tracker.particle.remainingLifetime / tracker.particle.startLifetime;
                    normLifetime = 1.0f - normLifetime;

                    Rpoint = _path_comp.GetPathPoint(normLifetime * _path_comp.TotalDistance);

                    // rotate around Rpoint.direction

                    Rpoint.point += (pathWidth * tracker.distance) * Math_Functions.Rotate_Direction(Rpoint.up, Rpoint.forward, tracker.rotation);

                    tracker.particle.position = Rpoint.point;
                    tracker.particle.velocity = Rpoint.forward;
                }
            }

            _particle_count = 0;

            // set the given array
            foreach (PathParticleTracker tracker in _particle_trackerArray)
            {
                if (tracker.particle.remainingLifetime > 0.0f)         // it's alive
                {
                    _particle_array[_particle_count] = tracker.particle;
                    _particle_count++;
                }
            }

            _particle_system.SetParticles(_particle_array, _particle_count);
        }
Exemplo n.º 2
0
        void LateUpdate()
        {
        #if UNITY_EDITOR
            if (!Application.isPlaying)
            {
                editorTimeDelta   = EditorApplication.timeSinceStartup - editorTimetracker;
                editorTimetracker = EditorApplication.timeSinceStartup;
            }
        #endif

            if (transform.childCount <= 1)
            {
                return;
            }

            // emision
            if (emissionRateTracker <= 0.0f)
            {
                emissionRateTracker += 1.0f / emissionRate;

                RenewOneDeadParticle();
            }
            emissionRateTracker -= (Application.isPlaying ? Time.deltaTime : (float)editorTimeDelta);

            // age them
            foreach (PathParticleTracker tracker in particle_trackerArray)
            {
                if (tracker.particle.lifetime > 0.0f)
                {
                    tracker.particle.lifetime = Mathf.Max(tracker.particle.lifetime - (Application.isPlaying ? Time.deltaTime : (float)editorTimeDelta), 0.0f);
                }
            }


            float      normLifetime = 0.0f;
            RoutePoint Rpoint;

            // move them
            foreach (PathParticleTracker tracker in particle_trackerArray)
            {
                if (tracker.particle.lifetime > 0.0f)
                {
                    normLifetime = tracker.particle.lifetime / tracker.particle.startLifetime;
                    normLifetime = 1.0f - normLifetime;

                    Rpoint = path.GetRoutePoint(normLifetime * path.TotalDistance);

                    // 90 degree turn
                    perpendicularDir.x = Rpoint.direction.y;
                    perpendicularDir.y = -Rpoint.direction.x;
                    perpendicularDir.z = Rpoint.direction.z;

                    // rotate around Rpoint.direction
                    perpendicularDir = Math_Functions.Rotate_Direction(perpendicularDir, Rpoint.direction, tracker.rotation);

                    // targetPos
                    Rpoint.position += (pathWidth * tracker.distance) * perpendicularDir;

                    tracker.particle.position = Rpoint.position;
                    tracker.particle.velocity = Rpoint.direction;
                }
            }

            particle_count = 0;

            // set the given array
            foreach (PathParticleTracker tracker in particle_trackerArray)
            {
                if (tracker.particle.lifetime > 0.0f)         // it's alive
                {
                    particle_array[particle_count] = tracker.particle;
                    particle_count++;
                }
            }

            particle_system.SetParticles(particle_array, particle_count);
        }