Visulie ─ A Novel, All-Purpose Animation, Data, and Effects Suite

Ts me again.

Remember my animation priority that you (rightfully) turned down?
You said there’d be no point since the animations override each other. Turns out thats not the case :confused:


In this video you can clearly see how only the last part of the “overriding animation” is being played
I also tried ending the other animation with

renderer.getActiveAnimation(...):Destroy(false)

but that didn’t really work. Neither did pausing the animation or waiting until it is done

My recommendation: Add a :Stop() method (cus pause is just pausing it or sum idk)

1 Like

There is no :Stop() method. :Pause() exists.

You can override animations by using loadAnimation() on the rig you’re currently playing.

local Animation = Visulie.new(data)
Animation:Play()

task.wait(0.5)

local rigDepenencies = Animation:GetRigDependencies()
local OverrideAnimation = Visulie.loadAnimation(otherData, someCFrame, rigDependencies)
OverrideAnimation:Play()

I’ve never run into issues with overriding animations. Are you able to provide the code you’re using? I’m not sure what’s wrong from looking at the video, either.


this would be my code. Sorry for making an unclear video

Animation I (the spin)

Animation II (the uhh… bigger spin)

The result of running the code (AnimationId = 1) on the looping spin-animation results in the video above

1 Like

Thanks for the extra information! I believe I have found the underlying issue. This should be fixed now after updating the plugin and replace the Visulie Renderer. Again, Thanks for bringing this up! Let me know if there are still any issues.


Visulie V1.2.10

1 Like

i do got a few suggestions

  • randomized values on certain properties

  • custom formula support for example if we would want to use math.cos or something else

  • step?, i don’t know how i could call this but, a background animation that blends with the others (maybe this already exists), like a spinning animation but it still plays when you try to change the cframe by , up , down or any direction

  • support for camera animations, as far as i know, moon animator has a way to export camera animations, so if visulie had his own exporting method for camera, or just atleast to preview them would be nice

Also i’ve got a question, is there any way to apply force/Impulse to a part in the animator?

Thank you again.

Also I’ve got three more suggestions coming right up:

Animation editor

  • Support for un-animatable objects
    > This is really needed. Instead of deleting the objects, keep them without adding any keyframes. Helps with model hierarchies alot.
    > Example: You want to animate a Tool. Because of the deletion of the tool ancestor, you will only be left with the Handle, which can be animated.

    Now I get this isn't necessary but it would make animating some things easier. I'd much rather call loadanimation on Tool than on Tool.Handle

  • Ancestor name variety.
    Each animated object usually has a common ancestor for all parts. Renaming this makes the animation un-usable. This sucks in a way. I don't know how and if its "fix"-able but it sure would be nice.
    > Example: I made some coins the player can collect in my game. I wanted their names to be numerated (1,2,3...) but since the animation would only work on one (called "1"), all of my coins are now called "1"

Animation playback

  • Now I would assume this is a really, REALLY advanced feature but if you add it you would probably make this plugin stand out even further from all of the others from the competition.
    Keyframe variables
    Let me explain. When animating humanoids, I ran into an issue. I can animate their movement (limbs), but not the location they move to. (or i just suck :sob: ) This is where this suggestion could come in. The animation module is designed in such a way that the Keyframe's values can be changed, allowing for advanced movement / adaptability. This is technically already possible with your current saveable animation-modules but realistically it is too hard (to understand) for an average code editor dweller like me. Let me create a code example of what this could looke like:

    local animation = require(path.Animation)
    -- You would be able to connect variables to keyframes (the variable would be a reference to a keyfame)
    animation.KeyFrameVariables.VariableNameHere.Value = game:GetService("Players").LocalPlayer.Character:GetPivot()
    Visuliue.loadAnimation(animation, Enemy.CFrame, {Enemy})
    -- This would move the "enemy" to the "localplayer" whilst also animating the limbs (for example with a run animation)
    

This was a feature I wanted to implement for a long time as well. I was thinking some sort of “property” system where you can adjust a property, and the keyframes will adjust accordingly. However, after tinkering with the code for a while, I decided that this was much too complex and unperformant.

This is not out of the question, though. It is, however, unknown at this time whether this will ever be implemented.

