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); }
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); }