string UpdateVFXDebug() { VisualEffect[] allEffects = VFXManager.GetComponents(); if (Input.GetKeyDown(Sort)) { sorting = (Sorting)(((int)sorting + 1) % 3); } if (sorting == Sorting.DistanceToCamera) { var camera = Camera.main; if (camera == null) { sorting = Sorting.ParticleCount; } else { allEffects = allEffects.OrderBy(o => Vector3.SqrMagnitude(o.gameObject.transform.position - camera.transform.position)).ToArray(); } } if (sorting == Sorting.ParticleCount) { allEffects = allEffects.OrderBy(o => - o.aliveParticleCount).ToArray(); } if (allEffects.Length == 0) { return("No Active VFX Components in scene"); } selectedVFX -= Input.GetKeyDown(PrevFX) ? 1 : 0; selectedVFX += Input.GetKeyDown(NextFX) ? 1 : 0; bool shift = Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift); selectedVFX = Mathf.Clamp(selectedVFX, 0, allEffects.Length - 1); StringBuilder sb = new StringBuilder(); sb.AppendLine($"{allEffects.Length} Visual Effect Component(s) active. Sorting : {sorting.ToString()}"); sb.AppendLine(); sb.AppendLine($"{"Game Object Name",-24}| {"Visual Effect Asset",-24}| {"PlayState",-12}| {"Visibility",-12}| {"Particle Count",12}"); sb.AppendLine($"==================================================================================================================================="); int idx = 0; foreach (var vfx in allEffects) { if (idx == selectedVFX) { sb.Append("<color=orange>"); } string gameObjectname = vfx.gameObject.name; string vfxName = (vfx.visualEffectAsset == null ? "(No VFX Asset)" : vfx.visualEffectAsset.name); string playState = (vfx.pause ? "Paused" : "Playing"); var renderer = vfx.GetComponent <Renderer>(); string visibility = renderer.enabled ? (vfx.culled? "Culled" : "Visible") : "Disabled"; string particleCount = vfx.aliveParticleCount.ToString(); sb.Append($"{gameObjectname, -24}| {vfxName, -24}| {playState,-12}| {visibility,-12}| {particleCount, 12}"); if (idx == selectedVFX) { sb.Append("</color>"); } sb.Append("\n"); idx++; } var selected = allEffects[selectedVFX]; // Make Selection Blink if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl)) { var selectedRenderer = selected.GetComponent <Renderer>(); selectedRenderer.enabled = Time.unscaledTime % 0.5f < 0.25f; } if (shift) { foreach (var vfx in allEffects) { if (Input.GetKeyDown(Play)) { vfx.Play(); } if (Input.GetKeyDown(Stop)) { vfx.Stop(); } if (Input.GetKeyDown(Pause)) { vfx.pause = !vfx.pause; } if (Input.GetKeyDown(Reinit)) { vfx.Reinit(); } if (Input.GetKeyDown(Step)) { vfx.AdvanceOneFrame(); } if (Input.GetKeyDown(ToggleVisibility)) { vfx.gameObject.GetComponent <Renderer>().enabled = !vfx.gameObject.GetComponent <Renderer>().enabled; } } } else { if (Input.GetKeyDown(Play)) { selected.Play(); } if (Input.GetKeyDown(Stop)) { selected.Stop(); } if (Input.GetKeyDown(Pause)) { selected.pause = !selected.pause; } if (Input.GetKeyDown(Reinit)) { selected.Reinit(); } if (Input.GetKeyDown(Step)) { selected.Simulate(Time.deltaTime); } if (Input.GetKeyDown(ToggleVisibility)) { selected.gameObject.GetComponent <Renderer>().enabled = !selected.gameObject.GetComponent <Renderer>().enabled; } } return(sb.ToString()); }