Десять уроков для начинающих по игровому движку Blender (Blender Game Engine, он же BGE, он же gameBlender). Затрагиваются элементы физики движения и игровой логики. В курсе предусмотрены практические задания.
Уникальной особенностью Blender является встроенный в него так называемый "игровой движок" (англ. game engine). Это программный компонент, который позволяет создавать небольшие игры, не выходя из среды трехмерного моделирования Blender.
Game engine:
Режим игры – это режим действия игрового движка. Он запускается при нажатии клавиши P на клавиатуре. Выход из него – клавиша Esc. Лучше перед запуском игры переключиться в режим отображения текстур (Alt+Z).
Задание. Расположите на сцене плоскость и любой другой меш-объект над ней. Включите режим отображения текстур, затем режим игры. После выйдите из режима игры.
Для настройки поведения объектов для режима игры предназначена панель кнопок Logic (F4). На этом уроке мы рассмотрим ее левую часть – настойки объекта.
В реальном мире объекты сделаны из различных материалов и, естественно, обладают различными свойствами.
Игровой движок (BGE), конечно, не позволяет симулировать такое разнообразие, но кое-что может. К тому же, BGE позволяет манипулировать и "нефизическими объектами", т.е. теми для которых как бы нет влияющего окружающего мира (в реальном мире таких объектов не существует).
Тип выбранного объекта (например, куба) задается с помощью меню Object Type.

Occluder (occlude – закрывать, преграждать). В определенных условиях увеличивает производительность путем исключения объектов, расположенных за объектом-«окклюдером». Уместно использовать в сложных сценах.
No collision (collision - столкновение). Отключает у объекта возможность столкновения с другими объектами. Т.е. если dynamic-объект встретит на своем пути no_collision-объект, то пройдет сквозь него, как будто его нет. Рекомендуется использовать для объектов, которые никогда ни с чем не столкнуться: выбор этого типа объекта увеличивает производительность игры.
Sensor (датчик). Предназначен для более сложного управления столкновениями.
Static (статический, неподвижный). Такой тип объекта может участвовать во взаимодействиях с физическими объектами (играть роль препятствий), хотя на него не влияют никакие виртуальные физические силы. В режиме игры он может быть перемещен за счет изменения своего положения, но не под влиянием сил. Два static-объекта при пересечении их путей не сталкиваются, а проходят сквозь друг друга.
Dynamic (динамический). Объект, на который "действуют" законы физики: сила тяжести, масса, воздействие внешних сил, ускорение и др.
Rigid body (твердое тело). Более реально ведущий себя по сравнению с Dynamic "физический" объект.
Soft body (мягкое тело). "Физический" объект, который ведет себя подобно резиновому мячу или мягкой игрушке, т.е деформируется (изменяет свою форму) при столкновениях с другими объектами.
Опыт 1. Типы объектов
Для того, чтобы сразу протестировать как ведут себя некоторые типы объектов в режиме игры, расположим несколько сфер над плоскостью и нажмем P. Вот что мы увидим по прошествии нескольких секунд:

Видно, что с объектов типа Static ничего не произошло, Dynamic, Rigid Body и Soft Body упали под действием виртуальной силы тяжести. Причем Soft Body упал и слегка «размазался», как и положено мягкому телу, но почему-то меш-объект остался прежнего размера (это недоработка Blender или как-нибудь настраивается отдельно? Примечание: если при создании сферы сразу указать небольшой размер, то она будет мелкой при создании из нее мягкого тела).
Опыт 2. Dynamic и Rigid body
Чтобы заметить разницу между Rigid body и Dynamic, развернем плоскость на 50 по оси Y или X. Теперь можно наблюдать, что при падении Rigid Body продолжает свое движение как естественный объект (также ведет себя и Soft Body), а Dynamic остается спокойно лежать на плоскости. Конечно, если наклон плоскости сделать больше, то вниз покатится и динамический объект.

В предыдущем опыте можно заметить, что при смене типа объектов меняются кнопки настоек ниже. Здесь основная часть настроек свойств объекта. Рассмотрим некоторые.

