Коли я б використовував «скрипти» або «сценарії» в грі, на відміну від основної мови?


13

Терміни сценарії та сценарії, як видається, використовуються взаємозамінно на біржі стека розвитку ігор, але, окрім читання питань щодо вибору мови сценаріїв, я не розумію взаємозв'язку між сценаріями та сценарієм та основною мовою. Що зазвичай робить сценарій, коли він буде використаний, і чи сценарії в деяких контекстах (як визначено ігровими програмістами) відрізняються від мови сценаріїв?



@Tetrad Дякую за посилання, але я думаю, що інше питання обговорює більше фундаментального архітектурного питання "чому", на відміну від того, що і коли.

2
"що" і "коли" будуть конкретні для ваших випадків використання. "Чому" дає вам здібності до прийняття рішень. Без конкретики це питання є дупе (на моїх очах).
Тетрад

Відповіді:


15

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

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

Це має величезні переваги для команди розробників, декілька з яких ви можете перелічити далі:

  • Мови сценаріїв зазвичай керуються пам'яттю, тому вам не доведеться турбуватися про розподіли
  • Вони, як правило, невільно введені мови, що усуває необхідність переконатися, що ви використовуєте тип змінної для того, що ви робите, просто зробіть змінну і перейдіть з нею.
  • Самі мови часто дуже спрощені, одночасно надаючи трохи контролю людям, які не є програмістами
  • Для зміни сценаріїв не потрібно перекомпілювати основний двигун.
  • Сценарій проти кодування часто скорочує час, необхідний для дуже ітеративної настройки логіки гри.
  • Залежно від дизайну та мови, ви можете часто перезавантажувати сценарій, поки гра працює для ще простішої настройки / тестування.

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


9

Використання сценаріїв має багато переваг перед "основною мовою". Деякі з них включають:

  • Переміщення (більше) вмісту від основних розробників до виконавців, звільнення розробників ядра для вирішення завдань від ігрових завдань
  • Сценарії, як правило, пісочниці, не можуть зробити в ньому нічого дійсно небезпечного
  • Модифікація сценаріїв не вимагає перекомпіляції та повторного виконання гри

Чи можете ви надати свій перший кутовий приклад прикладу одного функціоналу, який буде переміщено до сценарію, який художники можуть редагувати?

@Brian Reindel Прикладами можуть бути статистика зброї / NPC, AI та карти / рівні.
Хакворт

1
@Hackworth Ви хочете сказати, що програмування AI виконується художниками? Сценарій, який би виконував художник, містив би сценарії для анімації та візуалізації 3D-об'єктів тощо.
KRB

3
Художникам не слід нічого програмувати. Ви відокремлюєте двигун від ігрової логіки заради модульності , а не для того, щоб перевантажити розвиток людям, чиї сильні сторони є в іншому місці.
Джон Перді

1
@James добре, справа в тому, що вони роблять "легке" програмування, але вони знаходяться в "контентному" таборі. Тож термінологія хитра. =)
Jari Komppa

6

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

Зазвичай відбувається те, що якою б мовою ви не користувалися (наприклад, Lua, Angelscript), ця мова, як правило, має деякі засоби, які дозволяють програмісту двигуна виставляти функції двигуна або навіть цілі класи екземпляру "двигуна сценаріїв", який зараз працює. .

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

void SpawnZombie(int x, int y, int hp /* whatever else */)
{
   //...
}

Мова сценаріїв, якою ви користуєтесь зараз, дозволяє вам піднести цю функцію до сценарію, який виконується. Це фактично означає, що ви можете відкрити текстовий файл, написати "SpawnZombie (200,300,1337)", і як тільки ваш двигун виконує код, Zombie породжує в цьому місці.

В інших відповідях вже наведено кілька хороших прикладів того, як це зазвичай використовується, але вони залишають один момент, який я вважаю дуже важливим:

Такі види сценаріїв дуже просто налагоджують або тестують ігровий процес під час виконання.

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

Підтримуючи сценарій підтримки (якщо ви вже маєте певний метод введення тексту під час виконання, наприклад, консоль налагодження), ви просто набираєте "SpawnZombie (333 444 555)" і бачите, як це виглядає.

Таким же чином ви могли б нерестувати зброю, транспортні засоби, завантажувати різні карти, змінювати значення деяких речей у грі тощо, встановлювати ворогів, тому що ви не хочете витрачати час на потрапляння на частину, яка повинна бути перевірений і т.д.

Це дозволить заощадити багато разів у більш складних іграх.


2

1) Сценарії часто змінювати набагато простіше, ніж код.

2) Сценарії часто змінюються на місцях. Це дозволяє модифікувати гру.


Тож було б справедливо сказати, що тоді ваші сценарії побудовані з мов, які не складені так, щоб їх редагував хтось?

@Brian Reindel: Загалом, так.
Лорен Печтел

2

Більшість мов сценаріїв набагато виразніше, ніж мова в основній системі. Часто двигун написаний порівняно низьким рівнем мови (наприклад, C ++) з міркувань продуктивності, але код гри не повинен бути таким ефективним, тому пріоритети зміщуються на можливість легко виражати функціональність.

Наприклад, динамічне та статичне введення тексту. Ще один приклад: збирання сміття та ручне управління пам’яттю.


0

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

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

Код гри

Update Loop
{
    if (CarExplodeAnimation.FinalFrame == true)
    {
        SceneGraph.Remove(Car);
        Message("You have destroyed the car.";
    }
    else
    {
        CarExplodeAnimation.AdvanceToNextFrame();
    }

}

Код сценарію

PlayAnimation(ShipExplode)  // blocks until animation completes
Message("You have destoryed the car.")

Подивіться, наскільки менше кодування повинен зробити дизайнер, якщо ви використовуєте мову сценаріїв?

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

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.