На данный момент удалось через скриптинг создать анимацию работы подвижных частей самолетов. Пока для МиГ-23, но скрипты должны с успехом работать и на других машинах. Схема построения "паутины" из Си-шарп скриптов выглядит так:
Создается универсальный кубик-двигатель, на котором висят все необходимые скрипты - для механизации крыла, тормозов, рулей высоты и направления, фонарей кабин и прочей мелочи. Все они ВЫКЛЮЧЕНЫ - галка в инспекторе у них убрана.
К двигателю цепляется модель самолета, на главном родителе которого висит скрипт "семейства", для МиГ-23 - это Flogger, для МиГ-29 - Fulcrum, для Су-27 - Flanker, для F-15 - Eagle и тд. Сама модель самолета содержит в себе стандартные имена деталей - Airbrake_1-2-3-4, Wing_1-2, Flaps_1-2 и так далее. Фюзеляж самолета становится потолмком двигателя и через команду this.transform.parent.GetComponent<AircraftEngine>(); ищет нужный ему скрипт родителя и включает его через nameScript.enable = true. Разумеется, широко применяется public void Awake, чтобы скрипты могли общаться между собой. Включенные скрипты этим как раз и занимаются - включить можно не только скрипты анимации, но и скрипты сенсоров, ИИ, клавиатурных команд и так далее. Можно и выключить - например при перекладке крыла на МиГ-23 можно отключить скрипт работы закрылков и блокировать их анимацию (примерно так я делал в БГЕ, только там проперти были).
Конкретно сейчас клавиатурные команды при нажатии клавиши проверяют, включен ли скрипт той или иной анимации, и только потом меняют в нем переменную, это "одноразовая акция", для относительно редких команд типа выпуски уборки шасси, тормозов, смены стреловидности и так далее. Для часто используемых анимаций крена-тангажа-рыска проверки не нужны - скрипты работы рулей-элеронов-флапреонов сами проверяют в главном скрипте движения самолета команды на развороты и сами отклоняют нужные детали на нужный угол. Кстати, все скрипты применяют разовый поиск потомков с нужными именами и работают только с уже полученными на них ссылками, не отвлекаясь далее на поиск и на другие детали. Примерно так:
- Код: Выделить всё
void Start ()
{
//Проводим поиск нужных объектов по именам и готовим на н7их ссылки
foreach(Transform child in this.GetComponentsInChildren<Transform>())
{
//Debug.Log(child.name);
if ( child.name == "Wing_1" )
Device_1 = child;
if ( child.name == "Wing_2" )
Device_2 = child;
}
На скобки не смотрите - там дальше идет выставление ограничений по интервалам отклонения и скоростям отклонения для деталей, которые уже произведены скриптом "семейства".
Скрипт семейства следит за множеством мелочей, например включает-отключает нужные скрипты в определенные моменты работы остальных, также я рассчитываю повесить на него еще и работу шасси - для каждого самолета свое шасси, которое несовместимо с другими типами, так что его некуда ставить, кроме как в скрипты на фюзеляжах.
Пока данная схема вполне работает, мне осталось как раз добить работу всевозможных рулкй, но, думаю, там дело только во внимательности и трпении (кстати, получил неприятный сюрприз - не работает команда GetKeyUp- не фиксируются отпущенные клавиши, поэтому пришлось извращаться, но проблему с управлением я все же решил - крен-рыск-тангаж уже работают).
Ну и, к сожалению, опять о неприятном. Впереди у меня еще одна операция - лазерная дисцизия вторичной катаракты. В Москву ехать не надо, это и у нас делают, но на неделю меня из строя опять выбьет. Только это будет в июле-августе, так что пока буду работать, насколько это возможно - "полиэтиленовый пакет перед замочной скважиной" к большим скоростям как-то не располагает, так что сильно больших прорывов не будет (что касаемо самой вторичной катаракты, то, как мне сказала мой лечащий врач, в моем случае этого следовало ждать с вероятностью в 100 процентов, но ничего экстраординарного в этом нет).
Так что (разведя руками) пока красивых каринок не будет. Ну разве что статью в блог все же наклепаю про взаимодействие скриптов с моей дилетантской точки зрения...