Yes, you can do this by playing the animation and calling :SetOrigin() on the animation to place it somewhere else.

You can technically animate the camera, but you’re going to have to separate the camera animation from the rigged animation (so you create one animation for the camera, a separate animation for the effects, then play them both at the same time). Visulie isn’t meant to be a cutscene plugin. It is meant to create independent animations.

Not yet. Is there a use case for this? Usually, parts are anchored in animations. But I guess this could be useful for unanchored physical assemblies.

There is a similar planned feature that will be released in the future. Although it doesn’t specifically fit your use case, it can help in some instances.

I play a lot of animations on existing rigs, here’s a crude example:

As you can see, the only things that are animated are the model and particles. All the parts in between don’t really matter.

My thoughts on the implementation is to have an option to “ignore” certain instances. Once you ignore an instance, all of its descendants are ignored as well. These instances will also not be exported. Let me know if you have any issues with this behavior!

This is a tricky one. I initially wanted to be able to animate anything regardless of name. This can be achievable, but it does add a level of complexity. I may do this in the future, but it’s not guaranteed.

1 Like

Yeah, that’s it, it would be great to make physics based animations for parts, i’ve seen it before and they look cool, for example a bouncing part that then resizes or his transparency disappears

Visulie V2.3.11

Bug fixes

  • Importing rigs where parts are parented to models are no longer bugged in world space, and now are correctly stored in object space.
  • Methods on the final frame now fire correctly instead of being ignored.

Adjustments

  • Removed destroyOnCompletion parameter for :Play() and :Resume().

Features

  • Added new method to the Visulie renderer, PlayThenDestroy(), which plays the animation once (regardless of looping state), then destroys the animation.

Visulie now supports animation and playback of attributes and tags!

Simply add/remove tags/attributes, and it will be recorded. Here’s an example of a use-case!

Demonstration:


This is a new comprehensive Visulie version! Please update your data!

3 Likes

Hi, I was reading your module and I found it quite interesting, but some doubts arose…

  1. Is it useful for non-static Objects, vehicles or similar?

  2. At production level, how optimized is it? Let’s say a big map with many animatable instances?

  3. How does it work, does it have some form of Client to Client Replication, can it be run only on client and manage not to load non-visible animations?

While possible, it’s not meant to simulate physics objects (for now, at least).

The module is quite optimized at what it does. It’s up to you to ensure that you’re playing animations effectively across a map (for example, pausing animations that cannot be seen). If you have, say, 10000 animations running, it will lag regardless.

It’s purely client-sided (but you can also play it serverside, but there is no custom replication). If you want animations to replicate, you must design a replication system yourself (which is standard for custom scripted animations).

Again, it’s up to you to decide how to play/not play animations depending on visibility.

3 Likes

Is 2d animating still possible in the new version?

2 Likes

Right, I forgot to add that in.

You should be able to drag around your content folder now.


Visulie 2.4.11

Features

2 Likes

Hello again, one more thing, I don’t quite understand how to animate a UI, do you have any demos or something like that?

1 Like

Sure!

It’s very simple, actually. Here’s a short video tutorial:

After you export your animation, you can play the animation using the Visulie Renderer module:

local Visulie = require() --> path to the visulie renderer

local Animation = Visulie.new(yourAnimationData, CFrame.identity, YourScreenGui)
Animation:Play()
2 Likes

Is it possible to make/load animations on pre-made gui objects?

What do you mean by “premade” gui objects? If you mean loading and playing animations on existing objects, yes, you can.

local NewAnimation = Visulie.loadAnimation(yourAnimationData, CFrame.identity, {YourExistingObjects})
NewAnimation:Play()
2 Likes

Visulie 2.4.12

Bug fixes

  • Fixed misaligned keyframes for animation lengths that are not multiples of 60
2 Likes

Amazing! Can’t wait to try it out!

1 Like

Visulie 2.5.12

Features

Sometimes, you have instances with many, many properties. However, you also realize that these properties only have one keyframe. This is annoying, as all the keyframe strips clutter up what is actually useful (the properties that have multiple keyframes). Here’s a demo of this new feature:

Adjustments

  • Minor visual improvements
1 Like