Search Unity

  1. We are migrating the Unity Forums to Unity Discussions by the end of July. Read our announcement for more information and let us know if you have any questions.
    Dismiss Notice
  2. Dismiss Notice

Feature Request Along with the Blackboard rework, Provide a way to create Exposed but hidden Properties

Discussion in 'Visual Effect Graph' started by Guema, Apr 22, 2024.

  1. Guema


    Jun 21, 2015
    It's been quite a long time i'm looking for a way to use VFX graph for my usage, which is in my opinion very common : Projectiles.

    Firstly here is a link of a post about the problem i had, and still have today, and already had long ago, and i'll provide a short, and long explaination.

    In short :

    I want to be able to have a system that manage a single particle as a "particle head", which basically could correspond to the actual bullet you fire from a gun or the actual fiery rock of a fire ball etc...

    For that the minimum i ask is either or both :
    - A way to Expose a VFX Graph Property, without showing it in the Inspector (Exposed only for C# and/or Timeline)
    - A way to Make an Hidden In Inspector Category in VFX Graph Properties, for the same result : Hide something in the Inspector while making it accessible for CPU code.
    - A way to Edit Un-Exposed VFX Graph Property through C# code

    I think this a very resonnable demmand.

    Long Version :

    So, while my demand may look unrelated with what i need, in the link i posted on first time comes to a conclusion where killing a System on CPU event could only be achieved with Exposed Properties. However Properties exists to let People customizing a VFX graph instance, Not to refer runtimes value that are meant to change VFX phases.

    What's Strange is that it looks like i'm using VFX graph wrongly. Or either VFX graph is wrongly designed.

    It looks perfectly fine when you want do do particles that are meant to be part of a decor or a scenery. However when it comes to make it functionnal for doing things such as gameplay element, it quickly become hacking and workarounds.

    The current way to do what i want to do is very unsatisfying as i want to keep the Properties Inspector clean to allow customisation, as i want to reuse and make very customizable VFX.

    I could ear critics about my usage of the Graph, like "You don't need a whole graph if you have a single particle, use a mesh/sprite/plane instead". But actually, I will have to use it anyway because i also want to have a Trail, and an Impact Effect, and maybe other procedural particles. I want to control my particle head as a VFX graph part, because it allow to define the whole particle effect as single and all-contained component, an i can imagine controlling the head's properties along with other parts of it like the trail, the colors, etc... I could for exemple want to control the blending method, of both the head and the trail with a single dropdown, I could for exemple want to control both the color of the head particle and the trail with a single gradient. There is plenty of advantage of using that way, but it's like it is not designed for that.

    It is called "VFX graph", so what i expect is a graph where i can design any kind of VFX. Actually, the particle head is a part of my particle effect, I do not understand why i should use multiple components for what a single could do better if it was a bit more cleaner. The VFX graph should be able to manage particles with undefined death time.

    What i was waiting ideally was some way to kill, destroy a particle, or a particle system (including its still living particles) with a very simple C# payload, or use the already existing Events. Without killing the whole VFX, Because when i want to kill the main particle, is also when i want to play the death effect, the impact effect, that i include in the same system. While this last part works fine, It's however absolutely impossible to control the existence of a system through event, you can only stop Emission, not killing already living ones (or at least you can't without heavy workarounds or hacks)

    ^ This way would be ideal but, at the moment, it is perfectly possible to do this with Properties, Just allow separating design values and runtime, functionnal ones.

    This features are already existing for Components through [SerializeField] [HideInInspector] and some other attributes like this, They are primordial for project when scaling up in complexity, make those filter available here too.

    Thanks for your comprehension.
    Last edited: Apr 22, 2024