Цель использования скриптовых языков в gamedev

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

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

Итак, почему же я решил написать эту статью на совершенно не профильную для меня тему? Несколько лет назад я случайно попал на собеседование на вакансию начинающий разработчик игр на android. Человек, который устроится на данное место, должен был писать скрипты на Lua, если мне не изменяет память, и допиливать движок на c++. Меня начали спрашивать, какое из двух данных направлений мне ближе, а я даже ответить ничего не смог: ведь я понятия не имел, зачем используются языки сценариев в разработке игр.

Итак, причины использования скриптовых языков при разработке игр:

  • Используя языки сценариев, вы можете изменять игровую логику, настройку игры и прочие параметры без необходимости перекомпиляции. Это очень круто, ведь перекомпиляция может занимать часы.
  • Скриптовые языки позволяют создать редактор уровней и модулей, которыми смогут пользоваться, как люди внутри компании, так и просто энтузиасты. Редактор уровней создаёт скрипт, который можно легко подгрузить в игру опять-таки без перекомпиляции.
  • Скриптовые языки — это просто, по крайне мере, это проще, чем с++. В связи с этим, места игры, которые не являются узкими, можно отдать на откуп начинающим программистам, которые обходятся дешевле компании.
  • Языком сценариев нельзя убить игру. То есть, он выполняется в своем интерпретаторе, и даже если скрипт содержит ошибки, то игра не упадёт, а продолжит работать.
  • Скриптовые языки позволяют переиспользовать игровой движок. То есть, скрипты позволяют разделить слои логики игры и логики игрового движка.

В заключении, пример использования Lua в C (код из википедии):

#include <stdio.h>
#include <stdlib.h>
#include <lua.h>
#include <lauxlib.h>
 
int main()
{
    lua_State *L = luaL_newstate();
    if (luaL_dostring(L, "function foo (x,y) return x+y end")) exit(1);
    lua_getglobal(L, "foo");
    lua_pushinteger(L, 5);
    lua_pushinteger(L, 3);
    lua_call(L, 2, 1);
    printf("Result: %d\n", lua_tointeger(L, -1));
    lua_close(L);
    return 0;
}

Категории: Программирование

Метки: ,