Страница 1 из 1

Установить позицию AnimationClip

СообщениеДобавлено: 02 фев 2018, 16:22
nikotin
Здравствуйте. Нужно не играть AnimationClip, а установить персонажа на позицию в нем (например на 1,75 секунд). в Legasy это можно сделать так
[syntax=] void Start () {
anim = GetComponent<Animation>();
anim["mixamo.com"].speed = 0;
anim["mixamo.com"].time = currenttime;//устанавливаем время по моему в секундах
}
float currenttime;// время, на которое устанавливаем позицию AnimationClip
void Update() {
anim["mixamo.com"].time = currenttime;
}[/syntax]
А как это сделать, если тип рига Humanoid в системе Mecanim, не удается найти. Как вы думаете, это возможно, и если да то как?

Re: Установить позицию AnimationClip

СообщениеДобавлено: 02 фев 2018, 18:16
samana
У аниматора тоже есть speed, только время у клипа идёт от 0 до 1, а не в секундах

Синтаксис:
Используется csharp
_anim.speed = 0;
_anim.Play("New Animation", 0, currentTime);

Re: Установить позицию AnimationClip

СообщениеДобавлено: 04 фев 2018, 08:21
nikotin
samana Спасибо, щас попробую.

Re: Установить позицию AnimationClip

СообщениеДобавлено: 04 фев 2018, 11:32
nikotin
Попробовал,установил speed на 0 и из юнити менял публичную величину currentTime

Синтаксис:
Используется csharp
private Animator animator;
   public float currentTime;
    void Start () {
animator = GetComponent<Animator>();animator.speed = 0;animator.Play("myanimlegasyn", 0, currentTime/15);
    }
   
    void Update() {
animator.Play("myanimlegasyn", 0, currentTime / 15);
    }


В итоге позиция меняется, но таз (Hips) падает на пол, не меняет своего положения и не поворачивается как в анимации, "myanimlegasyn" -имя анимации в аниматоре (там одна стэйтмашин), посмотрите видео пожалуйста, это можно как то исправить?

Re: Установить позицию AnimationClip

СообщениеДобавлено: 04 фев 2018, 12:06
samana
Странно. А попробуйте убрать флаг Apply Root Motion у аниматора в инспекторе, возможно причина в этом, а возможно и нет.
Я так понимаю, что даже без моего кода персонаж провалится вниз? Тогда надо искать причину в настройках.

Re: Установить позицию AnimationClip

СообщениеДобавлено: 05 фев 2018, 09:31
nikotin
Поэтапно все проверил, сделал новый проект - таз перестал падать на пол, но все равно таз не перемещается и не вращается, наверно это связано с тем, что метод animator.Play("myanimlegasyn", 0, currentTime/15); всегда устанавливает таз в нулевую позицию и ориентацию. Убрал Motion -не помогло -таз вообще перестает трансформироваться даже без скрипта (сн.1). У вас также все работает?
Изображение

Re: Установить позицию AnimationClip

СообщениеДобавлено: 05 фев 2018, 11:37
samana
nikotin писал(а): У вас также все работает?

Я не могу этого знать, ведь у меня нет вашего персонажа с анимацией :-??

Re: Установить позицию AnimationClip

СообщениеДобавлено: 05 фев 2018, 17:37
nikotin
Вообще если animator.speed=1; то таз меняет свое положение но все равно не корректно, вот мой простенький проект http://rgho.st/884f2xy9j.

Re: Установить позицию AnimationClip

СообщениеДобавлено: 05 фев 2018, 18:10
samana
Ага, я понимаю.
1) выделите персонажа в проекте
2) зайдите в настройки экспорта его анимации
3) укажите корневую кость (там было none)

Изображение

Re: Установить позицию AnimationClip

СообщениеДобавлено: 06 фев 2018, 10:40
nikotin
samana писал(а):Ага, я понимаю.
1) выделите персонажа в проекте
2) зайдите в настройки экспорта его анимации
3) укажите корневую кость (там было none)

Изображение

Спасибо огромное, все работает!

Re: Установить позицию AnimationClip

СообщениеДобавлено: 11 фев 2018, 11:13
nikotin
А как можно не установить а узнать текущую позицию AnimationClip?

Re: Установить позицию AnimationClip

СообщениеДобавлено: 11 фев 2018, 12:05
nikotin
нашел похоже - GetCurrentAnimatorStateInfo(0).normalizedTime;

Re: Установить позицию AnimationClip

СообщениеДобавлено: 11 фев 2018, 12:08
samana
Ищите в сети решения, их там уже много накопилось
https://docs.unity3d.com/ScriptReferenc ... dTime.html - показывает прогресс клипа от 0 до 1
https://answers.unity.com/questions/103 ... mator.html - показывает текущее время клипа