Actor (актер). Для версии 2.49 осталось непонятным, на что влияет данных параметр.
Ghost (призрак). Объект будет проходить сквозь другие объекты при столкновении с ними, при этом никак на них не влияя.
Invisible (невидимый). Объект становится невидимым, но присутствует на сцене. Объект-невидимка может взаимодействовать с другими объектами.
Mass (масса). Виртуальная масса объекта. Настройка данного параметра имеет большое значение для "физических" объектов при воздействии на них той или иной силы. Чем больше масса, тем больше нужно приложить силы для ее перемещения.
Radius (радиус). Влияет на площадь взаимодействия с объектом. Радиус виден как розовая пунктирная окружность в 3D окне. Если не виден, то увеличьте значение. Фактически границы окружности и определяют размер взаимодействующей области (объекта).
No sleeping (не спящий). При включении-отключении данной опции в версии 2.49 изменений в поведении объекта при применении к нему силы замечено не было.
Остальные настройки пока опустим, т.к. они достаточно специфичны и требуют начальных знаний физики.
Shape Match (shape – форма, match – выравнивать, противостоять и др.). Если кнопка будет выключена, то объект не сохранит свою форму, а сложится как тряпка (при достаточном количестве вершин).
Bending Const (bending – сгибание, constraints – ограничения). Если отключить данную кнопку, то объект при столкновении будет сильнее изменять свою форму.
kMT. Влияет на упругость объекта, связана с Shape Match. Увеличив данное значение, например, у сферы, вы получите объект поведением похожий на мяч.
Панель Logic (F4) можно условно разбить на четыре части настроек: свойства объекта (рассмотренные на прошлом уроке), сенсоры, контроллеры и активаторы. Сенсоры объекта позволяют ему воспринимать различные внешние «раздражители», такие как нажатие клавиши, движение мыши, касание другого объекта и др. Контроллеры в основном предназначены для связывания определенным образом сенсоров и активаторов. Активаторы могут выполнять различные действия над данным объектом или другими. Некоторые настройки активаторов могут различаться у разных типов объектов.
Для того чтобы добавить очередной сенсор, контроллер и активатор нужно нажать на кнопку ADD. Связь между ними обозначается линиями, которые создаются, если зажав ЛК мыши потянуть ей от одного узелка к другому (линию можно удалить, если навести мышь и нажать клавишу Del). У объекта может быть множество групп сенсоров, контроллеров и активаторов.

На этом уроке будет описано, как управлять объектом Static с помощью клавиатуры. Роль объекта сыграет стрелка, поворачивающаяся по двум осям и двигающаяся указателем вперед.
Сначала создадим объект. Можно использовать любой меш-объект, но желательно, чтобы он был ассиметричен, т.к. в этом случае легче будет наблюдать его повороты.

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

По умолчанию в качестве сенсора выступает Always (всегда). Такой сенсор будет действовать постоянно. Нам это не подходит. В выпадающем списке выбираем Keyboard (клавиатура). Нажимаем в поле Key мышью, затем нажимаем клавишу Пробел (Space).

Теперь настроим активатор. Активаторы бывают разные (это на будущее). По умолчанию стоит Motion (движение). В нижней части есть две строки: Loc (location – положение) и Rot (rotation – вращение). В каждой строке по три поля: в них задаются величины изменений по оси X, Y или Z при воздействии.

Поскольку наша стрелка должна двигаться вперед и для нее это ось Y, то следует изменить значение в первой строке во втором столбце. Щелкните по нулям там и пропишите значение в 0.05.
Теперь при запуске режима игры (P) и нажатии на клавишу пробел стрелка будет двигаться вперед.
Для того, чтобы стрелка при движении могла оказаться в любой точке трехмерного пространства достаточно настроить ее поворот только по двум осям: X (повороты вверх и вниз) и Z (налево и направо). Поворачиваться стрелка будет при нажатии на стрелки на клавиатуре. Требуется добавить еще четыре группы сенсоров, контроллеров и активаторов.

Теперь, запустив режим игры, можно передвинуть стрелку в любое место 3D-окна, предварительно повернув ее с помощью стрелок на клавиатуре.
В конце строк настроек Loc и Rot есть переключатели L. По умолчанию эти кнопки нажаты и обозначают локальную привязку осей. Это означает, что оси X, Y и Z как бы находятся внутри объекта и при его повороте поворачиваются вместе с ним. Поэтому-то у нас стрелка все время двигается указателем вперед, как ее не поверни.
Если выключить кнопку L напротив Loc в блоке, отвечающем за движение по оси Y, то стрелка будет двигаться только в одном направлении (по глобальной оси Y) не зависимо от поворота своего указателя. Глобальные оси в 3D-окне обозначаются красной (X), зеленой (Y) и синей (Z) линиями.

