автор статьи - marazmus
Муверы в спейсере – это движущиеся обьекты.
Самый простой пример – каменные двери в храме Аданоса (Яркендар). Они поднимаются вверх, изображая открытие.
Но можно найти еще много способов применения муверов, в том числе и управления ими из скриптов, что позволяет повысить интерактивность мира.
Давайте сделаем простой мувер.
Создаем в спейсере обьект типа zCMover:
Выбираем тип:
Вставляем мувер в мир:
Зададим для него имя:
Мувер вставлен:
Пойдем дальше.
Попытаемся добавить небольшую интерактивность в наш мир. Изобразим появление рыбацкой лодки на берегу. Пока сделаем просто появление лодки, без наворотов типа медленного причаливания и т.п.; просто лодка появится на берегу, в то время, как ГГ будет инициировать определенное событие в другом месте - разговор, пересечение триггера и т.п.
Возьмем 3DS лодки; к примеру, этот:
Так как лодка у нас будет неинтерактивной, сделаем ее простым обьектом типа zCVob:
Теперь сделаем такой трюк: недостаточно просто вставить обьект лодки в мир, нужно, чтобы обьект был привязан к муверу. Делаем следующее: находим наш мувер, и вставляем новый обьект (будущая лодка) как _подобьект_ (child) этого мувера:
Что это даст - а то, что все перемещения мувера будут перемещать и нашу лодку, т.к. она зависит от этого мувера.
(Это хороший способ работы с обьектами вообще - если "предвидится" множество обьектов, которые нужно будет обрабатывать вместе, лучше сделать один из них родителем, а остальные - потомками, это облегчит как минимум перемещение данного скопления обьектов).
Чтобы ГГ не пробегал лодку насквозь, флаг обьекта лодки cdDyn нужно сделать TRUE.
Раскадровка.
Теперь самое интересное, суть мувера – ключевые точки (keys).
Это точки, в которых мувер будет находиться в определенный момент своего движения.
Обьясню сразу на нашем примере.
В начале нашей лодки на берегу быть не должно – это будет первый кадр (key = 0).
Передвигаем мувер (не лодку! лодка передвинется сама, т.к. зависит от мувера) так, чтобы лодка исчезла из видимого ГГерою мира (например, “под берег”). Определившись с местом, где будет лодка, в свойствах мувера жмем кнопку new key – первый кадр есть.
Лодки не видно, это наша цель для кадра 1.
Идем дальше. Теперь нужно определиться, куда лодка встанет на берегу. Передвигаем мувер, следим за лодкой. Определившись окончательно, жмем new key еще раз - эта позиция лодки будет следующим кадром.
Лодка стоит на берегу - это наша цель для кадра 2.
Для нашей задачи двух кадров вполне достаточно, но для более сложных сцен желательно сделать преварительную раскадровку на бумаге или хотя бы в голове, чтобы ускорить саму работу в спейсере по раскадровке муверов.
Щелкая по кнопкам keyframes (< и >) можно посмотреть мувер в действии.
Примечание: наша задача - мгновенное появление лодки, поэтому в свойствах мувера скорость ставим побольше (чтобы игрок не заметил движения лодки).
Для обьектов типа каменных дверей, к примеру, эта скорость = 0.3; видимо, это зависимость кадр/секунда.
Хорошо, мувер у нас есть. Как же сделать так, чтобы передвинуть его, к примеру, скриптом?
Здесь на помощь приходят триггеры.
Создаем "обычный" триггер (тип zCTrigger):
Заполняем его свойства:
1) Обязательно – имя триггера, уникальное в пределах мира.Это нужно, чтобы скриптовый оператор WLD_SendTrigger инициировал только нужный нам триггер.
К примеру, имя триггера (vob_name) = TRIGGER_MOVER_BOAT
2) Обязательно – цель триггера (поле trigger Target). Здесь вводим имя созданного ранее мувера лодки.
К примеру, trigger Target = MOVER_01
3) Обязательно – поставить TRUE в поле reactToOnTrigger – чтобы триггер мог среагировать на WLD_SendTrigger.
В итоге должно выглядеть примерно так:
Ну вот практически и все.
Теперь в скриптах пишем в нужном месте
WLD_SendTrigger(“TRIGGER_MOVER_BOAT”);
Лодка появится в нужном месте в нужное время