

Делаем PC игру вместе
Геннадий Гурьянов
Иллюстрация на обложке Геннадий Гурьянов
Иллюстратор Геннадий Гурьянов
© Геннадий Гурьянов, 2026
© Геннадий Гурьянов, иллюстрации, 2026
ISBN 978-5-0069-8512-4
Создано в интеллектуальной издательской системе Ridero
«Делаем PC игру вместе»

О книге
В книге рассказывается о создании программного ядра однопользовательской 3д компьютерной игры в жанре приключения, квест-головоломки от первого лица в среде разработки Unity3d для персонального компьютера.
Представлен полный цикл создания с нуля до работоспособной версии игры, без графического наполнения. Книга адресована школьникам и начинающим.
Автор книги является разработчиком компьютерных игр с 2006 года, за его плечами большое количество выпущенных проектов, в том числе сделанных в одиночку, например, компьютерные игры в жанре приключения и квест AA-класса (double A) «Тайная Доктрина» и «Рыба». Все изображения представленные в книге являются собственными изображениями автора.

От автора
Уважаемый читатель!
Современные компьютерные технологии открыли невиданную ранее возможность для реализации творческих идей с яркими художественными и смысловыми возможностями. У вас теперь есть возможность творить красоту, захватывающие добрые истории, фантастические красочные выкрутасы и туманную задумчивость!
Будучи создателем нескольких игр для персонального компьютера сделанных в одиночку – 4 маленьких и 2х очень больших, я, автор этой книги, покажу вам дорогу каждодневной радости творчества и вашего успеха. Создавайте ваши миры, дарите их людям, сейте в людские души трепет вашего сердца и добрые повествования…
Друзья! Предостерегаю вас от изготовления суррогата «ужастиков», «хорроров», насилия, мрака и тупости.
Берите ответственность смело за те идеи, которые подскажет вам сердце!
Добро пожаловать в мир творчества!
Научимся создавать компьютерную игру вместе!
1. Что делаем?
Структура этой книги сделана таким образом, что ее предлагается читать без пропускания глав. Главы в этой книге сделаны умозрительно и в определенной степени условны.
В книге мы будем делать основу компьютерной игры с головоломками, бродилку в трехмерном пространстве, игру для персонального компьютера, для одного играющего. То есть это игра будет не с плоскими объектами – «плоскатиками», а точно также как в настоящем мире – 3d – с трехмерными. В такой игре события развиваются путем решения головоломок, загадок. Сокращение 3d (или 3д) означает «3 dimensional’ на английском языке, что переводится как трехмерный, т.е. 3х мерное пространство. Это такое пространство, в котором есть 3 измерения: длина, высота и ширина, например то, в котором мы с вами живем в реальной жизни. Это также означает, что в такой игре можно ходить, бегать, прыгать и даже летать как в настоящей жизни. Все прочие игры, которые называют 2d означают, что их игровое пространство плоское или двумерное, в нем есть только длина и высота или наоборот: длина и ширина, или вообще высота и ширина. К примеру, плоское 2d пространство это листок бумаги.
Как работает компьютерная игра? Умозрительно ее можно разделить на две части: визуальная часть – все то, что видит игрок (картинки, художественное оформление, мультипликации, объекты, место нахождения игрока и т.д.) и программная часть (какие события есть в игре и как они происходят). Эти две части могут работать независимо друг от друга. Например, если у нас есть некоторое количество 3д моделей, то мы можем их расставить определенным образом – красиво, и такая трехмерная сцена уже может сама по себе радовать глаз. И по другому, имея программную часть, на нее можно, выражаясь весело – повесить практически любую визуальную часть, от стилизованной в виде кубиков до детально проработанных предметов и окружающей среды.
2. В чем «собака зарыта?»
Среда разработки или в простонародье «движок» в процессе создания игры выполняет роль кастрюли в которой варится суп. Эта «кастрюля» имеет определенные размеры, материал из которого она сделана, и она держит в себе весь суп. Имея разные продукты для супа (капуста, морковь, картофель, лук) их можно положить в разные по форме и размеру «кастрюли», и даже в очень маленькие, но суть «супа» от этого не поменяется. На сегодняшний день самыми популярными «движками-кастрюлями» у всех на слуху являются два: Unreal Engine и Unity3d Engine. Данная книга рассказывает о создании игры в среде Unity3d. Существует мнение, что среда разработки Unity3d упрощена и создана для разработки примитивных телефонных игр. Это не так. Если мы знаем, что хотим получить, то в Unity3d можно достичь высочайших графических результатов. Также широко распространено мнение о том, что только среда разработки Unreal Engine способна дать «фотореалистичный» результат игр и программ. Это ошибочное мнение основано на конкурентной рекламе, и не более. Что же касается самого главного аспекта – удобства создания игры, то Unity3d вне всяких сомнений это лучший выбор для творческого человека. Глубочайшая интуитивность Unity3d и ваша простая логика позволяет создавать то, что хочется практически сразу, просто на лету, даже не зная программы. Что означает эта интуитивность? Это значит, что если возникла идея: «а что если попробовать вот так сделать, подсоединить, повернуть?», то это можно сразу же сделать как подсказывает логика, идея, мысль, и «это» будет иметь статус – «можно». Никаких иных действий из разряда «чтобы повернуть это надо сначала добавить такой объект и настроить точку вращения» – не нужно. Например, если у вас есть 3д модель экскаватора с несколькими деталями, скажем, с кабиной, гусеницами, ковшом, то в Unity3d мы можем мгновенно, прямо в сцене, одним перетаскивание мыши привязать одну деталь к другой, в произвольном порядке, например кабину к ковшу, а ковш к гусеницам и, эта фантастическая конструкция с этого же момента готова к использованию в таком виде, сохраняя иерархию сделанных изменений. Пример, конечно, не очень практичен, однако он показывает, что в Unity3d у создателя игр есть практически полная творческая свобода и интуитивное понимание. А ведь дизайн, сборка на лету, возникшая идея, которую можно сразу же реализовать, все это фундамент творчества и радости. Напротив, в Unreal все вышеописанное и многое другое представляет из себя сплошную «головную боль» и ограничения: «сначала нужно сделать так, потом вот так, да, я плясать мастак…» как сказано в одном фильме. А об интуитивном создании дизайна и свободной сборке элементов прямо в сцене в Unreal и говорить не приходится. Не вдаваясь в дополнительные подробности можно сказать поэтически так: если работу на Unity3d можно сравнить с работой изящной кисточкой художника, то работу на Unreal можно сравнить с работой бревна в руках, которым вы пытаетесь что-то нарисовать. Утверждение о том, что среда разработки Unreal подходит для проектов созданных где-то во вне (во внешней программе 3д моделирования, например в 3ds Max), с учетом возможностей программ сегодняшнего дня не выдерживает критики. А уж о творчестве и интуитивности в таком случае говорить тем более невозможно.
3. Глубина погружения
Чтобы хорошо ориентироваться в том как будет работать создаваемая игра необходимо понять, что любая компьютерная программа (видеоигра это прежде всего программа) на любых компьютерах на Земле выполняется процессором сверху вниз последовательно, команда за командой (многопоточность и несколько ядер процессора мы рассматривать не будем). Программа это набор записей в блокноте, строчками сверху вниз, точно также как школьная тетрадь по русскому языку с сочинением на тему стихотворений Сергея Есенина. Только вместо художественного текста сочинения программист записывает в тетрадь команды для процессора на выбранном языке программирования. После запуска такой программы, процессор выполняет ее как я уже говорил сверху вниз, последовательно, команда за комнадой. В последние десятилется в программировании появились понятия: объекты, экземпляры, методы и т.д., однако, суть исполнения программы не изменилась – сверху вниз, последовательно.
Среда разработки Unity3d предоставляет создателю возможность делать его игру расставляя объекты и события как бы отдельно: здесь можно поставить персонажа с отдельной программой управления (в Unity3d это называется скрипт (от англ. script) или сценарий), здесь магазин продуктов с отдельной программой, а тут дверь ведущую в другой уровень со своей программой переноса в уровень. Необходимо запомнить, что это сделано только для удобства создателя игры, и на самом деле все эти «отдельные» программы выполняются процессором по порядку одна за другой, строка за строкой.
Как же происходит это выполнение? Микропроцессор компьютера выполняет программу циклами. Допустим, в программе есть 10 строк кода. Выполняется она сверху вниз точно также как вы читаете текст этой книги. Причем, до тех пор пока в недрах процессора и памяти компьютера не закончатся вычисления, например третьей строки кода, до тех пор все оставшиеся строки начиная с четвертой и до десятой никогда не выполнятся. Все эти как может показаться простые нюансы крайне важны как основа. Зная такие нюансы вы сможете сосредоточиться на творчестве, на придумывании «что можно воплотить в игре», а не думать «как же это сделать, не будет ли здесь ошибки и зависания игры?». Так вот, когда выполнение закончится после десятой строки цикл повторяется снова с первой, и так до бесконечности, пока не произойдут какие-то иные события, например, игрок просто выйдет из игры.
Продолжим. Описанные только что бесконечные циклы повторяются каждый кадр во время игры. Чем больше этих циклов успеет вычислить микропроцессор за одну секунду времени, тем лучше и быстрее работает игра. Если процессор успевает вычислить, например 60 таких циклов за 1 секунду, значит игра работает со скоростью 60 FPS (от англ. Frames Per Seconds – кадры в секунду) и на экране монитора игрока изображение игры меняется 60 раз за 1 секунду, т.е. 60 кадров в секунду. Такая игра воспринимается глазом играющего приятно, плавно, без рывков и притормаживаний. И наоборот, чем меньше циклов за 1 секунду выполняет процессор, тем ниже FPS игры и качество ее работы. Также необходимо иметь ввиду, что процессору в этих вычислениях помогает видеокарта. Можно сказать, что это второй процессор компьютера, но рассчитанный только на обработку графики, проще говоря, только на рисование всех картинок и 3д объектов игры.
Хочу отметить, что не нужно гнаться за высокими показателями FPS при разработке игры, так как на сегодняшний день процессоры компьютеров способны справляться с разными нагрузками одинаково успешно. Сосредоточтесь на творчестве и на создании того, что вы задумали, а не тратьте время на ненужные поиски «спасения» дополнительных 10 кадров в секунду. В конце концов, компьютерные технологии развиваются столь динамично, что в отрезке 2—3 года то, что сегодня работает несколько медленно, завтра будет работать совершенно нормально. Думайте о творчестве, а не о FPS.
4. Си шарп
Создавая код программы нашей игры мы будем использовать язык программирования C# (произносится си шарп). Это очень удобный и гибкий язык программирования. Его огромный плюс заключается в том, что он строго типизирован, т.е. в большинстве случаев он попросту не позволит вам сделать ошибку создания программы. Например, в этом языке нельзя просто так сказать, что строка текста это тоже самое что и число. В других языках программирования это возможно, что в процессе создания программы может повлечь возникновение неявных ошибок, которые приводят к непредсказуемым последствиям, и что еще хуже, место возникновения в коде такой ошибки очень трудно найти. Чтобы писать программы на языке C# нам понадобится Microsoft Visual Studio. Ее можно просто скачать из интернета. Перед загрузкой выберите раздел Community, этот вариант является бесплатным для скачивания.
Очень часто при написании кода игры необходимо много раз повторять одни и те же инструкции программы. Для этого существуют методы или другое название – функции. Метод это ничем не отличающийся от прочих строк кода набор команд, который может запускаться как отдельная подпрограмма. В Unity3d существует несколько фундаментальных методов, которые отвечают практически за всю работу игры. Первый из них это метод Update (). Именно этот метод бесконечно запускается каждый кадр игры. Чем чаще сможет выполниться этот метод процессором, тем выше будет FPS игры. Через этот метод будет выполняться почти весь код нашей будущей игры. Этот код принято называть логикой игры. Следующий фундаментальный метод называется Start (), который выполняется только один раз при запуске игры. Он нужен для того чтобы подготовить необходимые параметры к работе – инициализировать их. Причем, в нашей сцене игры может быть много методов Start () и Update () сразу: на двери перехода в уровень, на персонаже, на магазине продуктов и т. д. Как же они взаимодействуют друг с другом? Тут важно понять и запомнить, что при запуске игры сначала выполняются все объекты игры у которых есть метод Start () и после этого начинают выполняться все объекты с методом Update (). Например, если в запущенной сцене игры есть 100 объектов и на каждом есть метод Update (), то это означает, что за 1 кадр (упомянутый выше) процессор компьютера выполнит все эти 100 методов Update (). Для дополнительного понимания можно это представить так, что один метод Update () разделен на 100 методов, которые должны выполниться в течение одного кадра игры. Вообще, строго говоря, с точки зрения производительности такое большое количество методов Update () в одной сцене не очень хорошо. Но такое разбиение одного метода на разные объекты является одной из замечательных возможностей Unity3d. Благодаря такому разбиению процесс создания игры становится очень удобным и понятным: вот здесь напольный вентилятор, он появляется в начале игры и пока он включен его метод Update () запускается чтобы вращать лопасти его пропеллера.
5. «Вращать Медленно!»
Вводная часть закончена, теперь можно начать действовать. «Дальше действовать будем мы», как сказано в одной песне. Начнем с подготовки проекта. Проектом называется весь конгломерат кода, объектов, текстур, заготовок и т. д. лежащих в виде файлов в какой-то одной папке, которую использует Unity3d. Чтобы создать чистый новый проект необходимо запустить программу Unity Hub, она используется для организации проектов, создания и установки разных версий Unity3d. Создайте новый проект (кнопка New Project) используя любую версию Unity3d начиная с 6000. Чтобы скачать Hub введите в поиске Google слова Unity hub. Первая запись поисковика будет как раз то, что надо. При запуске Unity Hub активируйте лизцензию – Personal, она не требует оплаты за использование редактора Unity3d.
Для создания нашей игры мы будем использовать конвейер рендеринга называемый HDRP. В Unity3d существует 3 конвейера рендеринга: встроенный, называемый BIP или Built-In, универсальный URP и HDRP. Конвейер рендеринга это структура описывающая необходимые процедуры для преобразования вашей 3д сцены в изображение на экране компьютера. Можно сказать коротко и ясно, что различия между ними в их графических возможностях. BIP и URP конвейеры предоставляют посредственные возможности для графики и ориентированы на создание игр для мобильных платформ (для телефонов) и виртуальной реальности (VR). Самый классный из всех трех именно HDRP, он позволяет достичь самых высоких показателей графики, т.е. получить самую красивую картинку игры, самые реалистичные 3д сцены. Этот конвейер предназначен для создания игр запускаемых на персональном компьютере (ПК) и на консолях (приставках, наподобие «Sony PlayStation»). Берем его в работу.
Открыв созданный пустой проект нажмите Window> Package Manager. Откроется окно Диспетчера Пакетов (Package Manager). Необходимо в этом окне вверху переключить кнопку так, чтобы отображалась надпись Packages: Unity Registry. Это означает, что будут отображаться все пакеты доступные для скачивания от производителя Unity3d. Нужно отыскать в этом списке High Definition RP, нажать на эту надпись и в правой части окна нажать – Install (установить).
Уважаемый читатель, вы можете использовать HDRP шаблон (HDRP template) из Unity Hub или Мастер Настройки Конвейера (Render Pipeline Wizard) по вашему усмотрению, но я намеренно описываю как создать HDRP проект с нуля, так сказать на самом низком уровне. Главная причина заключается в том, что от версии к версии в Unity3d меняются стили, настройки, окна и прочее, беспрестанно переделываемое коллективом разработчиков Unity3d. Вся эта мишура может сбить с толку и запутать начинающего создателя игр. Кроме того, при использовании шаблонов и «мастеров настройки» очень часто пустой проект создается с ошибками «от производителя» (красные сообщения в консоли), что дополнительно сбивает с толку, раздражает и расстраивает. Описываемый мной «низкоуровневый» метод позволяет все установить правильно на любой версии программы без ошибок и – наверняка.
Только что мы установили сам конвейер в наш проект, т.е. налили для нашего «супа» воду в кастрюлю. Теперь надо конвейер включить, чтобы он мог начать действовать – «зажечь под кастрюлей газ». Для этого в окне Проект (Project) щелкните правой кнопкой мыши – Создать (Create)> Рендеринг (Rendering)> HDRP объект (HDRP Asset). Мы создали глобальный объект управляющий визуализацией нашего нового проекта. Теперь его нужно «включить», для этого нажмите Редактирование (Edit)> Настройки Проекта (Project Settings)> Графика (Graphics)> Конвейер по умолчанию (Default Render Pipeline) – перетащите в этот пустой слот только что созданный HDRP объект. Всё, теперь проект находится в состоянии HDRP и готов к работе. Последний шаг который необходимо сделать, это проверить, что Visual Studio, который мы скачали и установили ранее используется в нашем проекте по умолчанию. Для этого нажмите Редактирование (Edit)> Установки (Preferences)> Внешние Инструменты (External Tools)> (Внешний Редактор Сценариев) External Script Editor и установите в выпадающем списке Visual Studio.
6. Поехали!
Так, теперь займемся филигранно программами нашей будущей игры. Так как этих программ или как их еще называют «скриптов» будет много, то чтобы не путаться необходимо создать для них отдельную папку и назвать ее Scripts. Для этого в окне Проект (Project) на папке Assets щелкните правой кнопкой мыши Создать (Create)> Папка (Folder), назовем ее Scripts. Предлагаю взять вам на вооружение мысль о том, что удалять и переименовывать папки и файлы проекта необходимо в самом редакторе Unity3d, но не через Windows Проводник, так как все файлы проекта Unity3d связываются метаданными, которые в некоторых случаях очень капризны со всеми вытекающими отрицательными для радости творчества последствиями.
Старайтесь точь в точь делать так как описано все ниже по тексту с тем, чтобы не было путаницы и недопонимания.
Создадим игрока. Игрок это игровой объект с камерой, который является главным действующим лицом всей игры. Камера это объект, который показывает на экране все, что видит игрок. Вообще все, что есть в сцене или уровне Unity3d, все это игровые объекты – GameObject, причем все они расположены в виртуальном пространстве нашей сцены, поэтому любой объект в Unity3d всегда существует с компонентом Transform, который задает положение и размер объекта в пространстве. Логика подсказывает, что без этого компонента объект существовать не может, поэтому компонент Transform невозможно удалить из объекта.
Итак, игрок. Создадим программу для игрока, для этого нажмем правой кнопкой мыши в окне Проект (Project) в папке Scripts которую мы создали – Create> Scripting> Пустой C# Сценарий (Empty C# Script), назовем его FPCharacter. Двойной щелчок на этом файле чтобы открылся редактор Visual Studio. Мы увидим такие строчки кода:
using UnityEngine;
public class FPCharacter
{
}
Коротко разберем их. Строка using UnityEngine означает, что данная программа или сценарий или скрипт будет использовать (англ. using) базовые классы среды разработки Unity3d Engine.
Строка public class FPCharacter означает, что данный сценарий представляет собой класс (класс это основной тип данных языка программирования) с названием FPCharacter, и этот класс общедоступен благодря ключевому слову public, т.е. он может быть доступен для любого кода в проекте.
Также необходимо иметь ввиду, что все сценарии логики игры в Unity3d являются так сказать вытекающими из базового класса MonoBehaviour. Поэтому, чтобы сценарий нашей игры мог работать к указанию названия класса всегда необходимо добавлять двоеточие и MonoBehaviour. Теперь этот же код должен будет выглядить вот так:
using UnityEngine;
public class FPCharacter: MonoBehaviour
{
}
Сейчас мы создали каркас нашей первой программы. Теперь необходимо наполнить его данными и операциями. Все наполнение класса или его «тело» должно быть записано между фигурными скобками.
Укажем или объявим переменные. Переменная это кусочек памяти вашего компьютера, которая имеет тип, т.е. кто она, имя – как ее зовут, и хранит в себе какие-то значения. Напишем:
public float speed = 2.0f;
public float speedfast = 50.0f;
public float gravity = -9.8f;
Первая строка означает, что объявлена переменная, которая называется speed, имеет значение равное 2.0, является общедоступной (public) и имеет тип – float, т.е. числовой тип с плавающей запятой. Для примера в C# есть тип int, т.е. целочисленный тип, в который можно внести значение 1, 2, 3 и т.д., но нельзя записать 1,4 или 2,3. Именно в тип float можно внести значения 2,3 или 1,4. Также по правилам языка си шарп при объявлении переменной типа float в указании значения нужно ставить букву f, чтобы точно отделить переменную от другого типа называемого double. Также в конце инструкции или объявления переменной всегда необходимо ставить точку с запятой. При передаче нашего кода в машинные инструкции для процессора (запуск нашей программы) точка с запятой указывает на то, что данная инструкция или объявление переменной закончено и можно переходить к следующим действиям.
Теперь созданные три переменные будут помогать нам управлять программой, т.е. игроком, которого мы делаем. Переменные скорость (speed), быстрая скорость (speedfast) и гравитация (gravity). Сейчас программа выглядит вот так:
using UnityEngine;
public class FPCharacter: MonoBehaviour
{
public float speed = 2.0f;
public float speedfast = 50.0f;
public float gravity = -9.8f;
}
Нажмем Ctrl + S, чтобы сохранить наш сценарий, и, чтобы двигаться последовательно и не путаться вернемся в редактор Unity3d в наш проект и создадим сам игровой объект игрока. Правой кнопкой в окне Иерархия (Hierarchy) нажмем> Создать Пустой (Create Empty). Назовем сразу этот игровой объект Player. А теперь просто набросим на него наш созданный сценарий FPCharacter (Можно набросить или перетащить сценарий на объект в окне Hierarchy или в окно (Инспектор) Inspector). Окно Inspector наиболее часто используемое окно Unity3d, в нем отображаются почти все свойства и параметры объектов будущей игры.
Теперь мы видим наш сценарий FPCharacter находящимся на объекте Player как его компонент, такой же как вышеописанный Transform. И мы видим все три переменные нашего сценария с их установленными значениями. Обратите внимание, что если убрать ключевые слова public, то переменные исчезнут из инспектора и их настройка в редакторе Unity3d станет невозможной.

7. Контроллер Персонажа
Продолжим, напишем такую строку кода:
CharacterController CharControl;
Это переменная типа CharacterController, которая называется CharControl. Объявление такой переменной происходит по аналогии того, что мы сделали выше. Чтобы лучше понять аналогию и запомнить принцип представьте так, что у нас была переменная типа float с названием speed. А сейчас у нас переменная типа CharacterController с названием CharControl. Закрепите в сознании, что все объявления в будущем будут происходить аналогично, тогда картина происходящего будет сразу ясна.