Когда к объекту в Blender применяется тип Dynamic, Rigid или Soft body, то в режиме игры их поведение становится похожим на поведение реальных объектов в области притяжения Земли (эти настройки можно изменить: например, эмулировать невесомость). В реальном мире плотные объекты не висят в воздухе, а падают на поверхности; при столкновении объекты могут отскакивать; для перемещения объекта с большей массой требуется приложить больше силы и т.д.
Для физических объектов у активатора Motion появляются дополнительные строки настроек (помимо Loc и Rot, которые также есть у статических объектов и отвечают за перемещение и поворот объекта).

Force (сила). Воздействие на объект с заданной силой и направлением. В отличие от Loc, объект не перемещается самостоятельно, а на него как бы действует сторонняя сила.
Torque (вращающий момент). Сила действует таким образом, что заставляет объект вращаться, а не перемещаться.
Разместим на сцене плоскость и куб на ней. Добавив сенсор, контроллер и активатор и связав их между собой, увеличим значение Force по оси Х или Y.

В режиме игры объект будет двигаться, как и при влиянии Loc, однако он будет двигаться с ускорением, т.к. сила действует постоянно и постепенно разгоняет объект. После прекращения воздействия, объект останавливается не сразу, а постепенно (в отличие от Loc).
На объекты Rigid body сильное влияние оказывает привязка осей (X, Y, Z) к самому объекту или к 3D-миру. Если не выключить кнопку L, то объект не будет двигаться по направлениям пространства, а будет покачиваться на одном месте. Это связано с тем, что ось объекта при его повороте меняет свое направление, и тогда сила действует с другой стороны с точки зрения 3D-мира.
Обратите внимание на значение в строке Force. Заметные влияния на объект здесь возникают при изменении значения на единицы, а не на дробные значения как в случае Loc. Применение одной и той же силы к объектам разной массы оказывает различное влияние на них. Так если объект Dynamic с установленной виртуальной массой в 2 единицы попытаться сдвинуть с помощью 2 «виртуальных ньютонов», то ничего не получится. Объект же массой в 0.5 единиц будет передвигаться. Примечание: объекты Rigid body и Soft body ведут себя немного по-другому.

Для того, чтобы придать объекту движение с помощью Force по осям X и Y достаточно значения сопоставимого с массой объекта или немного больше ее. Однако движение по оси Z в положительном направлении (вверх) требует применения силы большего значения. Вспомним, что находясь в поле Земли объекты притягиваются к ней с ускорением свободного падения равным примерно 9.8 м/с2. Чтобы преодолеть силу притяжения Земли и подбросить объект вверх, требуется сообщить ему большее ускорение, чем 9.8. Примечание: значение Force по оси Z не обязательно должно быть больше 9.8; объекты массой меньше единицы поднимаются вверх и при меньших значениях силы.
У любого меш-объекта в Blender есть центральная точка (в BGE она играет роль центра тяжести объекта). Объект всегда вращается вокруг нее и именно на нее действует сила. Для того, чтобы увидеть как от смены центра тяжести изменяется поведение объекта можно проделать следующий опыт. Расположим на сцене два одинаковых сплюснутых цилиндра. Оба – Dynamic, при нажатии на клавишу Space (пробел) на них воздействует Torque (вращающий момент по оси Z) в 2-3 единицы. Центральная точка одного из цилиндров смещена к его границе.

В режиме игры при нажатии на клавишу Пробел один цилиндр будет крутиться на месте, а второй совершать круговые движения, описывая окружность.


