Когда я буду использовать «скрипты» или «скрипты» в игре, в отличие от основного языка?

13

Термины сценарии и сценарии, по-видимому, используются взаимозаменяемо в Exchange Stack Exchange, но кроме чтения вопросов о выборе языка сценариев, я не понимаю взаимосвязи между сценариями и сценариями, а также основным языком. Что обычно делает сценарий, когда он будет использоваться, и отличаются ли сценарии в некоторых контекстах (согласно определению программистов игры) от языка сценариев?

тетрада
источник
4
Возможно боян: gamedev.stackexchange.com/questions/2913/...
Тетрадь
@Tetrad Спасибо за ссылку, но я думаю, что в другом вопросе обсуждается вопрос о фундаментальной архитектуре «почему», а не о том, что и когда.
2
«что» и «когда» будут характерны для ваших случаев использования. «Почему» дает вам способность принимать решения. Без конкретики этот вопрос является дураком (на мой взгляд).
Тетрад

Ответы:

15

Скрипты написаны для скриптового языка. Люди могут использовать слова в сленговых предложениях, чтобы получить путаницу, на которую вы ссылаетесь, но попросить кого-нибудь об определениях скрипта, языка сценариев и языка сценариев, и вы получите что-то вроде: Сценарии - это процесс написания сценариев с использованием языка сценариев.

Когда вы встраиваете язык сценариев в игровой движок или основной язык, на который ссылаетесь, вы выставляете не только объекты внутри игрового движка, но и позволяете писать логику для игрового движка. Следует также отметить, что это превращает вашу игру в виртуальную машину, так как языки сценариев редко компилируются в машинный язык и вместо этого переводятся в форму байтового кода и интерпретируются во время выполнения вашим игровым движком.

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

  • Языки сценариев обычно управляются памятью, поэтому вам не нужно беспокоиться о распределении
  • Обычно это свободно типизированный язык, который устраняет необходимость убедиться, что вы используете тип переменной для того, что вы делаете, просто создайте переменную и следуйте ей.
  • Сами языки часто очень упрощены, хотя и предоставляют немного контроля людям, которые не являются программистами.
  • Изменение сценариев не требует перекомпиляции ядра.
  • Скрипты против кодирования часто сокращают время, необходимое для итеративной настройки игровой логики.
  • В зависимости от дизайна и языка, вы можете часто перезагружать скрипт во время игры для еще более легкой настройки / тестирования.

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

Джеймс
источник
9

Использование сценариев имеет много преимуществ перед «основным языком». Некоторые из них включают в себя:

  • Перемещение (больше) контента от основных разработчиков к художникам, освобождение основных разработчиков для задач движка из задач геймплея
  • Скрипты, как правило, помещаются в «песочницу», в них не может быть ничего действительно опасного
  • Модификация скриптов не требует перекомпиляции и повторного выполнения игры
Яри ​​Комппа
источник
В качестве первого пункта вы можете привести пример функциональности, которая была бы перемещена в сценарий для редактирования художниками?
@Brian Reindel Примерами могут служить статистика оружия / NPC, AI и карты / уровни.
Хакворт,
1
@ Хэкворт Вы говорите, что программирование ИИ выполняется художниками? Сценарии, которые будут выполнены художником, будут включать сценарии для анимации и рендеринга трехмерных объектов и тому подобное.
KRB
3
Художники не должны программировать что-либо. Вы отделяете движок от игровой логики ради модульности , а не ради разгрузки разработки людям, чьи сильные стороны находятся в другом месте.
Джон Перди
1
@ Джеймс хорошо, дело в том, что они занимаются «легким» программированием, но они находятся в лагере «контента». Так что терминология хитрая. =)
Яри ​​Комппа
6

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

Обычно происходит то, что независимо от того, какой язык вы используете (например, Lua, Angelscript), этот язык обычно имеет некоторые средства, которые позволяют программисту движка выставлять функции движка или даже целые классы экземпляру «движка сценариев», который работает в данный момент. ,

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

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

Используемый вами сейчас язык сценариев позволяет предоставить эту функцию запущенному анализатору сценариев. Это фактически означает, что вы можете открыть текстовый файл, написать «SpawnZombie (200,300,1337)», и как только ваш движок выполнит код, в этом месте появится Zombie.

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

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

Допустим, вы хотите найти идеальный способ разместить зомби на карте, чтобы он оказывал максимальное влияние на игрока, когда тот его обнаружил. Без поддержки сценариев вам пришлось бы выйти из приложения, изменить некоторые магические числа в коде, перекомпилировать и протестировать его.

С поддержкой сценариев (при условии, что у вас уже есть какой-то метод ввода текста во время выполнения, например, консоль отладки), вы просто набираете «SpawnZombie (333,444,555)» и смотрите, как он выглядит.

Таким же образом вы можете создавать оружие, транспортные средства, загружать разные карты, изменять значения некоторых вещей в игре и т. Д., Убивать врагов, потому что вы не хотите тратить время на то, чтобы добраться до нужной части. проверено и т. д.

Это сэкономит вам кучу раз в более сложных играх.

TravisG
источник
2

1) Сценарии часто намного легче изменить, чем код.

2) Скрипты часто модифицируются на месте. Это позволяет моддинг игры.

Лорен Печтель
источник
Так что было бы справедливо сказать, что ваши сценарии тогда построены на языках, которые не скомпилированы так, чтобы кто-то мог их редактировать?
@ Брайан Рейндель: В общем, да.
Лорен Печтел
2

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

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

jhocking
источник
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.")

Посмотрите, насколько меньше кода должен делать дизайнер, если вы используете язык сценариев?

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

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

Вместо этого вы хотите, чтобы ваш дизайнер делал что-то вроде этого: щелкните правой кнопкой мыши автомобиль в Редакторе карт, выберите Вставить сценарий и введите коды сценариев. Там нет возиться с критическими исходными кодами игрового движка.

разработчик
источник