Как запустить анимацию со смещением значения последнего предыдущего пройденного состояния анимации - PullRequest
1 голос
/ 04 июня 2019

Я создаю 2D-игру сверху вниз, на данный момент я застрял на анимации.У моего персонажа есть анимация перезарядки пистолета и бега , я создал 3-ю анимацию " перезагрузки во время бега ", так как я не мог смешать их обоих хорошо.Это довольно сложно с моей точки зрения сверху вниз, потому что если персонаж перемещается, он использует те же части тела, что и при перезагрузке анимации.Моя идея состояла в том, чтобы просто установить переходы в конфигурации, которая позволила бы мне достичь этого эффекта.В настоящий момент, если мой персонаж находится в состоянии работает и игрок начинает перезагружать оружие , он переходит в состояние "reload-while-running" , то же самое с reloading (игрок начинает бегать, перезаряжая оружие, он переходит в состояние перезагрузки во время работы).

У меня вопрос, могу ли я перейти в состояние reload-while-running со смещением времени, прошедшего в предыдущем состоянии?Например: персонаж начинает перезагружаться, через половину времени перезагрузки (скажем, через 2 секунды) он начинает двигаться, поэтому должен быть переход из состояния «перезагрузка» в состояние «перезагрузка во время работы».Я хочу начать новое состояние со смещением в 2 секунды.

Я пытался добиться этого с помощью кода в скрипте, устанавливая смещение перехода текущего состояния с помощью времени, нормализованного по времени текущего состояния, но это, похоже, не работает.

AnimatorClipInfo animatorStateInfo;
AnimatorStateMachine stateMachine;
ChildAnimatorStateMachine[] childAnimatorStateMachines;
AnimatorState reload;

//AWAKE METHOD
animatorController = animator.runtimeAnimatorController as AnimatorController;
stateMachine = animatorController.layers[0].stateMachine;
childAnimatorStateMachines = stateMachine.stateMachines;

//UPDATE
animatorStateInfo = animator.GetCurrentAnimatorStateInfo(0);

        foreach (ChildAnimatorState childAnimatorState in stateMachine.states)
        {
            if (childAnimatorState.state.name.Equals("SpaceCommando-Reload"))
            {
                reload = childAnimatorState.state;
                reloadingTransitions = reload.transitions;
                reloadingTransitions[0].offset = animatorStateInfo.normalizedTime;
            }
        }
...