Игровой движок Blender’а позволяет виртуальным объектам вести себя подобно объектам реального мира. Следовательно, результат взаимодействия объектов Dynamic, Rigid и Soft body в Blender Game Engine должен зависеть от настроек их массы, а также сил, влияющих на них. Рассмотрим это на примере.
У нас будет стена из кирпичей и шар, разбивающий ее. По отношению к шару можно будет прикладывать разную силу. В зависимости от приложенной силы шар может разрушать стену или нет.
Стена состоит из кирпичей, каждый из которых представляет собой измененный куб типа Rigid body. При взаимодействии объектов важно настроить свойство Bounds (границы). В данном случае лучше использовать тип Convex hull (выпуклая оболочка).

С помощью дублирования (Shift + D) создаем стену из кирпичей. Здесь важно плотно подогнать один к другому. В режиме игры стена должна оставаться целой, а не разваливаться. Последнее может случиться, если неправильно настроены границы объектов или кирпичи неправильно расположены относительно друг друга.

Добавляем на сцену сферу, устанавливаем для нее также тип Rigid body и располагаем на некотором расстоянии от стены. При нажатии на клавишу с цифрой 1 на клавиатуре шар должен двигаться в направлении стены в результате приложения к нему силы. Следует выключить кнопку L.

Сила при нажатии на клавишу с единицей постоянно воздействует на шар. Чем дольше мы жмем, тем больше сила воздействия. На самом деле трудно определить, сколько силы было передано шару. Так может оказаться, что при воздействии меньшей силы, но на протяжении большего времени, шару суммарно было сообщено больше воздействия, чем при моментальном воздействии большей силы. Чтобы избежать недоразумений, в Blender Game Engine можно сделать так, что шару будет сообщаться сила только тогда, когда он находится в определенном месте или в течение строго определенного временного интервала.
Наша сфера будет испытывать воздействие силы лишь тогда, когда касается красной маленькой плоскости. Для этого нужно добавить к сфере сенсор Touch (касание) и связать его с уже существующим контроллером. В поле MA следует прописать материал, при касании которого будет срабатывать сенсор Touch. Имя материала можно найти на панели кнопок Shading (F5).

Два сенсора связаны с одним контроллером типа AND. Это означает, что активатор сработает лишь в том случае, если сигнал будет поступать от обоих сенсоров. В данном случае, должна быть зажата клавиша с единицей и объект должен касаться материала start. Если зажата единица, но нет касания start (или, наоборот, есть касание, но нет сигнала с клавиатуры), то активатор не будет запускаться.
Шар должен находиться над красной плоскостью. В режиме игры к шару будет прикладываться сила лишь в момент его нахождения на плоскости, а не на протяжении всего пути (при зажатой клавише 1). В дальнейшем это позволит трезво оценить, как влияет размер приложенной к шару силы на его способность разрушать стену.
Добавим также еще два комплекта сенсоров, контроллеров и активаторов. Настроим их также как и первый, за исключением величины прикладываемой силы и клавиш-сенсоров. Может быть один сенсор Touch, связанный с несколькими контроллерами. Также неплохо было бы добавить возможность перезагрузки без выхода из режима игры: активатор Scene –> Restart.

Требуется установить такие величины силы, чтобы в первом случае стена почти не разрушалась, а во втором – разрушалась меньше, чем в третьем.
На примере этой модели видно, что скорость шара (и как следствие его разрушающая способность) зависит от величин приложенной к нему силы. Эта зависимость есть в реальном мире, к которому мы привыкли, она эмулируется и в Blender Game Engine.

Среди множества сенсоров в BGE есть и сенсор Mouse (мышь), улавливающий различные манипуляции мыши (щелчки кнопками мыши, движение, прокручивание колеса и др.). Однако, при запуске режима игры (P) мы не видим курсор мыши. Чтобы отобразить курсор нужно прописать небольшой скрипт. Для этого разделите 3D-окно на две части, одну из них поменяйте на окно Text Editor. Далее раскройте меню Text и выберите пункт New. По умолчанию первый скрипт будет называться Text.001, лучше ему дать более осмысленное имя (например, mouse). Затем в окне следует ввести следующие строки:
import Rasterizer Rasterizer.showMouse(1)
В первой строке импортируется модуль, а во второй – вызывается функция showMouse, позволяющая отобразить курсор мыши в режиме игры.

Однако, это еще не все. Нужно привязать данный скрипт к какому-либо объекту на сцене (допустим камере). Для того, чтобы курсор отображался всегда, следует добавить активатор Always и связанный с ним контроллер Python, где в качестве Script указывается имя того скрипта, который был создан ранее (в нашем случае, это mouse). Активатор в данном случае не требуется. После этого в режиме игры курсор будет виден.


