Теория "правильных" вертолетов в штурме
|
|
vitmerc | Дата: Понедельник, 11.03.2013, 17:04 | Сообщение # 1 |
Сержант
Группа: Пользователи
Сообщений: 105
Репутация: 11 []
Статус: Offline
| Итак, по теме. Как многие из вас уже знают, без костылей вертолетам на штурме не бывать. А с костылями - вопрос встает другой. "Как?" Правильная посадка возможна даже без них. max_speed 1 --> air_state land И вертолет красиво садится. Со взлетом все несколько сложнее: Изображение 800х600 71КБ
Сейчас в игре "физический" вертолет совпадает с "логическим" и мы видим то, что представлено на изобр. 1 Но, если "Физический" вертолет будет каким-либо образом подвижен относительно "логического", получаем изобр. 2 Зеленая линия - траектория центра вертолета, полупрозрачный силуэт на изобр. 2 - "логический" вертолет, положение которого не совпадает с "физическим"
Т.е. Вертолет представляет из себя небольшой невидимый bone (как вариант) далее - просто "центр", в центре вертолета - и все остальное, способное менять направление относительно центра.
Таким образом через анимацию, подогнанную под взлет-посадку на макс. скорости 1 - можно осуществить приближенное к реальному поведение вертолетов в штурме.
А теперь вопрос к гуру - все кажется слишком просто, в чем я ошибся, чего я не учел?
PS просьба не придираться к качеству\аккуратности иллюстрации - она сделана на скорую руку исключительно для демонстрации идеи.
Сообщение отредактировал vitmerc - Понедельник, 11.03.2013, 17:06 |
|
| |
Timosh | Дата: Понедельник, 11.03.2013, 21:10 | Сообщение # 2 |
Генералиссимус
Группа: Модераторы
Сообщений: 4099
Репутация: 234 []
Статус: Offline
| vitmerc, механика разработана правильно. Для одиночного вертолета в сингле (если сделать анимацию вашим способом) все должно работать именно так. Но для массового применения это не пойдет: 1)нужны скрипты. Причем как для снижения скорости, так и для возвращения максимальной. Значит, для каждого вертолета на каждой карте отдельный скрипт, возвращающий его личное значение скорости. Значит, если ввели новый вертолет или исправили скорость старого - скрипты переделываем на всех картах. 2) Это решит задачу посадки и взлета, но не висения. А садиться и взлетать места хватает и так. В общем, идея здравая, но к системе висения вертолета я предъявляю (разумеется, для себя) следующие требования: 1)Возможность зависания на месте с последующим возобновлением движения. 2)Возможность поворота на месте (опционально - полеты боком) 3) После поворота на месте направление движения вертолета должно измениться на новое. 4)Посадка вертолета (если она самолетная) при этом должна осуществляться внешне разумно. Если первые два пункта я умею реализовать, то 3 и 4 пока не даются. Но я над этим работаю.
|
|
| |
vorabat | Дата: Понедельник, 11.03.2013, 21:17 | Сообщение # 3 |
Лейтенант
Группа: Пользователи
Сообщений: 166
Репутация: 28 []
Статус: Offline
| Timosh, А вы пробовали делать маленькую скорость через смену этой самом скорости кнопкой на панели управления? Таким образом можно попробовать добиться минимального эффекта зависания. Только в этом случае нужно что бы после нажатия на кнопку смены скорости производился ещё один клик на местность, иначе вертолёт будет продолжать двигаться в обычной скорости до следующего клика. В Resource\set\panel_control\right_main.setКод {gc_cp_state_speed {position 2 2} } {gc_cp_state_speed {position 2 2} {condition "vehicle"} } {gc_cp_state_speed {position 2 2} {condition "multiple"} } И в def вертолётов Код {speed {Slow нужная скорость} }
сайт Modern Pack http://pot.at.ua/
Сообщение отредактировал vorabat - Понедельник, 11.03.2013, 21:22 |
|
| |
Maksilin | Дата: Понедельник, 11.03.2013, 21:53 | Сообщение # 4 |
Подполковник
Группа: Разработчик
Сообщений: 447
Репутация: 23 []
Статус: Offline
| Цитата 1)Возможность зависания на месте с последующим возобновлением движения. 2)Возможность поворота на месте (опционально - полеты боком) Это только для одиночной кампании? Или в мультиплеере тоже можно это реализовать?
|
|
| |
Timosh | Дата: Понедельник, 11.03.2013, 22:47 | Сообщение # 5 |
Генералиссимус
Группа: Модераторы
Сообщений: 4099
Репутация: 234 []
Статус: Offline
| vorabat, пробовал. Увы, не помогает ни кнопка, ни ограничение при помощи inc (speed_limit или что-то такое, используется для замедления грузовиков со сломанными колесами). И сдвиг базиса тоже в воздухе не работает. Авиашасси такое просто игнорирует. Да и вообще, шасси весьма различаются набором параметров и доступных команд, даже колесное и гусеничное (колесное не понимает on turn). Maksilin, это везде - без 3 и 4 пункта. 1 - отключаем шасси - вертолет зависает в воздухе в том положении, в котором был. Включаем - летим дальше. 2 - банально даем возможность ограниченного вращения кости корпуса. Но 3 и 4 пункты так не реализуются.
|
|
| |
vitmerc | Дата: Вторник, 12.03.2013, 13:51 | Сообщение # 6 |
Сержант
Группа: Пользователи
Сообщений: 105
Репутация: 11 []
Статус: Offline
| А не проще ли все-таки запилить на все cw-карты функцию, к которой будет обращаться вертолет со своим mid в контексте? т.е. "я mid ***, и я вертолет который переключил шасси" (например, виднее тем кто запилил в 5 миссии управляемые су-50) далее функция обрабатывает тип техники, запросившей посадку (например, по тегу) Да. скорости надо будет менять если внесены коррективы в конфиг вертолета, Да. надо будет вносить новые разделы с новыми вертолетами по мере их появления, НО - 1) как часто у нас появляются новые вертолеты? 2) обновить скрипт не так уж и трудно, просто копипаст секции скрипта, с последующим редактированием скоростей\тега
Я бы и сам сделал, но тут встает вопрос - как правильно детектить смену шасси ЛА, как в 5 миссии у су-50?
|
|
| |
Timosh | Дата: Вторник, 12.03.2013, 17:51 | Сообщение # 7 |
Генералиссимус
Группа: Модераторы
Сообщений: 4099
Репутация: 234 []
Статус: Offline
| vitmerc, я еще один способ проверю, и если не выйдет, то можно будет попробовать сделать подобным образом. Не очень красиво, но может сработать. Вот только анимацию выравнивания корпуса при взлете делать, скорее всего, не буду - если взлетать не под действием скрипта, а самому игроку (т. е. в прямом управлении), то вертолет не накренится больше положенных 10-20 градусов, т. к. будет находиться под действием стрелок.
|
|
| |
vitmerc | Дата: Вторник, 12.03.2013, 20:46 | Сообщение # 8 |
Сержант
Группа: Пользователи
Сообщений: 105
Репутация: 11 []
Статус: Offline
| Цитата (Timosh) а самому игроку (т. е. в прямом управлении) А что мешает это задетектить и врубить скрипт взлета?
|
|
| |
Timosh | Дата: Среда, 13.03.2013, 18:43 | Сообщение # 9 |
Генералиссимус
Группа: Модераторы
Сообщений: 4099
Репутация: 234 []
Статус: Offline
| vitmerc, лень . Ну и еще, я могу детектировать только сам факт взлета. Например, я парирую отклонение корпуса, возникающее при нажатии клавиши "вверх" в течение 2 секунд. А если игрок будет жать 3 секунды? или одну? Момент отпускания кнопки через inc (или как-то еще известным мне способом) не отлавливается. Но вообще-то это я как раз к тому написал, что отклонением корпуса на 10-20 градусов можно пренебречь, у нас же не авиасим, реального поведения все равно не добиться. А большее отклонение будет образовываться только в тех случаях, когда автор сингл-миссии заставит вертолет взлетать вертикально своими скриптами. Без такого можно часто обойтись, взлет по-самолетному (или с небольшим пробегом) могут делать все вертолеты на колесах.
|
|
| |
vitmerc | Дата: Четверг, 14.03.2013, 13:14 | Сообщение # 10 |
Сержант
Группа: Пользователи
Сообщений: 105
Репутация: 11 []
Статус: Offline
| Да, я понял о чем вы. А как вам вариант просто не поддерживать взлет в прямом управлении? можно же задетектить смену шасси и задать вертолету target altitude + парировать отклонение на время взлета?
|
|
| |
Timosh | Дата: Четверг, 14.03.2013, 19:08 | Сообщение # 11 |
Генералиссимус
Группа: Модераторы
Сообщений: 4099
Репутация: 234 []
Статус: Offline
| vitmerc, как раз в прямом управлении взлет совершенно необходим. Да я еще раз говорю, такое же отклонение, как при взлете по-самолетному, вполне приемлемо. Между тем, после некоторого размышления я снимаю свои возражения из поста №2. Пока не уверен, но и зависание без посадки с минимальными телодвижениями игрока может получиться, и с заменой скриптов при каждом новом вертолете я поспешил. Я не учел, что максимальная скорость всех или почти всех военных вертолетов лежит в узком диапазоне от 200 до 350 км/ч, в игре это где-то 35-55 единиц. Вполне возможно сделать 5 дискретных скоростей (думаю, разницей между 310 у Ми-24 и 330 у Ка-50 можно пренебречь) и работать с ними не для конкретной марки вертолета, а по props "вертолет_со_скоростью_45". Тогда скрипты менять не потребуется.
|
|
| |
vitmerc | Дата: Пятница, 15.03.2013, 03:46 | Сообщение # 12 |
Сержант
Группа: Пользователи
Сообщений: 105
Репутация: 11 []
Статус: Offline
| Мысль интересная. А, кстати, не скажешь как через скрипт в миссии задетектить смену шасси самолета а-ля "Расплата" (Су-50) ?
|
|
| |
Timosh | Дата: Пятница, 15.03.2013, 21:00 | Сообщение # 13 |
Генералиссимус
Группа: Модераторы
Сообщений: 4099
Репутация: 234 []
Статус: Offline
| А у меня для самолетов специальный таг повешен - plane_in_flight ЕМНИП. Если он есть - самолет летит, нет - садится или на земле. И для вертолетов то же самое. Если зачем-то надо - проверьте в редакторе. Ну, и как только у Су-50 он появляется (а их не более 1 на карте, так таймеры настроены) - значит, игрок пытается его посадить. Тут я убираю able select (сбрасывается выбор юнита), даю его player 2 и следующей командой заставляю набрать определенную высоту и улетать в тыл. Добавлено (15.03.2013, 21:00) --------------------------------------------- vitmerc, попробовал я реализовать такую схему - оказалось, что тангаж вертолетов не ограничен и при скорости 1 под прямым управлением вертолет отклоняется не на 15-20 градусов, а на 90, и парировать это не выходит. Ну, и вдобавок радиус поворота остается прежним - порядка 20м, и при малой скорости вертолет поворачивает очень медленно. Так что и этот способ, увы, не подходит.
|
|
| |
vitmerc | Дата: Суббота, 16.03.2013, 12:33 | Сообщение # 14 |
Сержант
Группа: Пользователи
Сообщений: 105
Репутация: 11 []
Статус: Offline
| Я знаю что отклоняется на 90, я об этом писал в первом посте. А почему парировать такое через модель невозможно?
|
|
| |
Timosh | Дата: Суббота, 16.03.2013, 13:08 | Сообщение # 15 |
Генералиссимус
Группа: Модераторы
Сообщений: 4099
Репутация: 234 []
Статус: Offline
| Ну вот завис я, скажем, и хочу набрать высоту. Нажимаю стрелку, вертолет наклоняется носом вверх. И я не могу с помощью inc (и другими способами) этот момент обнаружить.
|
|
| |