В данном уроке Вы узнаете, как реализовать перемещение в жанре FPS (шутеров от первого лица) в игровом движке Blender.
Использование скрипта
Данный скрипт очень прост в использовании и включает в себя ограничения угла обзора камеры. Нужны данные ограничители для того, чтобы камера переставала вращаться когда Вы смотрите прямо вверх или вниз. Этот диапазон легко регулировать изменяя всего две переменные.
Вы можете просто импортировать объекты в Вашу сцену или же создать все самостоятельно (заодно и разобравшись). При создании собственной сцены создайте новый текстовый документ в окне Text Editor, вставьте в него код скрипта и назовите его, к примеру, “mouselook.py”. Вот, собственно, сам скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | from bge import render as r import math cont = bge.logic.getCurrentController() own = cont.owner mouse = cont.sensors["Mouse"] parent = own.parent #set speed for camera movement sensitivity = 0.05 #set camera rotation limits high_limit = 180 low_limit = 0 h = r.getWindowHeight()//2 w = r.getWindowWidth()//2 x = (h - mouse.position[0])*sensitivity y = (w - mouse.position[1])*sensitivity if own["startup"]: r.setMousePosition(h, w) own ["startup"] = False else: rot = own.localOrientation.to_euler() pitch = abs(math.degrees(rot[0])) if high_limit > (pitch+y) > low_limit: pitch += y elif (pitch+y) < low_limit: pitch = low_limit elif (pitch+y) > high_limit: pitch = high_limit rot[0] = math.radians(pitch) own.localOrientation = rot.to_matrix() parentRot = parent.localOrientation.to_euler() yaw = math.degrees(parentRot[2]) + x parentRot[2] = math.radians(yaw) parent.localOrientation = parentRot.to_matrix() r.setMousePosition(h, w) |
Запуск скрипта
Вам необходимо привязать скрипт к камере, которая в свою очередь привязана к игровому персонажу (в данном примере куб). Также, для камеры необходимо создать логическое свойство запуска (startup) установленное в значение TRUE. Скрипт поворачивает камеру, но так как она привязана к объекту (куб), то поворачивается и он. Для самого куба назначено стандартное управление движением (W,A,S,D).
Убедитесь, чтобы ось Z Вашего персонажа (куба) была направлена вверх. На изображении ниже Вы увидите два сенсора подключенных к файлу скрипта. Pulse Mode сенсора Always нужно установить в значение TRUE: