I want to synchronize irregular animation times and movement speeds

Situation

I have three animations set in BlendSpace1D: idle, walk, and run, set at three
locations: 0.0, 0.5, and 1.0.
The duration of each animation is irregular.

What I want to implement

I want the animation movement and speed to be synchronized properly.

Version

OS: Windows 10
Godot: 4.5 C#

Animation Asset

URL (free version: Idle, Walk, Sprit): Universal Animation Library by Quaternius

What I’ve researched

There are various methods for using ChatGPT, including root motion, and I’ve tried them all, but I can’t find the right method.

Controller.cs

Implement and experiment with what you can do using AnimationTree

using Godot;
using System;
using System.Text;

namespace Player
{
    public partial class Controller : CharacterBody3D
    {
        [Export] public AnimationPlayer animationPlayer;
        [Export] public AnimationTree animationTree;

        Vector3 direction = Vector3.Zero;

        const float deadZone = 0.1f;
        public override void _Ready()
        {
            animationTree.Active = true;

            //            tree.Set("parameters/move_blend/blend_position",0.0f);
        }

        float ApplyDeadZoneRemap(float value)
        {
            if (Mathf.Abs(value) < deadZone)
            {
                return 0.0f;
            }

            float sign = Mathf.Sign(value);
            float magnitude = (Mathf.Abs(value) - deadZone) / (1.0f - deadZone);
            magnitude = Mathf.Clamp(magnitude, 0.0f, 1.0f);
            return magnitude * sign;
        }

        public void AnimationProcess()
        {
            GD.Print("Direction Length: " + direction.Length());
            animationTree.Set("parameters/Move/blend_position",direction.Length());
            
        }




        public override void _Process(double delta)
        {
            direction = Vector3.Zero;
            direction.X = Input.GetJoyAxis(0, JoyAxis.LeftX);
            direction.Z = Input.GetJoyAxis(0, JoyAxis.LeftY);

            /*
                Basis camBasis = camera.GlobalTransform.Basis;
                Vector3 direction = (camBasis.X * inputDir.X) + (camBasis.Z * inputDir.Z);
                direction.Y = 0;
                direction = direction.Normalized();
            */

            direction.X = ApplyDeadZoneRemap(direction.X);
            direction.Z = ApplyDeadZoneRemap(direction.Z);


            AnimationProcess();

            Velocity = direction.Normalized() * 1.0f;



        }
        
        public override void _PhysicsProcess(double delta)
        {
            MoveAndSlide();    
        }


    }

}

Have you tried the sync property in the blend node?

I think as long as this is true it will advance the blended animation for you and animation duration shouldn’t matter.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.