Проект Королівська битва.

Королівська битва


Battle Royales — це багатокористувацька гра, де суперники змагаються, поки не залишиться один гравець. Хоча кожна королівська битва різна, усі вони містять спосіб усунути гравців, наприклад заморозити когось або вибити з карти. Коли один гравець виживає або таймер закінчується, матч закінчується і починається новий раунд.

Жанр популярний, тому що раунди швидкі, легко підібрати та складно освоїти. Battle Royale можна налаштувати за допомогою різних ігрових механізмів, щоб зацікавити широку аудиторію, як-от унікальна зброя, перешкоди для платформ або візуальні теми.

Деякі популярні досвіди королівської битви в Roblox:

Island Royale від LordJurrd

Strucid від Frosted Studios

Приклад проекту

Королівська битва зазвичай складається з раундового циклу або серії фаз. У проекті, який ви створите, гравці проходять ігровий цикл нижче:
Intermission (Антракт)
Competition (Конкуренція)
Cleanup and Reset (Очищення та скидання)

Під час кожної фази відбувався інший набір завдань, які ви кодуватимете під час цієї серії. 
Intermission (Перерва) — гравці спілкуються або дивляться ігри у фойє до початку нового раунду.
Match (Матч) або Competition (Конкуренція) — таймер запускається, і гравці телепортуються на арену, де вони змагаються. Якщо гравець програє, він телепортується назад у лобі.
Cleanup and Reset (Очищення та скидання) — трапляється, коли залишився один гравець або закінчився таймер. Потім гравців телепортують назад у лобі, де цикл починається знову.

Розробка макету карти

Для ескізу мета полягає в тому, щоб створити дизайн, який потім можна відтворити в Studio. Арена на карті повинна бути достатньо різноманітною, щоб бути веселою, але також мати баланс, щоб не надавати користувачам несправедливої ​​переваги.

Напишіть короткий опис обстановки , як-от джунглі, покинута місячна база або середньовічний замок. На етапі полірування ви додасте деталі карти за допомогою цього параметра.

Визначте форму карти, а потім намалюйте її, використовуючи комбінацію 1-3 основних фігур (квадрат, прямокутник, восьмикутник). Навіть якщо ви уявляєте більш складну карту, наприклад острів, спробуйте розбити її на основні форми.

Ми рекомендуємо зробити симетричну карту, щоб легко збалансувати досвід. Коли ви набудете більше досвіду, ви зможете почати працювати з несиметричними формами карти, які може бути складнішим для справедливого балансування для всіх.

Додати спаунів гравців. Наразі використовуйте вісім спавнів, але ви завжди можете додати більше пізніше. У цьому прикладі для форми карти використовується квадрат.
Щоб зробити гравців менш передбачуваними та додати інтересу, розставте перешкоди, які змушують їх вибирати різні напрямки. Намалюйте 2-4 фігури (помаранчеві), які створюють вибір у пересуванні по арені. Додайте вторинні перешкоди (жовті), які заважають гравцям битися з самого початку.

Поради щодо макетів

Зберігайте дизайн простим, але привабливим. Оскільки гравці приймають рішення про долю секунди під час проходження рівня, дайте їм достатньо вибору, щоб кожен раз рівень відчувався по-різному, але не так, щоб вони не могли запам’ятати, як рухатися по карті, або відчувати себе приголомшеними.
Занадто просто
Збалансований
Потенційно складний

Створення карти

Швидко відтворіть мапу макета в Roblox Studio, використовуючи базові частини в процесі під назвою сірий бокс. Зосередьтеся на розробці веселої, зручної карти. Не витрачайте час на додавання текстур або дрібних деталей, як-от декоративний реквізит. Після того, як ви створили робочу карту з кодом, приділіть час розробці мистецтва, яке б відповідало налаштуванням карти.

Будівництво лобі

Перш ніж створити арену, побудуйте лобі, де гравці отримують досвід і спілкуються між матчами.
Створіть новий проект базової плити та видаліть базову плиту.

Побудуйте обгороджену стіною кімнату з місцем появи.

Увімкніть функцію прив’язки до сітки, щоб полегшити переміщення та вирівнювання об’єктів. Обертання частин під кутом 90 або 45 градусів також допоможе створити чистіші конструкції.


Помістіть усі частини вестибюля в папку під назвою «Лобі».

Арена і Spawns

На арені змагатимуться гравці. Будуючи арену, ви створюватимете сіре середовище за допомогою простих частин і кольорів. Середовище сірого ящика є наближенням остаточного дизайну, тому великий циліндр може бути деревом такого ж розміру в остаточній версії.

Цей процес, поширений у дизайні рівнів, дає дизайнерам робочий прототип для тестування та ітерації. Після того, як дизайн карти стане добре під час ігрового тестування, ресурси сірої коробки замінюються на 3D-ресурси та рельєф.

Створіть папку під назвою Arena. Усередині додайте підлогу для арени. Якщо ви використовуєте рельєф, поки що залиште папку порожньою.

Нижче наведено зразки арен.

Створіть вісім місць появи на карті. Створіть нову папку на Арені під назвою SpawnLocations і перемістіть туди вісім спавнів.

Коли ви розміщуєте спауни, пам’ятайте, що всі гравці з’являтимуться випадковим чином під час приєднання.

Graybox the Arena

Пам’ятайте, що сірий бокс – це наближення остаточного дизайну з використанням простих частин. Рівень із сірою рамкою має дати дизайнерам зрозуміти, як гравці пересуваються арене. Щоб створити арену, використовуйте додатковий будівельний набір або основні частини.

Імпортуйте набір Grayboxing із панелі інструментів. Сюди входять різноманітні загальні будівельні елементи, такі як сходи, пандуси та стіни.
Щоб отримати комплект Graybox натисніть на посилання нижче: 


Використовуючи комбінацію частин і ресурсів із набору grayboxing, створюйте перешкоди та бар’єри.

Нижче наведено кілька порад щодо дизайну карти.

Змінювати висоту – плоскі карти можуть повторюватися для гравців. Використовуйте пагорби, сходи та пандуси різної висоти, щоб урізноманітнити карту.
Побудуйте половину карти, а потім дублюйте – ця техніка дозволяє швидко побудувати симетричну карту. 
Перевірте масштаб. Під час будівництва подумайте про карту відносно гравця. Наприклад, наскільки просторою здається зона чи чи може гравець легко пройти через двері. Майте на увазі, що середній аватар має зріст 6,5 шпильок.

Тестування Graybox

Коли арена завершена, важливо побачити, чи весело та цікаво пересуватися.

Натисніть «Грати тут» на арені та перевірте карту.

Під час тестування самооцініть свою роботу за допомогою наведених нижче підказок і за потреби внесіть зміни для покращення.Чи можуть гравці пересуватися, не заплутавшись і не застрягши?
Чи підходить вам розмір карти? Чи є якісь зони, які здаються занадто порожніми? Чи знадобиться багато часу, щоб зустріти іншого гравця?
Щось виглядає дивно, як-от плаваючі чи зміщені частини?

Скрипт налаштувань гри

Створіть сценарій модуля під назвою GameSettings, щоб зберігати змінні, які використовуються іншими сценаріями, як-от тривалість матчу та перерви. Пізніше ці змінні використовуватимуться сценарієм GameManager.

У ServerStorage створіть папку під назвою ModuleScripts. У цій папці створіть новий сценарій модуля під назвою GameSettings.
local GameSettings = {}

-- Game Variables
GameSettings.intermissionDuration = 5
GameSettings.roundDuration = 10
GameSettings.minimumPlayers = 2
GameSettings.transitionTime = 5

return GameSettings

Сценарій MatchManger

Другим сценарієм, підключеним до GameManager, є MatchManager. Цей скрипт керує такими завданнями, як запуск таймера або скидання гравців після закінчення матчу.

local MatchManager = {}

function MatchManager.prepareGame()
print("Game starting!")
end

return MatchManager

Скрипт GameManager

Цей сценарій є звичайним серверним сценарієм, тому помістіть його в ServerScriptService, а не в папку зі сценаріями модуля. Фактичний ігровий цикл буде відбуватися в циклі while true do.

У ServerScriptService створіть новий сценарій під назвою GameManager.
-- Services
local ServerStorage = game:GetService("ServerStorage")
local Players = game:GetService("Players")

-- Module Scripts
local moduleScripts = ServerStorage:WaitForChild("ModuleScripts")
local matchManager = require(moduleScripts:WaitForChild("MatchManager"))
local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))

-- Main game loop
while true do
repeat
print("Starting intermission")
task.wait(gameSettings.intermissionDuration)
until #Players:GetPlayers() >= gameSettings.minimumPlayers

print("Intermission over")
task.wait(gameSettings.transitionTime)

matchManager.prepareGame()
end


Тестування багатокористувацьких ігор

Прямо зараз, щоб код запустив readyGame() , йому потрібно вийти з циклу повторення. Але для цього має бути більше ніж один гравець. Це означає, що якщо ви використовуєте кнопку playtest, функція ніколи не запускатиметься, оскільки ви єдиний гравець у грі (якщо ваш мінімальний гравець не один). Щоб перевірити це, вам потрібно змоделювати багатокористувацьку гру.

Запуск локального сервера

Щоб протестувати код, який потребує більше одного гравця, створіть локальний сервер. У той час як опубліковані ігри зазвичай знаходяться на серверах Roblox, локальний сервер симулює багатокористувацьку гру на вашому комп’ютері за допомогою імітованих гравців.

Щоб запустити локальний сервер, на вкладці «Тестування» > «Клієнти та сервери» > установіть у розкривному списку гравців кількість гравців у змінній minimumPlayers GameSetting. У цьому уроці беруть участь 2 гравці.

Натисніть «Пуск», щоб запустити сервер.

Зачекайте кілька секунд, поки сервер налаштується. Окрім початкового вікна Studio, відкриється кілька вікон. Можливо, вам знадобиться дозволити доступ до Roblox Studio через брандмауери або інше програмне забезпечення безпеки в Інтернеті.

Поради щодо усунення несправностей

На даний момент ви не можете побачити тестові сервери, спробуйте одну з наведених нижче дій.Якщо у вас виникли проблеми із запуском сервера, перегляньте статтю Проблеми з брандмауером і маршрутизатором.
Встановіть невелику кількість гравців, наприклад 2 або 3.
Якщо проблему не вирішено, спробуйте перезапустити Studio або перезавантажити комп’ютер.

Тестування на локальному сервері

Під час запуску сервера ви побачите кілька вікон. Кожен з них представляє окрему частину відносин сервер/клієнт.Сервер (зелена рамка) запускає гру.
Клієнт (сині рамки) імітує досвід гравця.
Сервер із зеленою рамкою
Клієнт із синьою рамкою

Запустивши сервер, ви можете перевірити, чи спрацював код.

Знайдіть вікно сервера із зеленою рамкою. Перевірте оператор друку, який викликається зі сценарію MatchManager. Оскільки існує цикл повторення, ви побачите повторення тих самих операторів друку.

Після завершення тестування в будь-якому вікні закрийте сервер за допомогою кнопки Очистити. Це закриє всі вікна сервера та клієнта та поверне вас до звичайного вікна Studio.

Поради щодо усунення несправностей

На цьому етапі, якщо заплановані оператори друку не з’явилися, спробуйте одну з наведених нижче дій.
Перевірте, чи такі функції, як pripraviГаме(), знаходяться в межах циклу while true do.
Якщо друк із MatchManager не спрацював, перевірте деякі звичайні способи усунення несправностей із скриптами модулів, як-от переконайтеся, що сценарій MatchManager у GameManager або що readyGame() додано до таблиці цього модуля.