Blender Game Engine FAQ

Список разделов Геймдев в Blender Игровой движок Blender

Описание: Все вопросы и обсуждения, касающиеся BGE
Модераторы: exooman, denis8424

  • 17

Сообщение #1 denis8424 » 28.01.2014, 14:59

Скопипастю(?) FAQ по BGE c БУ сюда, сохраннее будет. Правда без указания авторства конкретных постов. Потом, может быть. Если будут какие-то претензии - обращайтесь.

Здесь собраны наиболее часто задаваемые вопросы, связанные с использованием игрового движка(BGE)

Внимание! Посты в этой теме размещаются только в форме "вопрос-ответ"! Вопросы без ответа будут удаляться. Для вопросов, не освещённых в этой теме, есть тема "Вопросы по созданию игр."

Вопрос: как сделать вращение камеры мышкой?
Ответ: с помощью актуатора Mouse - Look

Вопрос: как сделать управление мышкой не от первого, а от третьего лица?
Ответ: то же самое что и в предыдущем вопросе, только актуатор MouseLook вешаем на логику персонажа, и к этому персонажу с помощью Parent прикрепляем камеру.

Вопрос: как сделать динамические тени?
Ответ: создаём лампочку Spot или Sun и смотрим картинку. Возможно, источник света придется прикрепить к персонажу с помощью Vertex Parent, чтобы персонаж не выбегал за пределы освещенной области.
f2.png
f2.png (32.43 КБ) Просмотров: 5021


Вопрос: как сделать сохранение и загрузку уровня?
Ответ: вариант первый - учить Python и использовать стандартные функции языка для сохранения нужных значений, вариант второй - учить Python и использовать globalDict блендера:
Код: Выделить всё
from bge import logic

# Записываем что нужно:
logic.globalDict['HAZBAHIE'] = 'bla bla bla'
logic.globalDict['patrony'] = 120

# Сохраняем данные в файл:
logic.saveGlobalDict()

# Загружаем данные из файла:
logic.loadGlobalDict()

# Получаем нужное значение:
print(logic.globalDict['patrony'])

# Удаляем значение вообще:
logic.globalDict.pop('HAZBAHIE')

# Удаляем всё:
logic.globalDict = {}
Почитать про то, как получить нужные параметры из объектов, можно в официальной документации Blender или тут http://andreymal.org/20/

Вопрос: как обмениваться данными между несколькими сценами?
Ответ: вариант первый - с использованием globalDict, как описано в предыдущем вопросе, он общий для всей игры. При этом не надо писать loadGlobalDict отдельно для каждой сцены - данные хранятся с самой загрузки до выхода из игры.
Вариант второй - просто с использованием переменных внутри bge.logic:
Код: Выделить всё
logic.blablabla = 'razdvatri'
print(logic.blablabla)

Вопрос: как включить систему частиц в BGE?
Ответ: её там нет :) Но частицы можно имитировать с помощью добавления объектов с другого слоя, или с помощью аддона easyEmit.
Видео:
phpBB [media]

Аддон: http://blenderartists.org/forum/showthread.php?241656-easyEmit-*Update*-13-06-2013

Вопрос: не работает анимация костей! Что делать?
Ответ:
0) Удалить актуатор IPO (F-Curve): он не для костей :) (в поздних версиях удален)
1) Убедиться, что анимируемый объект - потомок костей (Ctrl+P)
2) Выделить кости в Object Mode
3) Создать актуатор Action
4) Найти в списке название нужной анимации (можно узнать, например, через окно DopeSheet или методом научного тыка)
5) Задать начальный и конечный кадр, выставить тип анимации и так далее
f7.png
f7.png (9.92 КБ) Просмотров: 5021

Вопрос: объекты проходят сквозь стены, как лечить?
Ответ:
1) Постараться не использовать Loc в актуаторе Motion или хотя бы уменьшить значения
2) Увеличить параметр Margin у стен и у объектов (только не переборщите, иначе объекты будут «висеть» в воздухе)
3) Сделать стены «толстыми», а не одной гранью
f8_thumb.png
f8_thumb.png (35.36 КБ) Просмотров: 5021

Вопрос: объект слишком скользит по земле (в том числе когда отталкивается от стены), как лечить?
Ответ:
0) Вспоминать школьный курс физики про инерцию и трение
1) Увеличить это самое трение для земли и для объекта в материале
2) Не использовать Loc в актуаторе Motion :D
f9_thumb.png
f9_thumb.png (66.66 КБ) Просмотров: 5021

Вопрос: грань рисуется только с одной стороны, что делать?
Ответ: В свойствах материала нужно отжать галочку Backface Culling
bFC.jpg
bFC.jpg (34.11 КБ) Просмотров: 5021

