Всё о Готике
Как создать простой мувер


автор статьи - marazmus

Муверы в спейсере – это движущиеся обьекты.

Самый простой пример – каменные двери в храме Аданоса (Яркендар). Они поднимаются вверх, изображая открытие.

Но можно найти еще много способов применения муверов, в том числе и управления ими из скриптов, что позволяет повысить интерактивность мира.

Давайте сделаем простой мувер.

Создаем в спейсере обьект типа zCMover:

Выбираем тип:

mover - objects page

Вставляем мувер в мир:

mover - right button click

Зададим для него имя:

mover - set name

Мувер вставлен:

mover created

Пойдем дальше.
Попытаемся добавить небольшую интерактивность в наш мир. Изобразим появление рыбацкой лодки на берегу. Пока сделаем просто появление лодки, без наворотов типа медленного причаливания и т.п.; просто лодка появится на берегу, в то время, как ГГ будет инициировать определенное событие в другом месте - разговор, пересечение триггера и т.п.

Возьмем 3DS лодки; к примеру, этот:

visual for mover - boat

Так как лодка у нас будет неинтерактивной, сделаем ее простым обьектом типа zCVob:

mob select page

Теперь сделаем такой трюк: недостаточно просто вставить обьект лодки в мир, нужно, чтобы обьект был привязан к муверу. Делаем следующее: находим наш мувер, и вставляем новый обьект (будущая лодка) как _подобьект_ (child) этого мувера:

mob as child of mover

Что это даст - а то, что все перемещения мувера будут перемещать и нашу лодку, т.к. она зависит от этого мувера.

(Это хороший способ работы с обьектами вообще - если "предвидится" множество обьектов, которые нужно будет обрабатывать вместе, лучше сделать один из них родителем, а остальные - потомками, это облегчит как минимум перемещение данного скопления обьектов).

Чтобы ГГ не пробегал лодку насквозь, флаг обьекта лодки cdDyn нужно сделать TRUE.

Раскадровка.

Теперь самое интересное, суть мувера – ключевые точки (keys).
Это точки, в которых мувер будет находиться в определенный момент своего движения.

Обьясню сразу на нашем примере. В начале нашей лодки на берегу быть не должно – это будет первый кадр (key = 0). Передвигаем мувер (не лодку! лодка передвинется сама, т.к. зависит от мувера) так, чтобы лодка исчезла из видимого ГГерою мира (например, “под берег”). Определившись с местом, где будет лодка, в свойствах мувера жмем кнопку new key – первый кадр есть.

Лодки не видно, это наша цель для кадра 1.

mover - key 1

Идем дальше. Теперь нужно определиться, куда лодка встанет на берегу. Передвигаем мувер, следим за лодкой. Определившись окончательно, жмем new key еще раз - эта позиция лодки будет следующим кадром.

Лодка стоит на берегу - это наша цель для кадра 2.

mover - key 2

Для нашей задачи двух кадров вполне достаточно, но для более сложных сцен желательно сделать преварительную раскадровку на бумаге или хотя бы в голове, чтобы ускорить саму работу в спейсере по раскадровке муверов.

Щелкая по кнопкам keyframes (< и >) можно посмотреть мувер в действии.

Примечание: наша задача - мгновенное появление лодки, поэтому в свойствах мувера скорость ставим побольше (чтобы игрок не заметил движения лодки).

mover - set name

Для обьектов типа каменных дверей, к примеру, эта скорость = 0.3; видимо, это зависимость кадр/секунда.

Хорошо, мувер у нас есть. Как же сделать так, чтобы передвинуть его, к примеру, скриптом?
Здесь на помощь приходят триггеры.
Создаем "обычный" триггер (тип zCTrigger):

mover - trigger create objects page

Заполняем его свойства:

1) Обязательно – имя триггера, уникальное в пределах мира.Это нужно, чтобы скриптовый оператор WLD_SendTrigger инициировал только нужный нам триггер.
К примеру, имя триггера (vob_name) = TRIGGER_MOVER_BOAT

2) Обязательно – цель триггера (поле trigger Target). Здесь вводим имя созданного ранее мувера лодки.
К примеру, trigger Target = MOVER_01

3) Обязательно – поставить TRUE в поле reactToOnTrigger – чтобы триггер мог среагировать на WLD_SendTrigger.

В итоге должно выглядеть примерно так:

mover - trigger created for mover

Ну вот практически и все.

Теперь в скриптах пишем в нужном месте
WLD_SendTrigger(“TRIGGER_MOVER_BOAT”);

Лодка появится в нужном месте в нужное время

 
 
Copyright © 2008 GotomanRambler's Top100

 
Hosted by uCoz