Пусть на сцене будет плоскость и Rigid-сфера на ней. Сфера будет управляться с помощью мыши следующим образом:
Разберем, как это сделать. Добавив сенсор Mouse->Left button и связав его с активатором Motion, мы заставим сферу лететь вверх при нажатии левой кнопкой мыши в любом месте 3D-окна (в режиме игры). Тут две проблемы: во-первых, сфера взлетает от щелчка в любом месте экрана, а во-вторых, она летит даже тогда, когда уже находится не на плоскости. Проблемы решаются с помощью добавления еще двух сенсоров к уже существующим контроллеру и активатору. Один должен быть Mouse -> Mouse over, второй – Touch.
За прокрутку колеса отвечают сенсоры Mouse -> Wheel up (вверх) и Mouse -> Wheel down (вниз). Каждому следует добавить свой контроллер и активатор.
Далеко не редкими бывают ситуации, когда сцена слишком большая для полноценного ее обзора с помощью неподвижной камеры. Поэтому необходимо, чтобы камера двигалась, следя за объектами, или на сцене присутствовали несколько камер, между которыми можно было бы переключаться. Допустим, мы придумали игру, в которой шар должен преодолеть препятствия, перепрыгивая их, не толкая при этом (иначе перегородки упадут). Путь, который шар должен пройти очень длинный. Если камера все время остается на месте, то стоит шару немного продвинуться вперед, как станет трудно или невозможно им управлять.

1. Связь родитель-потомок (Ctrl+P)
Данная связь широко используется в Blender для того, чтобы изменения объекта-«родителя» сразу приводили к изменениям объектов-«детей» (но не наоборот). Если «предок» меняет свое положение, размер, поворот, то следом за ним эти свойства изменяются и у «потомка». Для примера описанного выше, это означает, что если установить шар в качестве родителя, а камеру в качестве потомка, то любое перемещение шара, в том числе и в режиме игры, заставит камеру двигаться за ним.
Связь устанавливается так:
Однако запустив режим игры можно столкнуться с проблемой: шар не только двигается, но и поворачивается. Следом за ним будет вертеться и камера, вид из камеры при этом будет варьировать от странного до еще более странного. Чтобы камера не вертелась, ее можно привязать не к целому объекту, а к его любой вершине. Вершина – это точка. Точки не вертятся. Тогда последовательность действий будет такой:
2. Активатор Camera
Есть еще один способ постоянно следить за выбранным объектом: использовать активатор Camera. Сделать это можно следующим образом. Для камеры добавить связанные между собой сенсор Always, контроллер и активатор Camera. В поле OB активатора прописать имя того объекта, за которым планируется следить.

Изначально настройки Height (высота камеры над объектом), Min и Max (минимальное и максимальное расстояния от камеры до объекта) равны нулю. Однако лучше их изменить. Если требуется, чтобы камера смотрела на объект больше сбоку, чем сверху, то Height не должна иметь большое значение.
Активатор Camera обеспечивает более плавное слежение за объектом, чем связь родитель-потомок. При резких движениях объекта камера двигается более мягко; если объект неподвижен, камера все равно продолжает немного двигаться и поворачиваться (по оси X или Y). Недостатком этого способа слежения является то, что если объект вертится, то камера иногда прокручивается так, что управлять объектом становится неудобно.
3. Слежение за разными объектами
Бывает, что на 3D-сцене сначала необходимо следить за одним объектом, а затем за другим. Чтобы реализовать такую возможность, можно создать для камеры не одну группу сенсоров, контроллеров и активаторов Camera. Каждый активатор может приводиться в действие нажатием клавиши или щелчком мыши. Тогда в режиме игры можно будет переключать вид с одного объекта на другой.

4. Обзор сцены из разных камер
Когда требуется не следить за конкретным объектом, а просто обозревать сцену с разных точек зрения, то возможно уместней установить несколько камер и предусмотреть возможность переключаться между ними в режиме игры. Для установки камеры используется активатор Scene -> Set Camera.

Практическая работа
Обычно игры, создаваемые в Blender, состоят из нескольких сцен.

