Is there a way to speed up / Slow Down an entire VFX graph system as a whole?

Yes, that. Is there a way to speed up or slow down an entire VFX graph system from some kind of global operator or multiplier? instead of having to tweak each block every time you need to adjust the entire velocity of a system?

edit*

I see where you mentioned vfx graph now. i don’t know enough about it so hopefully someone can answer!

Yes I’m aware of this one. I was refering to the new VFX Graph tool. Is there some similar control in this new paradigm?
I see that if you click on the graph asset you can change the pre-warm and the fixed delta time. But there’s no simulation speed controller.

If you just want to edit the playback in editor, then “Target Game Object” at the top left of the VFX Graph UI.

If you want to control the playback in game, then unfortunately I don’t believe there’s an easy way. I would use a control value that feeds into different areas of the graph, potentially sampling a curve for more control.

1 Like

Yes exactly, it’s weird that we don’t have that kind of control, because on the UI editor playback you can change the playback speed to whatever, so this proves it’s doable. But there seems to be no tool to fix that speed control on the actual system so you can tweak the playback speed and works that way in-game mode.

bcecc66519224c08584d14c5eb3983cb

What I mean is, does VFX Graph have a way to save the parameters of the Play Rate ? is there a way to manipulate the play rate speed of the entire graph and save that data so It won’t get reset everytime you switch on-off a system?

Those playrate controls are available at runtime per Visual effect component via C# API: https://docs.unity3d.com/ScriptReference/Experimental.VFX.VisualEffect.html

However those controls (playRate, pause…) are not serialized which means values are set to default when the effect is loaded. If you want to serialize them, you have to do it with a small script alongside your visualeffect component.

Thanks!! my dev teammate wrote me a small script to control the playrate value from an exposed value slider and retains that information into the prefab allowing me to tweak an entire FX speed afterwards. Thanks for pointing me in the right direction.

Hi Diego,

Would you be willing to share that script or let me know how it was made? It would be very useful for my project. Thank you

Hi @Kidus, here you go. I wrote this script to give me that functionality. Just create a new script in your project’s Code folder named VisualEffectTimeScale.cs. Then edit the script and replace the entire contents with this.

Add the component to your Visual Effect GameObject in the scene.

using System;
using UnityEngine;
using UnityEngine.VFX;

[RequireComponent(typeof(VisualEffect))]
[ExecuteInEditMode]
public class VisualEffectTimeScale : MonoBehaviour
{
    [Range(0.0f, 10.0f)] public float SimulationTimeScale = 1.0f;

private VisualEffect Graph;

private void OnValidate()
{
    Graph = gameObject.GetComponent<VisualEffect>();
}

private void Update()
{
    Graph.playRate = SimulationTimeScale;
}
}
1 Like

Made an account here just to reply to this! Thank you so much for sharing that script!
Absolute lifesaver for someone like me who is very code-impaired.

Truly appreciated, with a bonus for how straightforward and clear your explanation was! Cheers!

You’re welcome! Glad I could help.