|
|
|
Возможности скриптов в анимации
|
|
TRam_ | Дата: Вторник, 02.12.2008, 13:13 | Сообщение # 1 |
Группа: проверенные
Сообщений: 22
Статус: Offline
| Ну, начнём темку, которую почти никто пока не трогал. Как известно, скрипты в ТРС это подпрограммы на особом встроенном языке trainz game script, позволяющие создавать всякие фитчи (управлять реакцией на поворот рычага в кабине, на нажатие кнопок в свойствах, на прохождение сртелки, триггера, а также для связывания процессов между различными обьектами и правилами в игре) Итак, чего непосредственно может трейнз. Как известно, анимацию в конфиге можно прописывать как "эффект" и как "анимированная мешь". Скриптом управлять можно и тем и другим, но "анимированная мешь" которая имеет единственную анимацию ("эффектов" может быть сколько угодно) предоставляет больше возможностей. Пока приведу описание всех функций, приведённых в траинз2006 апи Итак, в любом обьекте типа MeshObject (если посмотреть апи, там указано что подклассами этого являются обьекты карты, кабины, вагоны, стрелки и светофоры) можно задавать следующие функции управления а)для "анимированной меши" MeshObject.SetMeshAnimationState (string p_meshName, bool p_state) MeshObject - собственно обьект, которому задаётся анимация. Если идёт анимация обьекта, к которому относится скрипт, то в скрипте пишется me.SetMeshAnimationState("p_meshName",p_state); или кратко (me можно упускать) SetMeshAnimationState("p_meshName",p_state); теперь о параметрах. string p_meshName - имя меши, которое Вы прописываете в конфиге (например, если обращаетесь к "главной" меши (mesh { default{.... } }) то в скрипте для управления этой мешью должно быть string p_meshName="default"; ) И последний параметр - p_state типа bool (т.е. p_state=true или p_state=false) определяет вперёд или "реверсом" будет проигрываться анимация от текущего (если вы анимацию не трогали, то от 0) до последнего (нулевого в случае "реверса") кадра, если в меши на задано повторение (animation-loop-speed) Т.е. если вы хотите в дефолтной меши обьекта, к которому относится данный скрипт, задать проигрывание вперёд до конца то в скрипте пишите: SetMeshAnimationState ("default",true); Далее MeshObject.SetMeshAnimationFrame (string p_meshName, float p_frame) Установить номер кадра анимации p_frame (число может быть как целым, так и дробным). Остальные параметры такие же как и у предыдущей. MeshObject.SetMeshAnimationFrame(string p_meshName,float p_frame, float interpTime) То же самое, но кадр будет установлен через interpTime секунд. MeshObject.SetMeshAnimationSpeed(string p_meshName, float p_speed) важная функция. Позволяет менять скорость анимации. Если например, p_speed=2, то анимация будет проигрываться с удвоенной скоростью, если же p_speed=0.5, то с половинной. Внимание! не пишите p_speed=1000 ! Игра в этом случае на вашу функцию внимания не обратит, и будет проигрывать со скоростью в p_speed=1 float MeshObject.GetMeshAnimationFrame (string p_meshName) выдаёт текущий номер кадра анимации float MeshObject.GetMeshAnimationFrameCount (string p_meshName) выдаёт полное количество кадров Вашей анимации MeshObject.StartMeshAnimationLoop (string p_meshName) начинает повторять анимацию (равносильно прописыванию animation-loop-speed 1) MeshObject.StopMeshAnimation (string p_meshName) останавливает анимацию меши б) "эффекты" анимации. Для них определена единственная функция MeshObject.SetFXAnimationState (string effectName, bool state) которая загружает эффект с именем effectName и начинает воспроизведение его анимации в направлении state (как и для меши) Больше с эффектом делать ничего нельзя, зато для одной меши их может быть сколько угодно (если Вы не меняли дамми, а меняли толькои их анимацию, можете 1 раз экспортировать сцену, а затем создать сколько угодно файлов *.KIN . Только не забудте прописать их в конфиге )
|
|
| |
Neoklai | Дата: Вторник, 02.12.2008, 16:41 | Сообщение # 2 |
Добрый админ
Группа: администраторы
Сообщений: 266
Статус: Offline
| TRam_, привет! Спасибо, что заглянул к нам. Мы начинали с Varz-ом работать над скриптованием анимации, но в связи с его занятностью, сделали только один объект - "дежурную по переезду", которая реагирует на срабатывание триггера проходящего поезда. Но так и не доработали ее до полноценного объекта. Сразу говорю, я полный дуб в скриптах . Поэтому мало что понял из того, что ты написал сверху, можно тебя попросить перевести все это на ламерский язык просто пользователя в общих чертах . Предлагаю вернуться к идее анимированных пассажиров/проводников, которые будут как-то реагировать на прибытие поезда и/или взаимодействовать с вагоном/перроном. Со своей стороны обещаю всяческую техническую поддержку в самой анимации персонажей и моделировании вспомогательных объектов. Модель пассажирского вагона можем попросить у skimitera, он тоже уже поднимал эту идею. В общем, я готов. Ждем твоих указаний. P.S. Да, и я правильно понял, что объект может иметь несколько вариантов анимации для исходного меша? Это очень интересно.
Оживляем миры Trainz. Дорого. Качественно. С гарантией.
Сообщение отредактировал Lana - Вторник, 02.12.2008, 16:50 |
|
| |
Чингиз-хан | Дата: Вторник, 02.12.2008, 18:22 | Сообщение # 3 |
3D Maxer
Группа: давно не заходили
Сообщений: 159
Статус: Offline
| Neoklai и TRam_ если вы позволите я к вам присоединюсь, но только я то же ламер в скриптах, но хочу развиваться в этом направлении. И так пару идей насчет анимированных пассажиров на платформах: Сначало забегу немного назад: все говорят о триггерах, что их поезд чувствует и скрипт можно прописать к нему, ок! как раз то что и надо. Можно с помощью триггера прописать что к этому месту будут собираться пассажиры в определенное время, это определенное время задаеться пользователем при начтройки сессии. Можно работать в данном направлении? Потом а что мешает анимировать саму пустую сцену? Объясню: смотрите пассажир подошел к краю перона и как бы заходит в вагон, соответственно деться он никуда не может, а пустой кадр его сотрет, и так далее. Ну а теперь общая картина: поезд подьезжает к определенному месту определяемой табличкой, около нее триггер он подает с помошью скрипта команду что подьехал поезд и можно пассам двигаться к определенной точке, заходит пасс в вагон и исчезает, и так далее.
|
|
| |
Neoklai | Дата: Вторник, 02.12.2008, 18:36 | Сообщение # 4 |
Добрый админ
Группа: администраторы
Сообщений: 266
Статус: Offline
| Чингиз-хан, давай подождем Tram-а, что он скажет. Мне кажется, самый простой способ плясать от вагона: 1. Пассажиры будут частью вагона, после его остановки и открытия дверей они буду выходить на перрон и останавливаться, делая какие-либо движения. Затем заходить в обратно в вагон, либо проваливаться сквозь землю, в прямом смысле этого слова (возвращаясь на исходную позицию в вагоне). Основное условие - перроны должны быть одной высоты везде. Тут вопрос, нужно сделать так, чтобы поезд ждал, пока пассажиры отработают весь цикл и только потом он будет трогаться. 2. Вот с перроном сложнее, так как нужно будет сделать так, чтобы пассажиры подходили к конкретному месту, либо двери вагона оказывались в этом месте (что проще). Но в этом случае будет специальный перрон, а вагон может быть любой, соответствующий требуемым размерам. Анимации здесь будет больше, перрон будет тяжелым, но более разнообразным по составу участников. Но здесь будут ограничения по типам вагонов. Мне кажется первый вариант проще в реализации.
Оживляем миры Trainz. Дорого. Качественно. С гарантией.
|
|
| |
Чингиз-хан | Дата: Вторник, 02.12.2008, 18:47 | Сообщение # 5 |
3D Maxer
Группа: давно не заходили
Сообщений: 159
Статус: Offline
| 1. Ну про анимированных пассажиров можно и написать в факе при нем, что единственное условие нормальной работы пассов это стоянка вагона например 5 минут, и от этого плясать, хотя 1а. а как ты собрался прописать это в самом вагоне, кнопки то на открытия дверей нету, это не электричка. ххотя каждый вагон можно сделать как электричку с открывающимися дверьми, на определенную сторону. 2. Мне кажеться все таки он, так как здесь то же все будет с помошью тригерра, но это конечно спец платформы, а ни как у всех вагонов, то есть на всех платформах. Но как ты собрался устанавливать рамки ведь вагоны все одинаковых размеров, а платформы все разные, даже на 100см уже будут пассы летать, а ведь понастоящему они в трс все разные, не то что вагоны
|
|
| |
Neoklai | Дата: Вторник, 02.12.2008, 19:07 | Сообщение # 6 |
Добрый админ
Группа: администраторы
Сообщений: 266
Статус: Offline
| Quote (Чингиз-хан) 1. Ну про анимированных пассажиров можно и написать в факе при нем, что единственное условие нормальной работы пассов это стоянка вагона например 5 минут, и от этого плясать, хотя 1а. а как ты собрался прописать это в самом вагоне, кнопки то на открытия дверей нету, это не электричка. ххотя каждый вагон можно сделать как электричку с открывающимися дверьми, на определенную сторону. А зачем нам кнопка? В принципе можно сделать два пака пассажиров, выходящих налево или направо, или колдовать с первым кадром анимации, поворачивая их в нужную сторону. Quote (Чингиз-хан) 2. Мне кажеться все таки он, так как здесь то же все будет с помошью тригерра, но это конечно спец платформы, а ни как у всех вагонов, то есть на всех платформах. Но как ты собрался устанавливать рамки ведь вагоны все одинаковых размеров, а платформы все разные, даже на 100см уже будут пассы летать, а ведь понастоящему они в трс все разные, не то что вагоны Я думаю это будет уже полностью готовый объект, с перроном, иначе будут сложности. Ладно, ждем TRam-а, определим с ним каким способом будем двигаться.
Оживляем миры Trainz. Дорого. Качественно. С гарантией.
|
|
| |
Чингиз-хан | Дата: Вторник, 02.12.2008, 19:13 | Сообщение # 7 |
3D Maxer
Группа: давно не заходили
Сообщений: 159
Статус: Offline
| Quote (Neoklai) ждем TRam-а, определим с ним каким способом будем двигаться. Да, я также считаю, надо дождаться его , так что ждем!
|
|
| |
Добрый | Дата: Вторник, 02.12.2008, 20:11 | Сообщение # 8 |
Чеширский кот
Группа: администраторы
Сообщений: 3531
Статус: Offline
| Quote (Neoklai) от с перроном сложнее, так как нужно будет сделать так, чтобы пассажиры подходили к конкретному месту, либо двери вагона оказывались в этом месте (что проще). Я долго размышлял, как заставить локомотив останавливаться строго около таблички "остановка локомотива". Просто дать команду "двигаться к маркеру", а сам маркер подвигать по треку, чтоб он оказался в нужном месте. Так что в приципе останавливать состав так, чтобы дверь вагона была строго в месте погрузки пассажиров - возможно! Только создателю карты сразу надо будет рассчитывать под конкретный вагон и в эту точку вывести конец дорожки персонажа. А принцип начала движения пассажиров может быть тот же, что и для дежурной по переезду (скажем, через 10 сек после срабатывания триггера (подождём остановки поезда)).
|
|
| |
ТоХ | Дата: Среда, 03.12.2008, 12:05 | Сообщение # 9 |
Группа: давно не заходили
Сообщений: 49
Статус: Offline
| Quote (Добрый) чтобы дверь вагона была строго в месте погрузки пассажиров - возможно! Вагоны бывают разные. С разным расположением дверей. Длина и количество секций локомотива тоже влияет на местоположение дверей.
Сообщение отредактировал Lana - Среда, 03.12.2008, 12:16 |
|
| |
TRam_ | Дата: Среда, 03.12.2008, 18:06 | Сообщение # 10 |
Группа: проверенные
Сообщений: 22
Статус: Offline
| к сожалению, проблема и её решение намного шире, чем зесь написано. Кстати, в трс есть функция по определению расстояния до следующего путевого обьекта на пути, поэтому останавливаться строго у одного места не обязательно - точку привязки всегда можно "подвинуть", кстати Итак, список проблем: 1) при отправлении поезда ни люди на платформе, ни люди в вагоне не должны смешаться относительно них (и получаем, что их желательно соответственно привязывать к соответствующим местам) 2) движение пассажиров по платформе - чтоб не сталкивались и приходили точно к месту привязки (не забываем, что поезд у нас не только "у таблички" останавливается) 2а)возникает вопрос о том, к какому вагону каким людям идти - неопытный машинист может вообще полплатформы проехать 2б)возникает вопрос о том, как люди должны собираться в очередь - ведь и в электру все не сразу "влезают", и в пасс без проверки билета мало кто заходит. В обоих случаях образуется очередь, и с ней тоже надо бороться 2в)мы не знаем, куда наш машинист протянет состав. И мы получаем дилемму, знакомую каждому пассажиру - "а куда сразу бежать - вперёд или назад, чтоб сразу в свой вагон попасть?" 3)разная высота платформы. С этой штукой можно бороться, если чуть ускорить анимацию на "слезании с последней ступеньки" и одновременно приподнимать точку привязки. Соответственно для пассажиров, которые на платформе, её (высоту) можно было бы прописывать в свойствах платформы А теперь о средствах, которые мы имеем для 1 и 2ых пунктов а) используя 3 "вложенные" точки привязки и управляя их анимацией, мы можем полностью задать движение человека (с учётом его поворота). Кроме того, скорость "ходьбы" тоже никто изменять не запрещал б) мы можем прописать в вагоне (в котором имеется привязка пассажиров "внутри") где по отношению к началу его автосцепки находятся его двери в) можем математически более-менее записать как пассажир "доходит" до очереди (за это я брался, но думаю что лучше с этим проэктом подождать - времени пока ни у кого нет, особенно у сдающего зачёты и готовящегося к экзаменам физтеха... ) Хотя это можно заменить каким-то более простым алгоритмом, но я пока не додумался каким г) очередь может быть "сдвинута" до места предполагаемой остановки вагона, а затем дополнительно "додвинута" до точной точки, где у нас находится точка привязки к вагону д) можем сделать анимацию выхода пассажиров по вагону (с учётом её корректировки под высоту платформы), и их "снятия" с привязки на вагоне и "установки" на привязку к платформе. На платформе они разбредаются обычной анимацией е) можем сделать обычную анимацию движения людей по очереди (она теперь от "внешних факторов" не зависит) ж) соответсвенно человек, стоящий первый в очереди может "сняться" с платформы и "привязаться" к вагону, и совершить анимацию залезания. Соответственно выгодно делать несколько точек привязки для одного вагона (пока один заходит, второй "перепривязывается") з) это очень сложная и наверняка "глючная"(я о производительности) система. Возможно, тут будет идти речь не об 1 человеке, а о группе людей, садящихся в один вагон. И дополнительно предлагается сделать специальный триггер, учтановленный где-то подальше, который и "запускает" слежение за поездом, установку на платформу т.д. До этого на платформе просто стоит большая группа людей (т.е. одна из нескольких, доступных в "комплекте"), и выполняет рандомные анимации. Все эти штуки обязательно будут требовать ЛОДов по отключению привязок, анимаций и т.д. В общем, было бы свободное время... Но вообще это и моя мечта, так что как смогу так буду этим делом заниматься
|
|
| |
ТоХ | Дата: Среда, 03.12.2008, 18:27 | Сообщение # 11 |
Группа: давно не заходили
Сообщений: 49
Статус: Offline
| "Живые" пассажиры, на мой взгляд, утопия и вообще не то, на чем стоило бы акцентировать внимание. Я лично не жду от сима таких подробностей. Хотя, от "живого" проводника я бы не отказался.
|
|
| |
TRam_ | Дата: Среда, 03.12.2008, 19:05 | Сообщение # 12 |
Группа: проверенные
Сообщений: 22
Статус: Offline
| проводника вообще можно было бы встроить без всяких скриптов - в анимацию двери. Просто это неинтересно. Хотя может и такое будет. Другое дело, что "удерживание" дефолтными платформами поезда и различие в высоте платформы требует обратного. Но в принципе, это может появиться раньше, чем пассажиры
Сообщение отредактировал TRam_ - Среда, 03.12.2008, 19:06 |
|
| |
Neoklai | Дата: Среда, 03.12.2008, 19:12 | Сообщение # 13 |
Добрый админ
Группа: администраторы
Сообщений: 266
Статус: Offline
| TRam_, ух..... ничего ты замахнулся, ну, я даже не знаю что сказать, мне кажется это будет очень сложная система, проверять коллизии, делать вариации в анимации, по сути придется создать игру в игре. Я так понимаю здесь будет задействован как ПС, так и перрон. Я как ламер, имею ряд вопросов: 1. Можно ли изменять ход анимации в процессе ее выполнения, причем в идеале это должно быть плавно? Каким образом? Подменой kin с любого кадра? 2. Что будет происходит с людьми, которые вышли/зашли по окончанию действия? в теории они должны вернуться на исходные позиции. 3. Как вообще можно задать направление движения персонажа в процессе, если это повлечет за собой вращения основного дамми? Я конечно думаю, что пробовать все равно стоит, по крайней мере у нас уже есть некое понимание и главное желание, и пусть это кому-то и не нужно, здесь главное сам процесс. Я не знаю, наверно нужно начать с простого. Например с проводника. Пусть он просто выходит и заходит. На нем можно отработать вариации с файлами анимации для сторон вагона и перронов. Через точки привязки все желающие смогут их себе в вагоны интегрировать. А ответная часть будет триггером. А потом можно перейти к стационарной части - перрону. Но мне кажется, все-же нужно вводить некие ограничения по требованию к перрону, а в идеале и перрон и люди будут идти в комплекте, так как спуск по лестнице и подъем дело хлопотное. Да, и еще, проблема в том, что к объектам нельзя привязывать через точки привязки что-то с анимацией, она перестает работать, в ПС такой проблемы нет.
Оживляем миры Trainz. Дорого. Качественно. С гарантией.
|
|
| |
ТоХ | Дата: Среда, 03.12.2008, 21:03 | Сообщение # 14 |
Группа: давно не заходили
Сообщений: 49
Статус: Offline
| Quote (Neoklai) Пусть он просто выходит и заходит. И стоит в открытой двери с вытянутым флажком, до конца платформы.
|
|
| |
TRam_ | Дата: Среда, 03.12.2008, 23:38 | Сообщение # 15 |
Группа: проверенные
Сообщений: 22
Статус: Offline
| .SetMeshAnimationSpeed(string p_meshName, float p_speed) увеличивает (уменьшает) скорость анимации в p_speed раз(а кто запрещает увеличить в 1.1 затем в 1.2 затем в 1.4 и т.д?). Кроме того, есть метод "аттача" мешей, т.е. мешь ты можешь поцепить или убрать вообще с точки привязки (как например в светофорах Варза) Поворота дамми нет, зато можно сделать промежуточную мешь, анимация которой заключается в вращении точки привязки. Меняя номер кадра, можно повернуть прицепленную к этой точке мешь на любой угол методом SetMeshAnimationFrame (string p_meshName, float p_frame) p_frame -номер кадра Подмена kin осуществляется методом SetFXAnimationState (string effectName, bool state) если ты 2(а если надо 3, 4, и т.д.) kin прописал в конфиге в разделе effects (смотри аурановский мануал по созданию модели кочегара - у него 4 анимации вроде) Quote проблема в том, что к объектам нельзя привязывать через точки привязки что-то с анимацией странно... Моя бетономешалка вроде никогда не была локомотивом, а её бочка именно приаттачена... Я абсолютно уверен, что ты нарушаешь моё 1 правило(вроде 1) - нельзя на 0 кадр помещать дамми(тем более с привязкой) с начальным поворотом. А вообще попробуй сделать точку привязки ещё и с приаттачченой к её дамми малюсенькой плоскостью с простейшей текстурой. В общем, пробуй. При соблюдении правил у меня в коце концов получилось (хотя и не с первого раза)
Сообщение отредактировал TRam_ - Среда, 03.12.2008, 23:51 |
|
| |
| |