Blender Game Engine включает возможность настройки перехода на другую сцену в режиме игры. На панели Logic для этих целей предназначен активатор Scene -> Set Scene. В качестве значения SCE («установить сцену») указывается имя сцены, на которую требуется перейти.

События, которые могут приводить к переходу на другие сцены, различны: щелчки мышью, нажатия клавиш, касание материала и др.
Приведем простой пример. Допустим, мы создаем заготовку будущей «виртуальной лаборатории», состоящей из четырех сцен, на каждой из которых будет возможно проводить и демонстрировать какой-нибудь виртуальный эксперимент. С главной сцены можно будет на графическом меню указать с помощью щелчка левой кнопкой мыши желаемую сцену. С любой другой сцены можно будет вернуться на главную сцену. Опишем примерную последовательность шагов.
1. Подготовим сцены
На главной сцене у нас будет меню. Его можно создать из плоскостей, на которые наложить текстуры изображений с текстом или объект Text Блендера. В последнем случае Text следует преобразовать в меш-объект (Alt+C -> Mesh) и объединить с плоскостью (Ctrl+J).
Для добавления новых сцен, следует выбрать пункт ADD NEW в выпадающем списке окна пользовательских настроек (вверху) – посмотрите на первое изображение в данном уроке. При добавлении сцены предлагается список из четырех вариантов. Лучше выбрать Full Copy (чтобы не иметь головной боли с установкой камеры и лампы), а все лишние объекты потом удалить. Далее можно переименовать сцену.
Добавив вторую сцену, не будем спешить с добавлением других сцен. Пока разместим на второй сцене «кнопку» возврата на главную. Далее уже будем копировать эту сцену. В результате должна получиться примерно такая схема сцен как на рисунке ниже.

2. Отобразим курсор мыши
3. Установим возможность перехода между сценами в режиме игры
См. второй рисунок в данном уроке. Каждая кнопка на главной сцене должна переключать на соответствующую ей сцену (one, two, three или four). Кнопка “main” на остальных сценах должна переключать игру на главную сцену.
Создайте небольшую игру по следующему описанию.
Цель игры: прокатить шар до конца извилистой узкой поверхности.
Если шар падает с плоскости, то пользователь может нажать R и игра должна начаться сначала.

Если шар докатывается до конца плоскости, то следует переход на другую сцену с еще более изощренной дорожкой. Чтобы переход происходил «автоматически», можно поставить на конец поверхности объект Empty (пустышка) и добавить к нему сенсор Near, связанный с активатором Scene -> Set Scene.

Камера должна «следить» за шаром.
Желательно, чтобы игра состояла из трех игровых сцен и сцены «конец игры», которую может увидеть только игрок, прошедший все уровни.
Активатор Edit Object (редактирование объекта) позволяет изменять свойства конкретного объекта, а также изменять «меш-содержимое» 3D-сцены в режиме игры.
Использование типа Add Object активатора Edit Object дает возможность в режиме игры добавлять на сцену новый меш-объект. На самом деле объект должен быть не новым, а “спрятанным” (обычно на другом слое). Новый объект добавляется в то место, где находится объект, к которому добавлен активатор Edit Object -> Add Object. Добавляемый объект (его имя) прописывается в качестве значения свойства OB.
Допустим, у нас есть плоскость, на которую планируется в процессе игры добавлять различные предметы при нажатии на различные клавиши, для указания места добавления используется специальная метка-точка (на рис. - кранным цветом), которую можно передвигать по плоскости в четырех направлениях.

На самом деле двигается пустышка (Empty), которая является родителем по отношению к красной метке (Ctrl+P – связь родитель-потомок). Именно для объекта Empty также добавлены активаторы Edit Object. Конечно, можно привязать добавляемые объекты и к красной метке, однако появятся проблемы с их размером и др.

