четверг, 28 декабря 2017 г.

Скрипт вращения камеры мышкой в BGE.

В данном уроке Вы узнаете, как реализовать перемещение в жанре 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:



Комментариев нет:

Отправить комментарий