Вопрос: что такое GLSL, зачем он нужен и как его использовать?
Ответ: «GLSL — язык высокого уровня для программирования шейдеров — программ для одной из ступеней графического конвейера, используемая в трёхмерной графике для определения окончательных параметров объекта или изображения.», - говорит нам Википедия. Что это даёт в блендере:
-возможность использовать динамические тени (см. вопрос 1)
-использовать ноды
-использовать многие настройки материалов (без них не будут отображаться текстуры, кстати)
-делать более красивое освещение, близкое к тому, что рендерит Blender Render (для простых сцен, да)

Включить GLSL можно на панели Properties (вызывается кнопкой N) во вкладке Display и выбрав режим отображения Textured (см. рисунок). Настроить его можно в панели Scene.
f11_thumb.png
f11_thumb.png (48.92 КБ) Просмотров: 5021

Вопрос: У меня нет ни настроек GLSL в панели Scene, нет ни Margin у объекта, ни вообще настроек игровой физики, ни статиков, ни динамиков, нет даже меню Game!!! Что делать???
Ответ: включить Blender в режим Game.
f12.png
f12.png (2.41 КБ) Просмотров: 5021

Вопрос: как сохранить игру в exe?
Ответ: включить аддон Save As Runtime (File - User Preferences - Add-Ons - в поиск пишем runtime - ставим галочку напротив аддона) и File - Export - Save As Runtime. После чего копируем папку 2.5x (например, 2.59) из папки с блендером в папку с экспортированной игрой (если Linux) и проверяем, работает ли.

Вопрос: как сделать «медленный» Parent, то есть чтобы потомок немного запаздывал за родителем?
Ответ: Включить на потомке Slow Parent и настроить Offset.
f16.jpg
f16.jpg (29.45 КБ) Просмотров: 1459

denis8424
Аватара
Сообщения: 627

  • 7

Сообщение #2 denis8424 » 28.01.2014, 20:06

Вопрос: как сделать чтобы один объект смотрел на другой объект?
Ответ: актуатор Edit Object, параметр Track To. В списке выбираем объект, на который смотреть, нажмиаем кнопку 3D, по желанию задаём время (Time), на которое смотрящий объект будет запаздывать.

Вопрос: как сделать Parent без поворота, то есть чтобы потомок только перемещался, но не поворачивался за родителем?
Ответ: С помощью Vertex Parent. Bыделяем потомка, потом выделяем родителя, заходим в Edit Mode (Tab), выделяем какую-нибудь одну вершину (или создаём новую в середине) и нажимаем Ctrl+P.

