Unity — это игровой движок, в котором логику игр и приложений программируют на языке C# (произносится «си шарп»). Другого языка для скриптов у движка сейчас нет: варианты вроде UnityScript и Boo, которые встречаются в старых статьях, из движка удалены. Слаг «юнити» в адресе — это просто русское написание названия Unity.
Содержание
Ниже отвечаю коротко на главный вопрос, показываю, почему язык именно один, из чего состоит проект Unity, и разбираю первый рабочий скрипт на C# с типичными ошибками новичка. В конце — путь старта в 2026 году и заметка про лицензию.
На каком языке пишут в Unity
Короткий ответ: на C#. Это единственный язык, на котором пишут скрипты в Unity «из коробки», без сторонних плагинов. Когда спрашивают «на каком языке Unity» или «unity c#» — речь всегда про C#.
Сам движок Unity вышел в 2005 году и работает кроссплатформенно: одну игру можно собрать под ПК, мобильные, консоли и веб. Но выбирать язык, как в исходной версии этой статьи, не нужно — выбор давно сведен к одному.
Ваш код на C# движок сначала компилирует в управляемые (managed) сборки, а исполняет их либо через среду выполнения Mono (с JIT-компиляцией там, где она разрешена), либо через IL2CPP. IL2CPP преобразует промежуточный код в C++ и заранее собирает нативный бинарник (AOT); он нужен прежде всего для поддержки платформ и обхода ограничений на JIT, а прирост скорости — возможный, но не единственный и не гарантированный эффект. Для новичка это деталь: пишете вы всегда на C#, а как код исполняется — забота движка.
Куда делись UnityScript, Boo и «другие языки»
Старые руководства перечисляют для Unity целый список языков. Это устаревшая информация, и здесь легко запутаться, поэтому разведу термины явно.
Раньше движок поддерживал два дополнительных языка. UnityScript — это был собственный язык Unity, синтаксисом похожий на JavaScript, из-за чего его часто звали просто «JS». Это не настоящий JavaScript и не тот язык, на котором пишут сайты, — отдельный язык движка. Boo — язык с синтаксисом в духе Python.
Оба удалены. Boo убрали еще в эпоху Unity 5, поддержку UnityScript прекратили около 2017 года и позже вырезали его компилятор. Сегодня писать на них нельзя. Остальное из старых списков (Lua, Python, Rust) языками скриптов Unity никогда официально не было.
| Язык | Статус в Unity сейчас |
|---|---|
| C# | Основной и единственный язык скриптов «из коробки» |
| UnityScript (похож на JavaScript) | Удален (поддержка прекращена около 2017 года) |
| Boo | Удален (в эпоху Unity 5) |
| C/C++ | Не для скриптов; через нативные плагины (DLL, .so) для быстрых модулей |
| Lua | Только через сторонние решения (например, MoonSharp), обычно для модов |
| Python, Rust и другие | Для скриптов игры официально не поддерживаются |
Вывод из таблицы простой: учить надо C#, а C++ и Lua — это узкие сценарии на потом, а не альтернатива основному языку.
Из чего состоит проект Unity: сцены, GameObject, компоненты
Чтобы код на C# было куда прикрутить, разберу устройство проекта на трех понятиях.
Сцена (Scene) — это отдельный экран или уровень: меню, локация, бой. Игра состоит из одной или нескольких сцен, между которыми переключаются.
GameObject — любой объект на сцене: персонаж, камера, свет, кнопка. Сам по себе GameObject почти пустой — это контейнер.
Компонент (Component) — то, что навешивают на GameObject и что задает его поведение и вид: Transform (позиция и поворот), Renderer (как объект рисуется), Collider (физические границы). Ваш скрипт на C# — тоже компонент.
Цепочка такая: сцена содержит GameObject, на GameObject висят компоненты, один из компонентов — ваш C#-скрипт. Скрипт становится компонентом, когда его класс наследуется от MonoBehaviour — это базовый класс Unity, дающий доступ к жизненному циклу объекта.
Первый скрипт на C#: вращаем объект
Вот минимальный рабочий скрипт целиком. Он заставляет объект плавно вращаться. Создайте в проекте файл Rotator.cs, вставьте код и перетащите скрипт на любой 3D-объект на сцене (например, на куб):
using UnityEngine;
// Класс наследуется от MonoBehaviour, поэтому его можно
// повесить на GameObject как компонент.
public class Rotator : MonoBehaviour
{
// [SerializeField] показывает поле в инспекторе Unity, но оставляет
// его private - состояние класса не открывается наружу без нужды.
[SerializeField] private float speed = 90f; // скорость вращения, градусов в секунду
// Update вызывается движком автоматически каждый кадр.
void Update()
{
// Поворачиваем объект вокруг оси Y.
// Умножение на Time.deltaTime делает скорость
// одинаковой при любом числе кадров в секунду.
transform.Rotate(0f, speed * Time.deltaTime, 0f);
}
}
Ожидаемый результат: после нажатия Play куб начнет ровно вращаться вокруг вертикальной оси примерно на 90 градусов в секунду (полный оборот за 4 секунды). В инспекторе появится поле Speed, и вращение можно ускорить или замедлить, не трогая код.
Что здесь важно по строкам. MonoBehaviour превращает класс в компонент. Update() — метод, который движок сам зовет на каждом кадре, туда кладут логику, работающую постоянно. Для однократной настройки при старте есть метод Start(). Time.deltaTime — время, прошедшее с прошлого кадра; на него умножают, чтобы движение не зависело от частоты кадров.
Три частые ошибки новичка
Ошибка 1: имя класса не совпадает с именем файла. Файл назвали Cube.cs, а класс внутри — Rotator. Unity не даст повесить скрипт на объект и покажет ошибку в духе:
Can't add script component because the script class cannot be found.
Make sure there are no compile errors and the file name and class name match.
Исправление: имя файла и имя публичного класса должны совпадать. Класс Rotator — файл Rotator.cs.
Ошибка 2: забыли Time.deltaTime. Пишут поворот без множителя времени:
transform.Rotate(0f, speed, 0f); // без Time.deltaTime
Результат: при speed = 90 объект поворачивается на 90 градусов не за секунду, а за КАЖДЫЙ кадр. При 60 кадрах в секунду это 5400 градусов в секунду — куб превращается в мельтешение, и скорость еще и скачет на разных компьютерах. Исправление — умножить на Time.deltaTime, как в рабочем примере выше.
Ошибка 3: скрипт не прикреплен к объекту. Код написан и компилируется без ошибок, но на сцене ничего не происходит. Причина: скрипт лежит в проекте, но не висит ни на одном GameObject, поэтому Update() не вызывается. Исправление — выделить объект и перетащить на него скрипт или нажать Add Component и выбрать его по имени.
С чего начать в 2026 году
Дорожная карта до первого работающего прототипа:
- Скачать Unity Hub с официального сайта — это менеджер, который ставит и обновляет версии движка.
- Через Hub установить актуальную LTS-версию Unity — на сентябрь 2026 года это Unity 6.3 LTS (6000.3); LTS означает долгую поддержку и меньше сюрпризов, чем в свежих экспериментальных сборках. Пример со скриптом ниже проверен именно на этой версии.
- Поставить редактор кода: Visual Studio, JetBrains Rider или Visual Studio Code с расширением для C#.
- Создать проект из шаблона (2D или 3D) и повторить пример со скриптом выше.
- Подтянуть основы C#: переменные, методы, классы, условия и циклы — без них дальше будет тяжело.
Честный срок: до уверенного первого прототипа — недели, до готовности делать свои небольшие игры — месяцы регулярной практики, а не «несколько дней».
Если не получилось: скрипт не вешается на объект — проверьте совпадение имени файла и класса (ошибка 1); объект стоит на месте — скрипт не прикреплен (ошибка 3); в консоли красные ошибки — откройте их двойным кликом, компилятор укажет файл и строку.
Лицензия и Runtime Fee
Для старта Unity бесплатен: на 16 сентября 2026 года тариф Unity Personal доступен физлицам и небольшим организациям, у которых выручка и привлеченное финансирование за последние 12 месяцев меньше 200 000 долларов; выше идут платные подписки по числу мест. Условия могут меняться, поэтому перед коммерческим релизом проверьте актуальную страницу тарифа Unity.
Отдельно про Runtime Fee — плату за установки игры, которую Unity анонсировала в 2023 году и которая вызвала большой скандал в индустрии. Unity отменила ее 12 сентября 2024 года; по официальному FAQ сбор так и не был внедрен и не применяется ни к Unity 6, ни к другим версиям — движок остался на обычных подписках.
Выводы
- Язык Unity сегодня один — C#; выбирать язык, как советуют старые статьи, не нужно.
- UnityScript (похожий на JavaScript) и Boo из движка удалены; это не альтернативы, а история.
- C++ и Lua применяют точечно — нативные плагины и моды, а не основная разработка вместо C#.
- Проект строится из сцен, объектов (GameObject) и компонентов; скрипт на C# становится компонентом через наследование от
MonoBehaviour. - Три ошибки новичка предсказуемы: имя файла не как класс, забытый
Time.deltaTime, неприкрепленный скрипт.
Где применяется / связь с практикой
C# в Unity — это все игровое поведение: движение персонажа, стрельба, интерфейс, сохранения, простейший ИИ противников. Тот же C# используют и вне игр — в приложениях на .NET, так что навык переносимый.
Освойте тему на практике
Освоить движок и язык на реальных проектах, а не на разрозненных примерах, можно на курсе Unity Game Developer. Basic в Otus — с нуля до уровня Junior. Практикующим разработчикам, которым нужны сложные проекты, ближе продвинутый курс по Unity. Посмотреть уровень и формат занятий до оплаты помогут бесплатные вебинары — на них разбирают конкретные задачи и отвечают на вопросы.
Смежные темы: Основы GameDev или как создаются игры, План создания собственной игры, Как научиться программировать с нуля: с чего начать.
FAQ
Нужно ли знать C++, чтобы делать игры на Unity?
Нет. Обычная разработка идет полностью на C#. C++ нужен только для нативных плагинов — производительных модулей, которые подключают к движку; новичку это не требуется.
Можно ли делать игры в Unity без программирования?
Частично да. У Unity есть официальный пакет Visual Scripting (графы), плюс готовые компоненты и ассеты из Asset Store — на них собирают прототипы и часть проектов без единой строки кода. Но для сложной логики, интеграций, оптимизации и самостоятельной разработки обычно все равно понадобится C# — это основной и самый универсальный путь.
Какой редактор кода выбрать для C# в Unity?
Подойдут Visual Studio, JetBrains Rider или Visual Studio Code с расширением для C#. Функционально для старта разницы почти нет; Unity Hub при установке предлагает вариант по умолчанию.



