The Curviest Curve - All The Curves You Want, Named However You Like

Link To Marketplace

My first plugin, The Curviest Curve, just made it through the Unreal Marketplace approval process!

All the curves you want, all the colors you need, named however you like, all in one curve asset. I’m stupidly proud of this thing.

Here’s an example of how it can be used:

I’ve grown very fond of using curve assets all over the place with UE. I think it’s an essential part of a designer’s toolkit. The advantage in using curves is that you get a visual authoring tool to create some very complex behaviors that would otherwise require a lot of math and be much harder to adjust.

In the example above, each box’s height offset is controlled by an individual curve in a single curve asset. I do lookups into the curve asset with a time value, and use the Y axis to multiply with a height offset. This could have been accomplished with the builtin float, vector, and color curves, but the more complex your behavior, and the more parameters you’re trying to drive, the harder it is to keep everything straight.

I reached a point where working with the builtin versions was becoming painful. I needed to have a way to keep all the curves in one file to drive as many parameters as I want, and ideally I wanted to be able to name them as well so I would be able to come back to it later and adjust them easily as needed… So I built this.

Enjoy!

Link To Marketplace

4 Likes

I’d use the “Shut up and take my money!” image here, but we already bought it.

I too have been using curves a lot and I thank you for this plugin.

Thank you, @Kris! What types of things have you been using curves for? I’m thinking of putting together a tutorial video about using curve assets in Unreal. Even when not using my plugin, it can be such a useful tool.

Firearms and AI mostly.
For firearms, curves are used for recoil when firing and positions based on player input.
For AI, curves are used to sight distances, peripheral vision, how far they can hear foot steps, gunfire etc.

Very convenient when you need to tweak the things they control, since you can see the results instantly when running the game in the viewport.

That’s great. I didn’t realize you could edit curve assets at runtime! That will be very useful with what I’m working on right now.

I’d love to see what these look like. Recoil sounds like a fun application for curves, and probably simple enough for a tutorial.

If I was building it, I think I’d probably have the time value be incremented whenever a bullet fires, and then have a decay amount… the curve itself would just be used to control the direction and strength of the recoil kick. Is this how you were using them?

Updated for 4.23 and 4.24! I’ve got another update coming that will add support for the new curve editor.

Curviest Curve has been updated to version 2.2:

  • Adds support for new UE 4.24 Curve Editor

  • Adds ability to lock curves, a feature missing from the new Curve Editor

  • Adds support for new Retime and Transform tools to manipulate your curves

  • Control and change the colors of your curves at will

  • Adds the ability to group curves in a curve asset by using names segmented with dot notation

  • (e.g. Group1.Curve1 and Group1.Curve2 would both be put in a folder called Group1)

As always, I’d love to hear what you use this for. :slight_smile:

Hello, is it possible to be able to promote the variable in the get curves value? say i have 4 sets of 10 curves in each and i want to override them in 3 child blueprints with a different set of curves. having a promotable variable would be most helpful in swapping them out without too much trouble. or is there a way to do this currently?

Yes. It doesn’t seem that you can right click and promote, but you can add a new variable and then set the template on the get curve values. I made a quick video clip to show this workflow:

Please, describe adding new point to curve runtime

During play in editor, you can just keep the curve editor open to this asset and right click to add a new key or move around the existing keys (as you would with any curve asset). The changes should be immediately evident in your scripts that are using the values from the curves.

This is not designed to have new points added at runtime outside of editor nor via function calls. It might be possible but I am not sure. It may require some code changes to make a function to do so at runtime if this is something you want to add.

I’m running a bit of an experiment, and making the code for this plugin available on Github! Technically, people could just download it and steal it rather than buy from the Marketplace, but I figured it’s an acceptable risk considering it will be able to help more people this way!

Link to Github

I’m hoping this will help others doing their own plugin development or engine modifications.
It should also make it easier for people to submit issues for me to fix (if there are any).

1 Like

I’ve started a Discord server as well to make it easier for people to ask questions and offer suggestions.

Link to Discord

1 Like


I’ve just posted a new file update for 4.26 to address a warning that the “Get Curve Values” node was in an Editor Only module. It is pending approval from Epic but in the meantime you can pull the fix from Github.

New update! I’ve added three new features:

  1. Tagged Curves (using Gameplay Tags) - Make your curve lookups a bit more robust, and protect against typos.
  2. Tagged Constant Parameters - Get all the benefits of runtime editing, but for tuning single values as well.
  3. Curve Asset Inheritance - Set a parent curve and only add new curves for the values that have changed.

image

I was using this plugin today to work on Fall Damage. I put all my parameters in as curve assets, except for StunEasePow which I just kept as a constant parameter. I was able to tweak it at run time and get it all feeling good.

UE 5.0.2:
CurviestCurveAssetEditor.cpp(356), CurviestCurveAssetEditor.cpp(356)

‘SDockTab::FArguments::Icon’: Tab icons are now being managed by tab spawners and toolkits. In the rare case you need to set an icon manually, use SetTabIcon() instead Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile.

P.S. Also?

I have this same problem with “float is not compatible with Float (single-precision).”

This should be fixed. Let me know if you’re still seeing an issue.

p.s. I check Discord much more frequently than this thread. :sweat_smile:

1 Like

UE 5.1.1

TheCurviestCurve\Source\TheCurviestCurveEditor\Private\SCurviestCurveEditorTreePin.cpp(213): warning C4996: 'FEditorStyle::GetBrush': FEditorStyle::GetBrush() is deprecated, use FAppStyle::GetBrush() instead. Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile.

Hello.Can you add a blueprint function?
GetValueTime(Curve curve,float value,float& time)
Input a curve and float to get the time point of this value in the curve.
In this way, I can increase the deltatime from this time and continue to take values from this curve.
Thank you.