Вопрос: как добавить текст в BGE, чтобы можно было менять его во время игры?
Ответ: 0. Ищем специальные текстуры со шрифтами (например http://www.blendenzo.com/Files/FreeFontPack.zip )
1. Создаём плоскость с материалом и прозрачной UV-текстурой, которую накладываем на символ @
2. Ставим движок Blender Game.
3. В появившейся в материале вкладке Game Settings ставим галочку Text.
4. Добавляем для плоскости свойство с названием Text и типом String.
5. Пишем желаемый текст и проверяем. Для изменения текста меняем это свойство.
fonts_thumb.png
fonts_thumb.png (43.13 КБ) Просмотров: 5044

В новых версиях также можно изменять в реалтайме объект Text. Для этого нужно добавить в настройках нужный шрифт и добавить специальное проперти.
font1.jpg
font1.jpg (46.78 КБ) Просмотров: 5044

textProprety.png
textProprety.png (15.58 КБ) Просмотров: 5044

Доступ к этому проперти отличается от обычного:
Text.text = 'blabla'
Или можно воспользоваться модулем blf

Вопрос: Как сделать анимированную текстуру? GIF не работает.
Ответ: 1. Делаем или ищем текстуру-«плитку»: располагаем кадры анимации на изображении друг за другом, можно в несколько строчек.
2. Включаем режим GLSL, добавляем на объект (плоскость) материал и текстуру с картинкой, тип наложения UV.
3. Переходим в режим редактирования, развёрткой заполняем всю картинку (например, U - Project from View (Bounds) для плоскости из вида сверху).
4. На панели редактирования UV включаем левую панель (клавиша N или плюсик в углу).
5. Во вкладке Game Properties ставим галочку Animated, Start - 0, End - сколько кадров на анимации минус один, Speed - подберёте (от 2 до 10 обычно), ставим галочку Tiles, X - сколько столбцов в плитке, Y - сколько строчек.
6. Запускаем игру, проверяем.
7. Подгоняем вышеописанные параметры под анимацию методом научного тыка.

Пример -
1128-anim.blend.7z
(68.67 КБ) Скачиваний: 60

Изображение
Но глюки тянутся ещё с версии 2.4.
Или использовать скрипт UV-скроллинга.

Вопрос: как можно перенести объект с одной сцены на другую?
Ответ: Ctrl+L и выбрать в какую сцену

Вопрос: Можно ли как-нибудь скопировать или переместить актуаторы, сенсоры и контроллеры из одного объекта в другой ?
Ответ: Выделяешь объекты(ы) для которых нужно скопировать сенсоры и аккуаторы, потом тот объект от которого скопировать, затем в меню Object -> Game -> Copy Logic Bricks. Так же можно скопировать Property.

Вопрос: Как отключить взаимодействие объекта с освещением(что бы он не освещался)?
Ответ: В настройках осветителя(Lamp, Spot и т.д.) ставим галочку This Layer Only и он будет освещать только те объекты, которые находятся на одном с ним слое. Остается только перенести объект, который не должен освещаться, на другой слой и настроить камеру.

Вопрос: Имеется меш с арматурой, для которой настроена анимация. Как изменить размер всей арматуры?
Ответ: Выход - припарентить арматуру к пустышке(например) и уже пустышку масштабировать, арматура точно всё повторит за пустышкой, и без глюков(как правило)...

Вопрос: Есть меш с анимацией Location. Проблема в том, что при проигрывании анимации где бы не находился меш, он возвращается в то место, где он был при первом кадре F-Curve.Как сделать чтобы анимация проигрывалась относительно текущей позиции меша,то есть при проигрывании анимация начиналась с местоположения меша?
Ответ: В актуаторе Action нажми кнопку Add. И оно будет применять анимацию IPO локально.
Внимание! Если анимация начинается с 0 кадра то возможна проблема с воспроизведением. Во избежание, анимация должна начинаться как минимум с 1 кадра.

Вопрос: как уменьшить нагрузку на физику от объектов с большим количеством полигонов?
Ответ: 1. Создаём низкополигональную копию объекта (каркас) на том же месте (например, копируем Shift+D и применяем модификатор Decimate)
2. В материале каркаса во вкладке Game Settings нажимаем галочку Invisible, чтобы каркас не было видно.
3. В материалах высокополигонального объекта выключаем галочки Physics.
4. Выделяем каркас, затем объект и нажимаем Ctrl+J для их объединения в один объект.
Если всё сделано правильно, полигоны объекта больше не должны просчитываться.
Изображение

Вопрос: делаю один объект потомком другого через Ctrl+P, запускаю игру — при перемещении родителя потомок движется как попало, как лечить?
Ответ: сбросить размеры объектов, удалив Parent и выбрав Ctrl+A → Scale на родителе и потомке.

Вопрос: как отключить сглаживание текстур, чтобы не размазывалось и было пиксельно, как в майнкрафте?
Ответ: Можно изменить настройки экрана скриптом во время игры, смотрите вопрос ниже, или в настройках блендера (File - User Preferences) во вкладке System отключить галочку Mipmaps.

Чтобы отключить в exe-шнике, придётся создать файл с расширением .bat в папке с ним, прописать туда
путь.к.файлу.exe -g nomipmap
и запускать с помощью него.

(На линуксах:
Код: Выделить всё
#!/bin/sh
./путь.к.файлу -g nomipmap
Расширение писать необязательно. И не забудьте дать права на запуск этому файлу.)
Изображение

Вопрос: как сменить цвет у текста (объект Text)?
Ответ:
1) Цвет меняется через свойства объекта.

Чтобы в 3D-виде отобразить материал и цвет как в игре, нужно отключить затенение (Shadeless) и поставить галочку (Object Color):
bukvi.jpg
bukvi.jpg (52.61 КБ) Просмотров: 5035

2) скриптом -
Код: Выделить всё
import bge
cont = bge.logic.getCurrentController()
cont.owner.color = [1.0,0.0,0.0,1.0]#red,green,blue,alpha (минимум - 0.0 максимум-1.0)

Вопрос: как настраивать экран во время игры?
Ответ:
для смены разрешения есть функция
bge.render.setWindowSize(ширина,высота)
ширина и высота числа (например 800,600)

для настройки анизотропной фильтрации функция
bge.render.setAnisotropicFiltering(уровень)
уровень должен быть одним из 1, 2, 4, 8, 16

для настройки фильтрации текстур
bge.render.setMipmapping(уровень)
0 - без размытия, 1 - нормальное(рекомендуется) и более

