Пятница, 29 Марта 2024, 17:27

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » работа с несколькими анимационными клипами на одном объекте
работа с несколькими анимационными клипами на одном объекте
HuruffusДата: Воскресенье, 24 Февраля 2013, 20:23 | Сообщение # 1
был не раз
Сейчас нет на сайте
Здравствуйте. Пытаюсь с помощью скрипта (ниже) запустить последовательно две анимации, находящиеся на одном объекте. Но работает, только если я вызывают одну. При вызове двух скрипт выполняется, но анимации не проигрываются.

Скажите пожалуйста, как заставить работать 2 анимации?

Добавлено (24.02.2013, 20:23)
---------------------------------------------



jonarhipov.blogspot.com
vk.com/jonarhipov
jonarhipov@gmail.com
manonedgeДата: Воскресенье, 24 Февраля 2013, 20:50 | Сообщение # 2
почетный гость
Сейчас нет на сайте
Чтобы запустить последовательно, надо подождать пока проиграется первая(метод isPlaying) и потом запустить вторую. Плюс в апдейт запускать каждый раз анимацию - не уверен, что это то, что вам нужно..
HuruffusДата: Воскресенье, 24 Февраля 2013, 21:35 | Сообщение # 3
был не раз
Сейчас нет на сайте
Спасибо smile
А где бы вы посоветовали разместить запуск анимации?

Добавил
Ситуация такая: игрок ломает баррикаду, мешающую перейти в другую локацию. Если баррикада сломана, свет приглушается (первая анимация, wrap mode: clamp forever, чтоб не повторялась) и начинает мигать (вторая анимация, wrap mode: default, чтоб повторялась).
Изначально я хотел изменять свет с помощью плавного затухания, используя waitForSeconds, но с ним проблемы.

Изменил скрипт. Теперь работает только первая анимация. Чем это может быть вызвано?



jonarhipov.blogspot.com
vk.com/jonarhipov
jonarhipov@gmail.com


Сообщение отредактировал Huruffus - Воскресенье, 24 Февраля 2013, 22:53
manonedgeДата: Воскресенье, 24 Февраля 2013, 23:36 | Сообщение # 4
почетный гость
Сейчас нет на сайте
Сначала вам надо понять, что у вас написано. Вы каждый кадр стартуете первую анимацию, т.е.даже когда она закончится(play начнет играть заново, только когда анимация закончится), начнет играть опять первая анимация. Если не углубляться, то сделайте, чтобы первые две строки внутри if, выпонялись только один раз.
HuruffusДата: Понедельник, 25 Февраля 2013, 01:30 | Сообщение # 5
был не раз
Сейчас нет на сайте
Поправил. Первая анимация работает один раз, вторая тоже.
Если запускать только вторую анимацию и только один раз, то она работает и повторяется - как надо.

Извините, что код выкладываю скриншотами. По-другому никак.



Добавлено (25.02.2013, 01:30)
---------------------------------------------
Но последовательно анимации не работают. Выполняется только первая.


jonarhipov.blogspot.com
vk.com/jonarhipov
jonarhipov@gmail.com


Сообщение отредактировал Huruffus - Понедельник, 25 Февраля 2013, 01:34
manonedgeДата: Понедельник, 25 Февраля 2013, 09:39 | Сообщение # 6
почетный гость
Сейчас нет на сайте
А "destroyed" что за переменная?
HuruffusДата: Понедельник, 25 Февраля 2013, 17:32 | Сообщение # 7
был не раз
Сейчас нет на сайте
Переменная типа bool. Она принимает значение true, когда разрушается один из объектов в сцене.

Добавлено (25.02.2013, 13:11)
---------------------------------------------
Всё заработало! Я переключил wrap mode первой анимации на default. Код с предпоследнего сообщения не менял.
Спасибо вам Большое!

Добавлено (25.02.2013, 17:32)
---------------------------------------------
Я упростил скрипт. Теперь можно подключать любое количество анимаций не изменяя сам скрипт.
Первый рабочий


Но он мне не нравится из за нагромождения if.
Чтобы сделать его более лаконичным, я несколько if заменил на for. Но теперь он стал работать некорректно. А т.е. бесконечно показывается только первая анимация.
Второй НЕрабочий


Помогите пожалуйста найти ошибку в скрипте и ошибку виспользовании цикла for в частности.

Параметры анимаций и самой лампы




jonarhipov.blogspot.com
vk.com/jonarhipov
jonarhipov@gmail.com
manonedgeДата: Понедельник, 25 Февраля 2013, 22:15 | Сообщение # 8
почетный гость
Сейчас нет на сайте
В первом случае написано правильно. Во-втором, вы каждый кадр перебираете все анимации сначала запускается первая, а затем когда она доиграет, вы в цикле снова запустите первую, так как она первая в цикле и обрабатывается.

Вообщем, я советую вам почитать базовые книги по программированию вообще, чтобы понять как это работает. И ставить себя на место программы, выполняя каждый шаг программы, записывая буквально на бумажку.
HuruffusДата: Вторник, 26 Февраля 2013, 00:18 | Сообщение # 9
был не раз
Сейчас нет на сайте
Буду читать Шилдта дальше, может что и прояснится.
Я и так в него всегда заглядываю, если сталкиваюсь с проблемой, или если чувствую, что надо двигаться дальше.


jonarhipov.blogspot.com
vk.com/jonarhipov
jonarhipov@gmail.com
Fr0sTДата: Вторник, 26 Февраля 2013, 23:04 | Сообщение # 10
постоянный участник
Сейчас нет на сайте
А я проверял кадр анимации,если кадр близкий к концу или больше до можно проигрывать следующую,так на мой взгляд надежнее.



seamanДата: Среда, 27 Февраля 2013, 00:00 | Сообщение # 11
старожил
Сейчас нет на сайте
По просьбе Левши:
Цитата
Если баррикада сломана, свет приглушается (первая анимация, wrap mode: clamp forever, чтоб не повторялась) и начинает мигать (вторая анимация, wrap mode: default, чтоб повторялась).

Код
private var step : int = 0;
function Update () {
   if (step == 0 && _breakObject.destroed)  {  step = 1;  }
   if (step == 1)  {  step = 2;  AnimDelay();  animation.Play("firstAnimationName");  animation["secondAnimationName"].wrapMode = WrapMode.Default;  }
   if (step == 3)  {  step = 4;  animation.Play("secondAnimationName");  animation["secondAnimationName"].wrapMode = WrapMode.Loop;  }
}
function AnimDelay () {
   yield WaitForSeconds (animation.clip.length);
   step = 3;
}

Или
Код
private var step : int = 0;

function Update () {
   if (step == 0 && _breakObject.destroed)  {  step = 1;  }
   if (step == 1)  {  step = 2;  animation.CrossFade("firstAnimationName");  animation["secondAnimationName"].wrapMode = WrapMode.Default;  }
   if (step == 2)  {  step = 3;  animation.CrossFade("secondAnimationName", animation.clip.length);  animation["secondAnimationName"].wrapMode = WrapMode.Loop;  }
}
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » работа с несколькими анимационными клипами на одном объекте
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг