В игровых движках создание инвентаря и интерфейса пользователя (HUD) играет важную роль в обеспечении взаимодействия игрока с миром игры. В PlayCanvas можно создать как простой, так и сложный инвентарь, а также реализовать отображение различных элементов HUD, таких как здоровье, стамина, предметы и прочее. В данной статье будет рассмотрен процесс построения инвентаря и HUD через скрипты в PlayCanvas с использованием его API на языке JavaScript.
PlayCanvas — это мощный и гибкий движок для создания 3D-игр и приложений в браузере. Он предлагает ряд инструментов для работы с графикой, физикой, анимацией и взаимодействием с пользователем, включая возможность создания интерфейсов.
Интерфейс в PlayCanvas можно разделить на два основных компонента:
Для создания инвентаря и HUD в PlayCanvas проект будет включать:
Структура проекта может выглядеть следующим образом:
HUD обычно состоит из нескольких элементов: текстов, индикаторов, полос здоровья, отображения очков и других статических или динамических элементов. Для начала создадим базовый HUD, который будет отображать здоровье игрока и количество собранных предметов.
В PlayCanvas UI элементы создаются с помощью компонента Screen. Этот компонент привязывается к камере, и все элементы интерфейса будут отображаться на экране в 2D.
Для создания UI добавим новый объект в сцену и прикрепим к нему компонент Screen:
var screen = new pc.Entity();
screen.addComponent('screen', {
referenceResolution: new pc.Vec2(1920, 1080)
});
app.root.addChild(screen);Чтобы добавить текстовую метку, например для отображения здоровья, нужно создать новый элемент Text и привязать его к объекту Screen:
var healthLabel = new pc.Entity();
healthLabel.addComponent('element', {
type: 'text',
text: 'Health: 100',
fontSize: 32,
color: new pc.Color(1, 0, 0),
pivot: new pc.Vec2(0, 1), // Позиционирование сверху
anchor: new pc.Vec4(0, 1, 0, 0) // Позиция на экране
});
screen.addChild(healthLabel);Для динамического обновления элементов HUD нужно написать скрипт, который будет изменять текст в зависимости от изменений в игре (например, при изменении здоровья или количества собранных предметов).
Создадим скрипт, который будет обновлять значение здоровья игрока:
var HUD = pc.createScript('hud');
HUD.prototype.initialize = function() {
// Инициализация переменных
this.health = 100;
this.healthLabel = this.entity.findByName('HealthLabel');
};
HUD.prototype.update = function(dt) {
// Обновление текста на HUD
this.healthLabel.element.text = 'Health: ' + this.health;
};
HUD.prototype.decreaseHealth = function(amount) {
this.health -= amount;
if (this.health < 0) this.health = 0;
};
Этот скрипт будет обновлять текстовое значение здоровья в реальном
времени. Вызов decreaseHealth уменьшит здоровье, а
update обновит текст в HUD.
Инвентарь представляет собой коллекцию предметов, которыми управляет игрок. В PlayCanvas инвентарь можно реализовать через массивы или объекты для хранения данных о каждом предмете, а затем отображать их с помощью UI.
Для начала создадим структуру данных для инвентаря. Пусть это будет массив объектов, где каждый объект будет представлять отдельный предмет, его название и количество.
var Inventory = pc.createScript('inventory');
Inventory.prototype.initialize = function() {
// Структура инвентаря
this.items = [
{ name: 'Potion', count: 0 },
{ name: 'Sword', count: 1 },
{ name: 'Shield', count: 1 }
];
// UI для отображения инвентаря
this.inventoryLabel = this.entity.findByName('InventoryLabel');
};
Inventory.prototype.update = function(dt) {
// Обновление UI инвентаря
var inventoryText = 'Inventory:\n';
for (var i = 0; i < this.items.length; i++) {
inventoryText += this.items[i].name + ': ' + this.items[i].count + '\n';
}
this.inventoryLabel.element.text = inventoryText;
};
Inventory.prototype.addItem = function(itemName, count) {
var item = this.items.find(item => item.name === itemName);
if (item) {
item.count += count;
} else {
this.items.push({ name: itemName, count: count });
}
};
Теперь, чтобы инвентарь обновлялся в реальном времени, можно создать
функцию добавления предметов в инвентарь. Например, при сборе предметов
в игре, мы будем вызывать функцию addItem.
var inventory = this.entity.script.inventory;
inventory.addItem('Potion', 1);
Этот код добавит одну «Зелье» в инвентарь и обновит UI, чтобы отобразить новое количество.
Интерфейс пользователя и инвентарь могут быть связаны, чтобы взаимодействие с предметами или изменения в игре влияли на оба элемента. Например, можно обновлять здоровье игрока при использовании предметов из инвентаря.
var player = this.entity; // Игрок
var inventory = player.script.inventory;
var hud = player.script.hud;
// Пример использования предмета из инвентаря
inventory.addItem('Potion', -1); // Используем одно зелье
hud.decreaseHealth(20); // Уменьшаем здоровье
Для улучшения визуальной составляющей интерфейса можно добавить анимации появления/исчезновения элементов HUD или инвентаря. В PlayCanvas это можно реализовать с помощью переходов между состояниями UI-элементов, изменяя их прозрачность или масштаб.
Пример плавного появления текста HUD:
var fadeIn = new pc.Tween(this.healthLabel.element)
.to({ opacity: 1 }, 1, pc.EaseInOut);
fadeIn.start();
Это создаст плавный эффект появления элемента.
Реализация инвентаря и HUD в PlayCanvas с использованием скриптов на JavaScript предоставляет множество возможностей для создания динамичных и интерактивных интерфейсов. С помощью элементов UI, таких как текстовые метки и кнопки, и взаимодействия с игровыми объектами можно создавать интуитивно понятные и функциональные интерфейсы. Разработчики могут кастомизировать и расширять эти элементы в зависимости от требований игры, создавая уникальные и эффектные интерфейсы для различных типов проектов.