Текст у Blender Game Engine
У цьому уроці Ви дізнаєтесь, як додавати текст до гри, змінювати його колір, розмір, шрифт… Як переносити довгі рядки тексту за допомогою скрипту, а також навчитеся створювати лічильник боєприпасів.
Додавання тексту
Blender може використовувати текст у режимі реального часу в ігровому движку. Створіть нову сцену, перейдіть на вигляд із камери, розташуйте 3D-курсор у лівому верхньому кутку і додайте об'єктText. Швидше за все, вирівняється він щодо глобальних координат. Ви можете вручну повернути його, але краще перейти в налаштування (User Preferences) та на вкладці Editing змінити опцію Align To наView. Таким чином, новостворені об'єкти будуть вирівнюватися щодо поточного виду, а не глобальних координат. Тепер запустіть гру (P ) і ви побачите у ній Ваш текст:

Зміна роздільної здатності шрифту
Не важко помітити, що якість напису бажає кращого. Ми можемо поліпшити його двома способами. Ви можете віддалити текст від камери і збільшити його в розмірах (при необхідності) або написати невеликий скрипт на Python. Краще використовувати другий спосіб :)
Додайте вікноText Editor, створіть новий файл під назвою “text_res ” і вставте в нього наступний скрипт:
cont = bge.logic.getCurrentController() own = cont.owner own.resolution = 5
Не знімаючи виділення з тексту, перейдіть у вікноLogic Editor. Додайте сенсор Always та підключіть його до контролера Python. Для контролера вкажіть використовувати скрипт під назвою “text_res “. Запустивши гру Ви помітите, що текст став значно краще виглядати. Змінюйте значенняresolution, поки не досягнете бажаного результату, але не встановлюйте занадто високі значення, інакше гра почне підгальмовувати.Значення 1 є стандартною роздільною здатністю. Починайте зі значення 2 і так до досягнення результату:


Налаштування зовнішнього вигляду шрифту
Ви можете змінити колір шрифту, змінивши колір об'єкта. Для цього перейдіть на вкладку Object та змініть параметрObject Color. Шрифт можна змінювати на вкладці шрифту:

Додавання тексту до гри (HUD)
Тепер, коли ми знаємо як додавати і налаштовувати текст, займемося створенням ігрової сцени, в якій буде присутній Head-Up Display (HUD). Також, Ви дізнаєтесь як форматувати довгі рядки тексту (створювати перенесення) за допомогою Python та логічних блоків.
Коли Ви відкриєте файл, то помітите, що в ньому вже присутні камера і куб з попереднього уроку. Також, для куба та камери було додано анімацію ходьби, щоб переміщення по сцені було більш реалістичним. На вкладці рендеру частота оновлення встановлена на рівні 60 кадрів в секунду для більш плавної анімації.
Натисніть P, щоб запустити гру. Переміщення по ній здійснюється за допомогою W, A, S, D + мишу, а також можна присідати за допомогою Ctrl.
У центрі сцени знаходиться коробка із боєприпасами. Як тільки Ви її підберете, вона зникне. Нашою метою виводитиме на екран кількість зібраних боєприпасів. Для цього нам знадобиться нова сцена, яка буде виступати як HUD: Перейменуйте нову сцену в “HUD “. Перейдіть на вигляд спереду і додайте камеру до сцени. Зсуньте камеру в бік від центру осі координат. Тепер перейдіть на вигляд з камери і додайте зліва зверху текст, як ми робили це на початку уроку. Змініть напис на “Ammo: ” і за бажанням налаштуйте роздільну здатність, колір та шрифт для тексту. Потім продублюйте напис, змістіть його вправо і змінітьїї на “0 “. Цей другий текст виступатиме в ролі лічильника щоразу, коли куб (наш персонаж) стикатиметься з боєприпасами.
З виділеним написом “0 ” у вікніLogic Editor на панелі властивостей додайте для нього нову властивість “Add Text Game Property “. Змініть тип Integer (ціле число). Після цього займемося налаштуванням виведення HUD у сцену з грою:


Додайте актуатор Message і підключіть його до того ж контролера, що і сенсор Collision. У полі Subject введіть “ammo “. Тепер при зіткненні з персонажем боєприпаси зникатимуть і надсилатимуть повідомлення “ammo “:

Перенос слів
Якщо у Вашій грі присутні довгідіалоги, швидше за все Ви захочете виводити їх параграфами. Можна зробити це вручну, додаючи “\n” у код скрипту або ж використовувати для цього окремий модуль. За допомогою цього модуля можна взяти довгі рядки та розділити їх на окремі лінії певної довжини. Використання моноширинних шрифтів дає найкращий результат, оскільки довжина лінії визначається за кількістю символів у ній, а не шириною лінії в пікселях.
Перейдіть до сцени HUD. Трохи нижче напису “Ammo” додайте новий об'єкт Text. Якщо потрібно, відредагуйте роздільну здатність. На вкладці шрифту змініть шрифт на моноширинний, наприклад Courier. У вікні Logic Edotor додайте нову властивість “Add Text Game Property ” та залиште тип String (рядок). Створіть новий текстовий файл, назвіть йогоtext_wrap і вставте в нього наступний скрипт:
import textwrap cont = bge.logic.getCurrentController() own = cont.owner startmessage = "Виберіть цей текст на текст в грі. own["Text"] = textwrap.fill(startmessage, 20)
Додайте сенсор Always і з'єднайте його з контролером Python, в якому вказано скрипт “text_wrap “. Запустіть гру та подивіться на результат. Зміннаstartmessage зберігає наш текст, який потрібно вивести. Зміннаown[“Text”] змінює об'єкт тексту та за допомогою функціїtextwrap.fill(startmessage, 20) виводить його рядками по 20 символів:

Виділіть напис і додайте сенсор Delay, контролер And і актуатор Visibility. Delay встановіть рівним200, а в актуаторі Visibility вимкніть пунктVisibility. Ця зв'язка каже, що після 200 "тиків" (по60 “тиків” = 1 секунда) напис зникне з екрана. Запустіть гру та перевірте роботу.