настройка типа отображения
bge.render.setMaterialMode(тип)
принимает
Код: Выделить всё
bge.render.KX_TEXFACE_MATERIAL
bge.render.KX_BLENDER_MULTITEX_MATERIAL
bge.render.KX_BLENDER_GLSL_MATERIAL
>изменения будут применены к новой сцене

настройка типа окна (полноэкранный)
bge.render.setFullScreen(значение)
принимает True (вовесь экран) False (в окне)
в настояшее время ведет себя не одекватно (мне так кажется) и по разному на разных системах
полный список здесь http://www.blender.org/documentation/...hon_api_2_68_2/bge.render.html
Вложения
blender_disable_mipmap.jpg
(243.54 КБ) Скачиваний: 37
speed.png
(74.27 КБ) Скачиваний: 41
1129-anim.png
(76.02 КБ) Скачиваний: 42
Последний раз редактировалось denis8424 05.01.2016, 20:06, всего редактировалось 3 раз(а).
Причина: Вложения-картинки напрямую не отображаются.
denis8424
Аватара
Сообщения: 627

  • 4

Сообщение #3 denis8424 » 28.01.2014, 20:56

Вопрос:как сделать версию игры для другой ОС например - с Windows на Linux или наоборот с Linux на Windows
Ответ:зайти в File > Export > Save as Runtime найти слева надпись Player path указать путь к файлу blenderplayer(придется ручками писать полный путь) из архива для целевой системы (качаем с офф сайта) убрать все галки, сохранить и скопировать остальное из архива кроме файла blender и папок datafiles, scripts (2.67/datafiles,2.67/scripts)
1667-Untitled.png
1667-Untitled.png (62.54 КБ) Просмотров: 5034

Вопрос: в режиме мультитекстур я мог менять цвет обьекта через свойство obj.color а в режиме GLSL с материалом не могу. как менять цвет обьекта?
Ответ: на вкладке материалы поставить галку Object color, и теперь цвет материала будет менятся через ссылку obj.color
obj_color_thumb.PNG
obj_color_thumb.PNG (66.45 КБ) Просмотров: 5034


Вопрос: Я присвоил кости арматуры констрейнт, в окне редактора все работает, но в режиме игры арматура неподвижна.
Возможно, проблема в том, что арматура не обновляется. Для этого необходимо добавить арматуре цепочку из сенсорa, контроллера и актуатора "Armature -> Run Armature"

Вопрос: При подгрузке сцены из другого файла с помощью bge.logic.libLoad() появляется такая ошибка: Warning: removing controller with non-zero m_registerCount: 1. Как с этим бороться?
Почему-то такая ошибка появляется при использовании на подгружаемых объектах сенсоров, реагирующих на полисетку, например Near. Постарайтесь не использовать такие сенсоры.

Вопрос: При использовании метода KX_GameObject.setAngularVelocity или KX_GameObject.worldAngularVelocity не удается установить нулевую скорость вращения(остановить вращение)
Это связано с ошибкой в движке. Он не воспринимает нулевой вектор, поэтому передавайте в функцию очень малые значения вращения, например:
Код: Выделить всё
gameObject.setAngularVelocity([0.000001, 0.000001, 0.000001], False)

Вопрос: Не получается анимировать цвет/прозрачность материала в настройках материала. Что делать?
Поставить галочку в чекбоксе ObjectColor во вкладке материала, затем в настройках объекта анимировать нужный цвет:
Изображение
Или перейти на свежую версию Блендера, где это возможно.

"Вопрос: Не получается повторно подгрузить сцену с помощью bge.logic.LibLoad(), в консоль пишет ошибку : "blend file already open", несмотря на то, что библиотека была освобождена с помощью bge.logic.LibFree().
Не совсем понятно, чем вызвана эта ошибка, похоже, что в сцене остаются действующие ссылки на открытые файлы. Можно исправить это безобразие с помощью рестарта сцены или игры целиком, актуатором или скриптом, как удобно.
Последний раз редактировалось denis8424 28.01.2014, 21:04, всего редактировалось 1 раз.
denis8424
Аватара
Сообщения: 627

  • 3

Сообщение #4 Wegemu » 16.11.2015, 18:35

Вопрос: Как изменить активные логические состояния объекта (state) при помощи Python (например с 1, 15, 22 на 5, 6, 30)?
Для этого необходимо записать 30-битовую маску (целое число) в атрибут state объекта (KX_GameObject.state).

Файл примера: Blender Game Engine примеры
When debugging, novices insert corrective code; experts remove defective code.
VEゲーム
Wegemu M
Аватара
Откуда: Иркутск
Сообщения: 22


Вернуться в Игровой движок Blender

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 4 гостя

cron