Сенсор Mouse. Урок 5

Уроки по Blender Game Engine

Сенсор Mouse в Blender Game Engine

Отображение курсора мыши в режиме игры

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

import Rasterizer 
Rasterizer.showMouse(1)

В первой строке импортируется модуль, а во второй – вызывается функция showMouse, позволяющая отобразить курсор мыши в режиме игры.

Скрипт для отображения курсора мыши в режиме игры в BGE

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

Отображение курсора мыши в режиме игры в BGE: панель Logic

Управление 3D-объектами с помощью мыши в Blender Game Engine

Движение 3D-объекта с помощью мыши в BGE: панель Logic

Пусть на сцене будет плоскость и Rigid-сфера на ней. Сфера будет управляться с помощью мыши следующим образом:

  1. Если сфера находится на плоскости (а не в «воздухе»), то щелчок левой кнопкой мыши по ней должен «сообщать» силу, приводящую ее в движение вверх.
  2. Прокрутка колеса мыши вверх и вниз должна «сообщать» сфере вращающий момент (Torque) по оси Z по часовой и против часовой стрелки.

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

Практическая работа

  1. Расположите на сцене три любых объекта на плоскости. Установите для них тип Rigid body. При щелчке левой кнопкой мыши по каждому отдельному объекту он должен отскакивать в какую-нибудь сторону, а при щелчке правой кнопкой мыши в любом месте 3D-окна все объекты должны взлетать вверх.
  2. На новой сцене расположите сферу (Rigid body) и плоскость под ней. Пусть любое движение мыши (Movement) заставляет объект крутиться по оси X или Y, а щелчок левой кнопкой мыши «сообщает» силу движения вперед в выбранном направлении. Отметьте, есть ли разница в скорости между двумя случаями: 1) сначала сфера крутится, а затем получает толчок вперед, 2) сфера сразу толкается вперед.