Здесь происходит добавление объектов с именами white и black при нажатии клавиш W и B соответственно. Первые четыре блока сенсоров, контроллеров и активаторов отвечают за движение Empty.
У активатора Edit Object -> Add Object есть дополнительные настройки. Добавленные объекты будут исчезать через установленный промежуток времени, если Time не будет нулевым. Измеряется данное свойство не в секундах, а кадрах (обычно в секунде 25-30 кадров).
linV и angV позволяют придать объекту некоторое ускорение в момент появления. Движение может быть вдоль оси или вокруг оси (поворот). Работает только с физическими объектами.
Объект может быть удален в режиме игры. Часто это используется в комбинации с каким-либо другим активатором. Например, исчезновение объекта при столкновении с другим объектом.
Этот тип активатора Edit Object представляет собой интересную возможность Blender Game Engine (однако, еще не до конца реализованную разработчиками). Например, можно создавать различные спецэффекты. Допустим, объект падает и при касании земли, последняя проминается (на самом деле будет происходить замена меша).

При добавлении этого типа активатора, объект будет поворачиваться по осям, «следя» за указанным в качестве OB объектом, при этом оставаясь на одном и том же месте. Например, камера может следить за каким-нибудь передвигающимся объектом на сцене, если сцена небольшая. Или интересные эффекты могут получаться, если при движении одного объекта, другой (с активатором Edit Object -> Track to), оставаясь на месте, будет поворачиваться.
Этот тип активатора Edit Object позволяет изменять физические свойства объекта. Однако объект должен изначально быть установлен как физический. Подтипы Suspend и Restore Dynamics, Disable и Enable Rigid Body включают и отключают соответственно влияние физики на объекты. Подтип Set Мass позволяет в режиме игры изменять массу объекта.
Например, у какого-нибудь Dynamic-объекта можно отключить его физические свойства, связав сенсор Always с активатором Edit Object -> Dynamics -> Suspend Dynamics. А в процессе игры включать физические свойства (Restore Dynamics), если случиться определенное событие.
С помощью Blender Game Engine создайте небольшую игру по следующему описанию.
На одном краю плоскости, расположены небольшие кубики-мишени, являющиеся статическими объектами.
На другом крае плоскости расположен объект-пушка.
Добавить Empty и сделать ее родителем по отношению к пушке. Пустышка (вместе с пушкой) может двигаться в двух плоскостях: вдоль своего края и вверх-вниз. Сенсоры – стрелки на клавиатуре.
Из пушки (на самом деле – пустышки) вылетают пули в направлении мишеней. Для этого на другой слой поместить объект-пулю (физический объект). Привязать его к пушке при помощи активатора Edit Object -> Add Object. Придать ускорение в направлении мишеней (linV). Пульки должны исчезать примерно через 100-120 кадров (Time).
Мишени должны исчезать при касании их объектом-пулей (End Object).
Игровой мир в Blender по умолчанию настроен таким образом, что поведение виртуальных физических объектов сходно с поведением их аналогов в реальном мире в условиях Земли. Однако в невесомости или на каком-нибудь другом космическом теле те же самые объекты будут вести себя по-другому. Все зависит от силы притяжения, вызываемой конкретным «миром» (космическим телом). Эта сила вызывает ускорение свободного падения, которое в Blender можно менять в окне кнопок на панели Shading -> World buttons: параметр Grav. Значение по умолчанию равно 9.8, что соответствует ускорению свободного падения в пределах Земли.

Если разместить на сцене плоскость, а над ней несколько предметов, то можно увидеть, как они будут падать (если параметр Grav не равен нулю, нулевое значение обозначает невесомость) и взаимодействовать между собой. Большое значение Grav приводит к тому, что объекты падают очень быстро, и для их перемещения с помощью силы (Force) требуется использовать большее значение, чем обычно.
Изменяя значение Grav, можно оценивать поведение объектов в различных условия. Например, установив ускорение свободного падения в значение 1.62, мы увидим, как ведут себя объекты в пределах Луны. Сразу станет очевидно, что взлет с Луны требует приложения меньшей силы по оси Z. Интересно также увидеть, как ведут себя объекты в условиях невесомости.
В режиме игры мы видим одну сцену и, следовательно, один «мир». Однако, может потребоваться наглядно сравнить поведение объектов в условиях разных «миров». Тогда нужно в режиме игры как-то отобразить как минимум две сцены. В Blender Game Engine есть некоторая реализация данной возможности. У активатора Scene есть два типа, позволяющие разместить другую сцену над или под текущей соответственно: Add Overlay Scene и Add Background Scene. То есть всего в режиме игры можно отобразить содержимое трех сцен.

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


