Pace
Pace measures planted-foot motion in looping animations, estimates a suitable ground speed, and builds a readable playback controller for Motor6D rigs.
What you get
Compare clips and measured speed bands, spot gaps your current animations do not cover, inspect estimated foot slip, and measure local KeyframeSequences before publishing.
How it holds up
Its READ, CHECK, INSTALL workflow keeps the decision visible. Pace-owned output can be installed or removed with Undo support, and the editable source is included.
What it does not do
Script integration is required. Clips need suitable in-place, near-closed loops, Linear easing and full-weight joint poses; runtime animations must be published for your experience. Pace is not IK or a blend tree and cannot guarantee zero sliding.
The listing, word for word
Match NPC and creature animation speed to movement.
Pace measures foot contacts, estimates clip speed bands and flags uncovered speeds. Preview estimated slip; install/remove Pace-owned output with Undo. Source included.
START: Enable the Studio plugin. In Edit mode, put uniquely named Animation objects or local KeyframeSequences inside one Motor6D rig Model. Select it, then READ > CHECK > INSTALL.
Script integration required. With model set to your installed rig: local c,err=require(model.Pace).attach(model) assert(c,err) Call c:update(dt) from RunService.Heartbeat. Keep the connection; disconnect it, then c:destroy() when finished. You provide movement. For CFrame-driven motion, use c:setSpeed(studsPerSec) then c:apply() instead of update.
Requires in-place, near-closed loops, Linear easing and full-weight joint poses. Runtime clips need published IDs accessible to the experience. Gaps stop playback, not movement. Not IK or a blend tree; zero sliding is not guaranteed.
