Алексей
Где кошачья мята?!
offline
Опыт:
26,543Активность: |
Stand 2, Spell-4 и др. Как их проиграть триггерно?
В кинематиках для придания большей реалистичности действию часто используется триггерная команда
Анимация - Play unit animation. Например, если какой-то герой по сюжету должен прыгать от радости, а он вместо этого стоит неподвижно, получится как-то неестественно. Самый лучший выход в этом случае - проиграть анимацию прыжка. Например, у Лорда Ужаса (Дридлорда) прыжок - это анимация Stand-3. И вот тут-то как раз и возникает проблема. Оказывается, что команда проигрывания анимации работает сразу с группой анимаций. Т.е. при попытке проиграть не Stand, а Stand 2, Stand 3 или Stand 4 результат будет непредсказуемый. Скорее всего, проиграется обычная анимация Stand (она же - Stand 1) или же вообще ничего не проиграется. В случае с лордом ужаса проблема вполне разрешима - достаточно использовать для кинематики Вариматаса - у него есть анимация прыжка Spell Third, которая проигрывается без проблем. Но в любом случае, очень обидно, что большинство анимаций юнитов оказываются триггерно недоступными. Особенно обидно бывает, когда импортируешь в карту модель WoW 10Мб весом, а потом оказывается, что из всех тамошних анимаций можно использовать лишь 3-4 штуки. Остальное же - просто мёртвый груз, ибо War вообще не понимает анимации с нестандартными именами (навроде Attack Very-Very Hard). . Триггерно решить эту проблему невозможно. А вот у JASS'еров есть шансы. Думаю, многие любители JASS во время просмотра common.j обращали своё внимание на функцию Код:
Судя по её названию, она должна проигрывать анимацию не по имени, а по номеру. Т.е. всё, что надо сделать, это подставить туда номер анимации - и готово, имя не имеет значения! Эх, если бы всё и впрямь было так просто :(. Blizzard'ы не были бы Blizzard'ами, если бы не придумали очередной способ сверления зубов дракона через задний проход. Т.е. данная функция попросту не работает! Причём абсолютно, все её вызовы просто игнорируются и на анимацию никак не влияют. . Так как же всё-таки проиграть нужную анимацию юнита? Первое, что для этого нужно сделать - создать анимационный тег. Это особый объект, представляющий собой всего лишь список всех анимаций юнита. Создаётся он при помощи ещё одной "загадочной" JASS-функции: Код:
Что только о ней не пишут во всяких мануалах! По одной версии, она добавляет новые имена анимаций; по другой - новые анимационные свойства (что бы это значило). В JASSWiki данная функция "поясняется" так: "Добавляет/удаляет анимационные свойства юнита". На самом же деле она всего лишь создаёт анимационный тег (список анимаций юнита) и "цепляет" его на указанный юнит. Рассмотрим параметры этой функции:
Анимация - Add/Remove unit animation tag. Вообще говоря, это очень странно: создать тег триггеры позволяют, а работать с ним - нет :). . Итак, тег создан (для тех, кто забыл - напоминаю: тег есть список всех анимаций юнита). А вот теперь смело вызываем SetUnitAnimationByIndex. Триггерщики могут воспользоваться для этого Custom script: Код:
Первый параметр этой функции - юнит, анимацию которого нужно проиграть. Второй - номер анимации (нумерация идёт с нуля, 0 - это, как правило, Stand 1). Триггерщикам будет несколько сложновато определять, что нужно написать в качестве юнита :), выглядит это действительно страшновато. Ну что ж, могу посоветовать создать какой-нибудь триггер для тестирования, содержащий всего 1 команду, использующую данный юнит. Затем конвертировать триггер в текст и глянуть имя глобалки юнита. (Надеюсь, я вас ещё не загрузил?) Вторая проблема - определить номер нужной анимации. WE тут ничем не поможет, т.к. его окошко анимаций сортирует их по алфавиту, а не по номеру. Номер можно определить, открыв файл модели юнита в блокноте (лучше - в виде MDL), War3Viewer, MdlVis, W3ME или подобной программе. После чего просто подсчитать анимации (от нуля), пока не дойдёте до нужной. . Итак, ещё раз (кратко, для триггерщиков): 1. Анимация - Add/Remove unit animation tag. Создаётся список анимаций на юните. Достаточно создать тег один раз, и можно проигрывать сколько угодно анимаций для этого юнита. 2. Custom script: call SetUnitAnimationByIndex(gg_unit_XXXX_YYYY,N) предварительно определив имя глобалки, содержащей юнит и номер желаемой анимации. . Ну, вроде и всё. Если что-то будет непонятно - пишите. До скорых встреч :end: Отредактировано Алексей, 11.02.2006 в 12:02. |
11.02.2006, 11:52 | #1
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
FellGuard
Losyash
offline
Опыт:
39,547Активность: |
Молодец! Прекрасная статья - авненько хотелось бы играть только одну определённую из аналогичных анимаций типа Stand 2, Stand - 3. Добавлю ещё то, что если вам надо играть анимацию БЕЗ анлогов, тоесть обычную анимацию, когда скажем, юнит тупо стоит и дышет,Ю не вертя башкой, не поигрывая мускулами - то тогда можно использовать такую триггерную функцию -
Play Unit`s animation, specific rarity (using only редко/часто animation). Это должно упростить в ряде лучаев вам жизнь. Цитата:
|
|
11.02.2006, 12:49 | #2
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
NETRAT
offline
Опыт:
83,762Активность: |
True, true
AddUnitAnimationProperties, мда, вроде тут из названия понятно что тег добавляет...
Алексей, почему про Rarity ничего не написал? можешь осветить все аспекты анимаций? |
11.02.2006, 13:27 | #3
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Алексей
Где кошачья мята?!
offline
Опыт:
26,543Активность: |
Хорошо, статью доработаю. Вообще-то она рассчитана больше на JASS'еров (только новичков в JASS), но всё равно нужно поподробнее. Почему про Rarity не написал? Так ведь это и без того все знают! Стандартная команда, в триггерах есть. Вряд ли тут что-то сложное. А вот все аспекты анимации осветить действительно нужно - т.е. статью я расширю. Только в ней станет ещё больше JASS - и да простят меня те, кто с ним не в ладах. |
11.02.2006, 16:45 | #4
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
N.Sy.Prophet
Йа Байан
offline
Опыт:
13,122Активность: |
Алексей спасибо! зач0т и респект. ;)
|
11.02.2006, 17:15 | #5
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
NETRAT
offline
Опыт:
83,762Активность: |
Алексей жасс рулит, я думаю, ты и сам знаешь. Просто чтобы польностью описать часть вара, связанную с анимациями и раскрыть тему - такая статья очень важна при создании кинематиков, к примеру, да и для РПГ карт она имеет большое значение
|
11.02.2006, 17:48 | #6
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
MapMan
Corey 8 Taylor
offline
Опыт:
21,154Активность: |
Афтор жжош! Пиши исчо! |
11.02.2006, 18:14 | #7
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Wulfrein
где я?
offline
Опыт:
88,242Активность: |
Алексей, а чё, если в самой модели взять, напр, анимацию Stand-3 (или другую, которая не проиграется), и создать такую же, тока с именем Spell Third (или ещё как-нибудь) и проигрывать её? (мышление моделлера). ИМХО так проще...
Цитата:
жж0шь!!! |
|
11.02.2006, 21:28 | #8
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Алексей
Где кошачья мята?!
offline
Опыт:
26,543Активность: |
Wolverine: Можно и переименовать. Только в этом случае придётся импортировать изменённую модель в карту, а это +300Кб (а то и больше). Зачем, если нужная модель уже есть в War'е?
|
11.02.2006, 21:39 | #9
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
N.Sy.Prophet
Йа Байан
offline
Опыт:
13,122Активность: |
Алексей Ну 300кб ты немного загнул... 150-200, а так полностью согласен.
|
11.02.2006, 21:59 | #10
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Mefist
Is it cocktail hour yet?
offline
Опыт:
98,240Активность: |
аффтар жжот, пеши еще и тд и тп. как допишешь - скажи, повешу на сайт |
11.02.2006, 23:45 | #11
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
N.Sy.Prophet
Йа Байан
offline
Опыт:
13,122Активность: |
Mefist, погодь.
Алексей загляни в тему "Татурил по Синематике". Там пытаемя помочь МапМену, написать супермегаэксклюзив для ХГМ. Может всунуть туда и твою статью? Выйдет круто, что-то роде "Заметки Синематиста". |
12.02.2006, 09:14 | #12
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
NETRAT
offline
Опыт:
83,762Активность: |
Алексей если найдешь время дополнить статью, дополни ее по ссылке http://xgm.guru/articles.php?section=wc3&name=play_animation
|
16.02.2006, 18:12 | #13
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Toadcop
offline
Опыт:
53,013Активность: |
Я имею лол идею (как всегда :)) !!! короче делаем думми абилы у которых при юзании проигрываютьса разные анимации (много разных дамми абил) потом триггерно добавляем и застовляем юзать и потом удаляем абилу и юзер ничего не замечает ! может некоторые анимы проигрыватьса не будут ! но если полностью трг то SetUnitAnimationByIndex() рулит ! но только для каждой модели индивидуально надо номер анимы писать... |
01.05.2006, 16:54 | #14
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
MPI3
Хм...
offline
Опыт:
24,197Активность: |
Алексей
Как всегда круто! |
01.05.2006, 18:08 | #15
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
MapMan
Corey 8 Taylor
offline
Опыт:
21,154Активность: |
Алексей молодец, статья хорошая, она мне только-что помогла, так что спасибо тебе, и за MdlVis с помощью которого я узнал номер нужной мне анимации!
Ты писал что можно посмотреть и спомощье War3ME но там анимации расположены в алфовитном порядке! |
02.05.2006, 12:16 | #16
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
WildCat
General Mapmaker
offline
Опыт:
10,232Активность: |
недавно гонял одну ВоВовскую модель и заметил, что триггер вызова анимации по номеру работает даже если я предварительно не добавлял юниту анимационного тэга (Анимация - Add/Remove unit animation tag). К тому же варик вовсе не спешит использовать анимацию из основного набора, если не досчитается таковой в используемом. Скажем, если мы добавим тэг First какому-либо юниту, а у его модели не окажется анимации Stand First, то будет применяться анимация не Stand, а первую (при сортировке в алфавитном порядке) анимацию содержащую слова Stand и First, например Stand Ready First. |
06.05.2006, 23:04 | #17
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
and_y87
Тру Кодер
offline
Опыт:
20,630Активность: |
Надеюсь оно мне поможет...
Статья думую та которую ждали все =)) это я про Stand - 3 =)) MEXAHuK добавил: Повозился, повозился потом ещё повозился... помогло... =) |
13.05.2006, 13:39 | #18
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Toadcop
offline
Опыт:
53,013Активность: |
Цитата:
|
|
13.05.2006, 16:35 | #19
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|