При создании боле менее сложных сцен с использованием Blender Game Engine объекты могут состоять из нескольких частей, каждая из которых имеет свой цвет и текстуру. Для того чтобы добиться этого, можно пойти разными путями. Например, можно сначала смоделировать части объекта из различных меш-примитивов, наложить на них материалы и текстуры, а затем объединить их в единое целое (Ctrl+J). Но при этом обычно возникает один существенный недостаток – большое количество частей у меш-объекта (граней, ребер и вершин). Из-за этого при запуске игрового режима компьютер начинает тормозить. Чем меньше частей, тем быстрее. Поэтому, бывает лучше создать изображение с прорисованными на нем частями, а потом наложить этот рисунок на целый меш-объект. Или возможно, объект достаточно прост, но каждая его часть должна быть своего цвета.
Один из способов «экзотически раскрасить» объекты для отображения в режиме игры – это использование редактора UV/Image Editor, который открывается в соответствующем окне Blender. (3D-окно следует подразделить на две части и в одном выбрать окно UV/Image Editor.)

Примечания:

В окне UV/Image Editor можно 1) как создавать новые материалы, состоящие из одного цвета и/или дорисованные с помощью настроек панели Editing (вкладка Paint), 2) так и открывать готовые изображения. В основном предпочитают второй вариант.

После загрузки изображений они доступны в виде списка. Следует иметь в виду, что изображения по умолчанию не импортируются в файл .blend, а лишь связываются по ссылке. Чтобы картинки остались в файле «навечно», нужно для каждого рисунка в списке нажать кнопку с изображением коробки с сюрпризом.

Текущее изображение отображается в рабочей области окна. Если оно слишком большое или маленькое, то с помощью колеса мыши можно изменить масштаб. А зажав колесо мыши, перемещать изображение по рабочей области (т.е. работать почти так, как в 3D-окне).
Итак, у нас есть импортированные изображения и объекты на сцене, на которые требуется наложить эти изображения. Делается все в режиме редактирования объектов и при выделении граней. Текстура применяется только к выделенным граням. Таким образом, можно к одному объекту применить несколько текстур.
Понятно, что объекты по размеру и форме не совпадают с изображениями. Поэтому существуют различные способы наложения текстур. Выбор способа наложения происходит в меню UV Calculation, которое появляется при нажатии клавиши U в 3D-окне.

Если с первыми четырьмя способами наложения еще кое-как понятно, то остальные достаточно специфичны (за исключением Reset, который часто бывает полезен). Не смотря на возможность разного способа наложения, рисунки все равно не совпадают с объектом по размеру. Поэтому в окне UV/Image Editor предусмотрена возможность редактирования способа наложения так, как если бы вы редактировали меш-объект: можно перемещать сетку наложения по текстуре, масштабировать и изменять форму.
Рассмотрим несколько примеров.
Накладывание карты на сферу. В 3D-окне в режиме редактирования сферы выделить все грани; нажав U, выбрать Sphere from View. Перевести курсор мыши в окно UV/Image Editor. Растягивая (S по осям X, Y или Z) и перемещая сетку (G) добиться ее совпадения с картой.

Накладывание разных текстур на один меш-объект. Зажав Shift, выделяем только те грани, на которые накладывается первая текстура, выбираем изображение и применяем тип наложения. Редактируем сетку наложения, если потребуется. Далее выделяем другие грани и накладываем другой материал. Если нужно просто раскрасить их в тот или иной цвет, то достаточно в окне UV/Image Editor выбрать New, подобрать в появившемся окне цвет, назвать материал, и, затем, выбрать его из списка.
Отображение текстуры на внутренней поверхности. Допустим, планируется разместить сцену игры внутри большой сферы. Чтобы наложить текстуру на внутреннюю поверхность сферы надо наложить ее сначала на внешнюю сторону, затем (не выходя из режима редактирования) на панели кнопок Editing найти вкладку Texture Face, включить там Twoside и затем нажать Copy (чтобы применить изменения).

Практическая работа
Попрактикуйтесь в наложении материалов и текстур с помощью UV/Image Editor. В качестве среды для опытов можно использовать сохраненные файлы с предыдущих уроков по Blender Game Engine.