As a Roblox developer, it is currently too hard to make adjustments to the default Animate script and use it in a meaningful way. I would love to see a modular set up for the Animate script or creating its own service tasked with managing the default animations and adding new ones.
To me, the biggest problems with the current Animate script (view it here) are:
Difficulty changing default animations
Here’s a common way of changing animations:
Method 1 (I believe most commonly used)
Just posting a quote that explains it all pretty well.
One thing the code leaves out is that the Animation instances must be changed (children of the Animate script) as well.
Method 2 (per developer.roblox.com)
This is the second method, because the first seems more commonly used and I’ve seen people having issues changing animations with the following suggested code. Nonetheless, here it is below.
(Code goes in a server script)
local Players = game:GetService("Players") local function onCharacterAdded(character) local humanoid = character:WaitForChild("Humanoid") for _, playingTracks in pairs(humanoid:GetPlayingAnimationTracks()) do playingTracks:Stop(0) end local animateScript = character:WaitForChild("Animate") animateScript.run.RunAnim.AnimationId = "rbxassetid://616163682" -- Run animateScript.walk.WalkAnim.AnimationId = "rbxassetid://616168032" -- Walk animateScript.jump.JumpAnim.AnimationId = "rbxassetid://616161997" -- Jump animateScript.idle.Animation1.AnimationId = "rbxassetid://616158929" -- Idle (Variation 1) animateScript.idle.Animation2.AnimationId = "rbxassetid://616160636" -- Idle (Variation 2) animateScript.fall.FallAnim.AnimationId = "rbxassetid://616157476" -- Fall animateScript.swim.Swim.AnimationId = "rbxassetid://616165109" -- Swim (Active) animateScript.swimidle.SwimIdle.AnimationId = "rbxassetid://616166655" -- Swim (Idle) animateScript.climb.ClimbAnim.AnimationId = "rbxassetid://616156119" -- Climb end local function onPlayerAdded(player) player.CharacterAppearanceLoaded:Connect(onCharacterAdded) end Players.PlayerAdded:Connect(onPlayerAdded)
Animations should not take this much effort to change, especially as Roblox seems keen on improving and simplifying the ability to induce generic/default character aesthetics. Introducing a modular set up could greatly improve the ability of the individual developer to make quick changes with little to no programming knowledge as well.
Alternative Solutions Besides Changing the Animate Script
- Modifying HumanoidDescription to allow for the input of user created animations (currently only supports Avatar Shop/Catalog animation bundle component animations.
- Adding animation controls directly into Game Settings (currently the only setting for animation is Standard or Player Choice)
Animate is not as versatile as it seems intended to be
Animate references the animations for the normal linked sword and checks to see if the player is using tools. However, the Animate script seems to be pretty much hard coded to only work with the linked sword, or to rely on StringValues of animations within the tool itself. Most developers are beyond this and prefer to work with modular systems for readability and increased functionality. This is why many developers handle animations solely through the tool itself, rather than trying to make their tool compatible with the Animate script.
This wastes a potentially valuable resource and the ability to easily centralize animation control.
Animate allows few customization options, even to the default animations
Customization (or at least the ability to customize) is something sorely lacking in the current Animate script. Being able to customize animation Speed, Priority, TimePosition, Looped, etc. could all be properties that could be extremely useful depending on the circumstance. Being able to customize animations at the start of the game, or midway through, would be very useful (imagine a simple detail in a game, such as increasing the swim animation speed if the player was escaping from some bad entity without having to utilize a walkspeed change, being easily enabled with a quick function call).
If this issue is addressed, it would improve my development experience because code could be more streamlined and readable when making simple changes to animations. A modular or service based approach could introduce simple functions such as
ChangeIdle(AnimationId, TableOfAnimationProperties) or
ConfigureAnimation(etc.). This would greatly simplify this process and make a uniform animation provider accessible and preferable for scenarios such as tool animations, adding increased action animations, custom emotes, etc.
Please share your thoughts below.