анимация проигрывается через раз [РЕШЕНО]

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

анимация проигрывается через раз [РЕШЕНО]

Сообщение BlackMamba 20 апр 2011, 10:26

по коду скрипта анимации соответствующая анимашка должна проигрываться при наступлении определенного события, по дебагам выяснилось, что событие для анимации наступает гарантированно, но анимация проигрывается через раз. В моем случае есть 4 анимации: бег вперед, назад и приставными шагами влево/вправо, вперед/назад проигрывается бес сбоев, а приставными - через раз. Все анимации из одного анимационного ряда, разделены при импорте через split animations, у каждой wrap mode = once, может кто-нибудь знает, в чем причина такого поведения анимации?
Последний раз редактировалось BlackMamba 20 апр 2011, 14:50, всего редактировалось 1 раз.
mail: _gdeMoiGusi@gmail.com
skype: Ellseworth
Аватара пользователя
BlackMamba
UNITрон
 
Сообщения: 305
Зарегистрирован: 06 янв 2011, 16:16
Откуда: Москва

Re: анимация проигрывается через раз

Сообщение Order 20 апр 2011, 11:29

Ну хотя бы скрипт привели ...
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: анимация проигрывается через раз

Сообщение BlackMamba 20 апр 2011, 12:27

Синтаксис:
Используется javascript
function Update() {
        RunZ("RunFLeftLeg", "RunFRightLeg", "RunBLeftLeg", "RunBRightLeg");
        RunX("RunLeft", "RunRight");
        lastStep = controller.del;
}
......................................................................................
function RunX (Left : String, Right : String) {
        if(controller.onStep == true && controller.onStep != controller.lastStep) {
                if(Mathf.Abs(controller.MoveSpeedX) > Mathf.Abs(controller.MoveSpeedZ)) {
                        if(controller.MoveSpeedZ < 0)
                                MoveX(Right, Left);
                        else
                                MoveX(Left, Right);
                }
                else {
                        .......................................................................
                }
        }
}
........................................................................................
function MoveX(Left : String, Right : String) {
        if(controller.MoveSpeedX > 0)
                PlayAnimX(Right, weightMod);
        if(controller.MoveSpeedX < 0)
                PlayAnimX(Left, weightMod);
}
........................................................................................
function PlayAnimX(anim : String, weightModifier : float) {
        var weight = Mathf.Clamp((Mathf.Abs(controller.MoveSpeedX) / weightModifier), 0, 1);
        animation[anim].speed = (animation[anim].length) / controller.del;
        animation.Blend(anim, weight, (controller.del / 2));
}

воть. Но вообще, дебаги говорят, что скрипт работает корректно, здесь больше вопрос по особенности импорта анимаций, я думаю
mail: _gdeMoiGusi@gmail.com
skype: Ellseworth
Аватара пользователя
BlackMamba
UNITрон
 
Сообщения: 305
Зарегистрирован: 06 янв 2011, 16:16
Откуда: Москва

Re: анимация проигрывается через раз

Сообщение Order 20 апр 2011, 13:00

Как все усложнили..
А скорость правильно считает ?
Добавить rusorder в Skype , _juc4you@mail.ru ;
Платные консультации, программирование ваших проектов Unity3d,C#,IOS,Android.
Скрытый текст:
_ttp://www.youtube.com/watch?v=1m2qTnatSjM&list=UUjcKNvONEUHCILG7QrX1NFg
Order
Старожил
 
Сообщения: 805
Зарегистрирован: 21 фев 2010, 10:34

Re: анимация проигрывается через раз

Сообщение BlackMamba 20 апр 2011, 13:39

да - правильно, с этой скоростью персонаж передвигается, усложнил, потому, что персонаж передвигается шагами, а не плавно скользит, как контроллер от первого лица.
mail: _gdeMoiGusi@gmail.com
skype: Ellseworth
Аватара пользователя
BlackMamba
UNITрон
 
Сообщения: 305
Зарегистрирован: 06 янв 2011, 16:16
Откуда: Москва

Re: анимация проигрывается через раз

Сообщение BlackMamba 20 апр 2011, 14:33

в общем проблему удалось решить от части костылем: дело все в настройке wrapMode, почему-то если у какой-то анимации он установлен, как Once, то такая анимация не проигрывается повторно сразу после ее завершения(как при Loop), между ее проигрыванием должен быть какой-то промежуток времени(при движении вперед-назад у меня чередуются анимации для левого и правого шага, поэтому они работают корректно), пришлось на ходу изменять wrapMode:
Синтаксис:
Используется javascript
if(controller.MoveSpeedX == 0)
        animation[Right].wrapMode = animation[Left].wrapMode = WrapMode.Once;
else
        animation[Right].wrapMode = animation[Left].wrapMode = WrapMode.Loop;


Хотя, вообще странно, почему бы и не проиграть Once-анимацию сразу после ее завершения, мало ли условия потребуют.
mail: _gdeMoiGusi@gmail.com
skype: Ellseworth
Аватара пользователя
BlackMamba
UNITрон
 
Сообщения: 305
Зарегистрирован: 06 янв 2011, 16:16
Откуда: Москва


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24