• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Важно Как создать простой мувер

Статус
В этой теме нельзя размещать новые ответы.

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.851
Благодарности
6.728
Баллы
1.625
Муверы в спейсере – это движущиеся обьекты.

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

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

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

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

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


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

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

3.png
Мувер вставлен:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Автор статьи - marazmus.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу