В прошлом уроке мы научились двигать объект, нажатием на кнопку, так же мы теперь умеем сохранять игры в свойственных им форматах.
В этом уроке мы продолжим совершенствовать свои навыки по созданию игр – будем работать с логическим блоками и создадим более интересное и привычное управление
нашего объекта.
Blender | Определяемся с логикой
В этом уроке хоть и будет присутствовать теория, ну куда без нее, но все же это более практичный урок. Поэтому открывайте файл, в который вы сохранили результаты прошлой совей работы – продолжаем.
С логическими блоками, которые формируют стратегию поведения объекта, мы уже знакомы. По завершению прошлого урока у Вас должно было получиться что-то на подобии вот такого.
Логические блоки Blender
Так у меня в примере. Напомню, что кубик двигается в две стороны по оси Y. Это указано в блоке Action (действие). Это действие происходит в ответ на событие, обозначенное в первом блоке Sensor (сенсор) – нажатие на клавиши. Но про все, про это я рассказывал в прошлом уроке. А вот роль второго блока была не до конца освещена – пришла пора исправить этот момент. Так для чего же нужен второй блок – Controllers (контроллеры). Что они все же контролируют?
Правильно, контролируют они взаимосвязь между сенсором и действием, которое этот сенсор должен вызвать. Ключевым здесь является – должен вызвать. Давайте разбираться.
Но прежде буквально пара слов о теории. Мы создаем логику управления
объекта. Естественно, она должна быть логичная (простите за каламбур), а самая логическая логика – математическая. Поэтому перед дальнейшим чтением урока освежите у себя в памяти этом предмет. Пускай ее изучением занимаются целые институты, профессора пишут работы. Нам это все не надо и в сложность ее вникать мы не станем. Вспомним мы буквально два союза из этого предмета: And (здесь логическое "и") Or (здесь логическое "или"). Помните, чем они отличаются?
Если стоит логическое "и" (And – появляется по умолчанию), то, для того, что бы произошло действие (Action), нужно, чтобы сработали все сенсоры, подключенные к данному
к котроллеру. Если же стоит логическое "или" (or – выбираем из всплывающего списка), то для того, чтобы произошло действие (Action), необходимо, чтобы сработал хотя бы один из сенсоров, подключенных к контроллеру. Как понять, подключен ли сенсор к контроллеру? Эту связь
Вы устанавливаете сами. Тянете мышкой ниточку из одной точки в другую – связь установлена.
Логическое "или" (or)
Начну с "или" – чисто психологический выбор. Мне всегда нравится иметь альтернативу (и пару троек запасных путей).
Почему бы не иметь альтернативу, как двигать вперед наш кубик – нажатием на клавишу S или Up. Заметьте, что кубику будет все равно, на что Вы нажмете, он начнется двигаться в одну и ту же сторону, сработает одно действие – оно у нас уже прописано. Поэтому добавляем еще один контроллер, выбираем его тип – Keyboard (клавиатура), в поле Key (клавиша) ставим Up. Далее связываем новый сенсор с контроллером, который обрабатывает событие от нажатия на кнопку S. Поэтому всегда советую: всему (в том числе и логическим блокам) давать осмысленное названия, чтобы потом иметь представление о том, с чем работаете, и как это работает. Что особенно актуально, когда возвращаешься к отложенной работе через какое-то время, а, вернувшись, и посмотрев на сцену, понимаешь, что успел основательно позабыть, о чем эта сцена, что с чем связано и как взаимодействует – хоть новую работу начинай.
Но я увлекся. Подключили сенсор к контроллеру? Теперь можно проиграть анимацию – нажать на P в любом из окон проекций и убедиться, что кубик не движется, если нажать S или Up, а если нажать сразу обе клавиши – поедет. Ну, конечно же, мы And в контроллере не изменили на Or. Теперь измените. И вот нажатие на две разные кнопки дают одинаковый результат. Вот так работают логические блоки. Там есть и другие выражения: "исключающая или" и другие, но про них мы здесь говорить не станем, а продолжим создавать управление
нашего пока слабоуправляемого объекта.
Локальные и глобальные системы координат в Blender
Я уже несколько раз упоминал о локальных и мировых координатах, давайте теперь, попробуем в них разобраться с точки зрения создания игр.
У нас есть сцена. Через нее проходят оси координат. И все понятно ось Y показывает направление по Y, так же и со всеми другими координатными осями. Значит, оси сцены будут глобальными или мировыми осями координат (кому как больше нравится). Локальные оси координат, следуя логике вещей, должны принадлежать конкретному объекту в сцене. Да, верно – каждый объект сцены имеет свои оси координат – локальные системы координат. В чем же различие? Если говорить очень просто, то направление глобальных систем координат не изменяются, а локальных – могут поменяться. В общем случае – локальная ось Y объекта сцены не направлена по глобальной оси Y сцены. Вот Вам объектное построение мира в действии. Опять отвлекусь и поясню, что каждый элемент мира, может быть миром для другого мирового пространства. Эффект коробки в коробке.
Но пора переходить к примерам. Начинаем.
Добавляем еще два контроллера (можно и четыре, если понравилась идея с альтернативным управлением
), на кнопки A и D, чтобы вращать наш объект. Вот теперь начинается самое интересное. При нажатии на боковые клавиши, наш объект начинает именно вращаться, а не двигаться, там, вправо или влево (в зависимости от нажатой клавиши). Вращаться он будет относительно оси Z. Отмечаем это в графе Rot (Rotation – вращение).
Вращение объекта в Blender
Получилось довольно сложное управление
. Здесь только один совет – будьте предельно внимательны и не спешите, все же мы создаем программное управление в виртуальном
мире. Чтобы не запутаться, где перед, а где у нашего кубика зад, предлагаю сделать из него некое подобие машинки – вытянуть капот.
Вот теперь видно. Запускаем анимацию (в данном
случае жмем P). И смотрим, как движется наш импровизированный автомобиль, если зажать вперед и вбок, то получится как в том мультике, где лошадка бегала по кругу, здесь же носится машинка, но мы того и хотели, мы молодцы.
Обратите внимание, что направление движения мы ставили Y, а наш же автомобильчик ездит по кругу. Он движется относительно своей локальной оси Y, которая при повороте смещается относительно глобальной оси Y сцены. Посмотрим, как это можно исправить. В данном
примере никакой практической ценности от этого трюка не будет, но может случиться так, что Вам нужно будет, чтобы объект двигался по глобальной оси сцены. За ось (глобальную или локальную) отвечает кнопочка L сбоку выбранной оси в блоке Action (действие – третий логический блок). Измените настройки Вашей машинке, как у меня на следующем рисунке и посмотрите, что из этого получится.
Изменение настроек движения объекта в Blender
Я просто выключил в двух местах кнопку L, и теперь уже машинка по кругу не движется, а просто вращается относительно уже глобальной оси Y нашей сцены.
Сейчас мы создали простое управление
объектом – для создания простенького автосимулятора самое то. Осталось смастерить трассу и сделать игрушку на прохождение. Правда, без противников, но ведь можно на одной клавиатуре двоим играть. Хотя это я увлекся – слишком маленькая трасса для симулятора. Надо разобраться.