HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#Руководства</a></p>
1 <p><a>#Руководства</a></p>
2 <ul><li>10 июл 2019</li>
2 <ul><li>10 июл 2019</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>На создание игры обычно уходит много времени и сил, но движок Unity значительно облегчает процесс. И в 2D-, и в 3D-играх.</p>
4 </ul><p>На создание игры обычно уходит много времени и сил, но движок Unity значительно облегчает процесс. И в 2D-, и в 3D-играх.</p>
5 <p> vlada_maestro / shutterstock</p>
5 <p> vlada_maestro / shutterstock</p>
6 <p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
6 <p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
7 <p>С помощью Unity сделаны такие игры, как:</p>
7 <p>С помощью Unity сделаны такие игры, как:</p>
8 <ul><li>Outlast;</li>
8 <ul><li>Outlast;</li>
9 <li>Hearthstone;</li>
9 <li>Hearthstone;</li>
10 <li>Cuphead;</li>
10 <li>Cuphead;</li>
11 <li>Rust;</li>
11 <li>Rust;</li>
12 <li>Firewatch;</li>
12 <li>Firewatch;</li>
13 <li>Inside;</li>
13 <li>Inside;</li>
14 <li>Cities: Skylines и другие.</li>
14 <li>Cities: Skylines и другие.</li>
15 </ul><p>Из статьи вы узнаете, из каких компонентов создаётся игра и как написать свой первый проект. Вот такие нас ждут этапы:</p>
15 </ul><p>Из статьи вы узнаете, из каких компонентов создаётся игра и как написать свой первый проект. Вот такие нас ждут этапы:</p>
16 <ul><li>Создаем проект в Unity.</li>
16 <ul><li>Создаем проект в Unity.</li>
17 <li>Добавляем первый объект.</li>
17 <li>Добавляем первый объект.</li>
18 <li>Пишем скрипт.</li>
18 <li>Пишем скрипт.</li>
19 <li>Назначаем триггер.</li>
19 <li>Назначаем триггер.</li>
20 </ul><p>Unity в несколько раз ускоряет разработку, потому что берёт на себя физику, графику, анимацию и работу со звуком. На движке делают игры практически для всех платформ. Причём пользуются им не только инди-разработчики, но и крупные студии.</p>
20 </ul><p>Unity в несколько раз ускоряет разработку, потому что берёт на себя физику, графику, анимацию и работу со звуком. На движке делают игры практически для всех платформ. Причём пользуются им не только инди-разработчики, но и крупные студии.</p>
21 <p>Как именно пользоваться движком Unity и создавать крутые проекты, - мы учим на курсе "<a>Разработчик игр с 0 до PRO</a>".</p>
21 <p>Как именно пользоваться движком Unity и создавать крутые проекты, - мы учим на курсе "<a>Разработчик игр с 0 до PRO</a>".</p>
22 <p>Скачиваем Unity на <a>официальном сайте</a>. Новичкам достаточно бесплатного тарифа Personal.</p>
22 <p>Скачиваем Unity на <a>официальном сайте</a>. Новичкам достаточно бесплатного тарифа Personal.</p>
23 <p>Последняя версия движка может не поддерживаться на старых компьютерах. Если так, то подходящую стоит поискать в <a>архиве версий</a>. Игра для этой статьи написана на Unity 5.5.0f3. Интерфейс более поздних версий не сильно менялся, поэтому руководство подойдёт и для них.</p>
23 <p>Последняя версия движка может не поддерживаться на старых компьютерах. Если так, то подходящую стоит поискать в <a>архиве версий</a>. Игра для этой статьи написана на Unity 5.5.0f3. Интерфейс более поздних версий не сильно менялся, поэтому руководство подойдёт и для них.</p>
24 <p>Игры на старых версиях движка потребляют больше ресурсов устройства при меньшей сложности. Кроме того, в них встречаются уязвимости и ошибки. Но главная проблема в том, что некоторые платформы больше не поддерживают игры, созданные на старых версиях, так как было изменено API.</p>
24 <p>Игры на старых версиях движка потребляют больше ресурсов устройства при меньшей сложности. Кроме того, в них встречаются уязвимости и ошибки. Но главная проблема в том, что некоторые платформы больше не поддерживают игры, созданные на старых версиях, так как было изменено API.</p>
25 <p>Итак:</p>
25 <p>Итак:</p>
26 <ul><li><strong>Запустите установщик и следуйте инструкциям.</strong>Кроме самого движка, вам предложат установить Microsoft Visual Studio - интегрированную среду разработки. Это лучшие возможности по работе со скриптами в Unity, но она занимает много места на диске.</li>
26 <ul><li><strong>Запустите установщик и следуйте инструкциям.</strong>Кроме самого движка, вам предложат установить Microsoft Visual Studio - интегрированную среду разработки. Это лучшие возможности по работе со скриптами в Unity, но она занимает много места на диске.</li>
27 <li><strong>Если Microsoft Visual Studio установлена</strong>или используется другой редактор кода, уберите галочку. Альтернативами могут быть Microsoft Visual Studio Code (более лёгкая версия Visual Studio) или MonoDevelop - встроенный редактор Unity.</li>
27 <li><strong>Если Microsoft Visual Studio установлена</strong>или используется другой редактор кода, уберите галочку. Альтернативами могут быть Microsoft Visual Studio Code (более лёгкая версия Visual Studio) или MonoDevelop - встроенный редактор Unity.</li>
28 <li><strong>Когда установка завершится</strong>, пора приступать к разработке своей первой игры.</li>
28 <li><strong>Когда установка завершится</strong>, пора приступать к разработке своей первой игры.</li>
29 </ul><p>Запустите Unity и нажмите кнопку<em>New</em>или<em>New project.</em></p>
29 </ul><p>Запустите Unity и нажмите кнопку<em>New</em>или<em>New project.</em></p>
30 <p>Укажите название проекта, его местоположение на диске и количество измерений. Лучше выбрать 2D, потому что с ним проще разобраться с Unity.</p>
30 <p>Укажите название проекта, его местоположение на диске и количество измерений. Лучше выбрать 2D, потому что с ним проще разобраться с Unity.</p>
31 <p>На подготовку файлов уйдёт какое-то время, затем появится окно редактора Unity:</p>
31 <p>На подготовку файлов уйдёт какое-то время, затем появится окно редактора Unity:</p>
32 <p>На слабых компьютерах может появляться розовый фон и следующая ошибка:</p>
32 <p>На слабых компьютерах может появляться розовый фон и следующая ошибка:</p>
33 <p>SceneView Selected shader is expected to have 7 passes</p>
33 <p>SceneView Selected shader is expected to have 7 passes</p>
34 <p>Чтобы устранить ее, нажмите кнопку<em>Gizmos</em>, а потом уберите галочку с пункта<em>Selection Outline</em>:</p>
34 <p>Чтобы устранить ее, нажмите кнопку<em>Gizmos</em>, а потом уберите галочку с пункта<em>Selection Outline</em>:</p>
35 <p>Затем зайдите в пункт меню<em>Edit</em>и в подменю<em>Graphics Emulation</em>выберите<em>Shader Model 2</em>:</p>
35 <p>Затем зайдите в пункт меню<em>Edit</em>и в подменю<em>Graphics Emulation</em>выберите<em>Shader Model 2</em>:</p>
36 <p>Проект создан, можно начинать работу. Полный код игры вы найдете в <a>репозитории</a>на GitHub. Там же есть все ассеты и скрипты.</p>
36 <p>Проект создан, можно начинать работу. Полный код игры вы найдете в <a>репозитории</a>на GitHub. Там же есть все ассеты и скрипты.</p>
37 <p>Ассетами называют компоненты, которые нужны для создания игры. Для удобства поместите их в отдельные папки:</p>
37 <p>Ассетами называют компоненты, которые нужны для создания игры. Для удобства поместите их в отдельные папки:</p>
38 <ul><li><strong>Scenes</strong> - локации в игре.</li>
38 <ul><li><strong>Scenes</strong> - локации в игре.</li>
39 <li><strong>Scripts</strong> - скрипты на выбранном вами языке программирования, с помощью которых устроена механика игры.</li>
39 <li><strong>Scripts</strong> - скрипты на выбранном вами языке программирования, с помощью которых устроена механика игры.</li>
40 <li><strong>Sprites</strong> - двухмерные изображения предметов, персонажей, фонов и так далее.</li>
40 <li><strong>Sprites</strong> - двухмерные изображения предметов, персонажей, фонов и так далее.</li>
41 <li><strong>Prefabs</strong> - заготовки игровых объектов.</li>
41 <li><strong>Prefabs</strong> - заготовки игровых объектов.</li>
42 </ul><p><strong>СПРАВКА</strong></p>
42 </ul><p><strong>СПРАВКА</strong></p>
43 <p>Создать папки и добавить файлы можно как в Unity, так и просто в обозревателе Windows. Создавать скрипты лучше с помощью движка, потому что он будет автоматически добавлять заготовку кода (подробнее об этом ниже).</p>
43 <p>Создать папки и добавить файлы можно как в Unity, так и просто в обозревателе Windows. Создавать скрипты лучше с помощью движка, потому что он будет автоматически добавлять заготовку кода (подробнее об этом ниже).</p>
44 <p>Теперь перетащите нужный спрайт из поля с ассетами в окно сцены. Чтобы сквозь него не пролетали другие объекты, добавьте к нему компонент типа<em>Collider 2D</em>из категории<em>Physics 2D</em>. Выбирайте тот тип, который соответствует форме спрайта: например, Circle Collider 2D (если это шар) или Box Collider 2D (если квадрат).</p>
44 <p>Теперь перетащите нужный спрайт из поля с ассетами в окно сцены. Чтобы сквозь него не пролетали другие объекты, добавьте к нему компонент типа<em>Collider 2D</em>из категории<em>Physics 2D</em>. Выбирайте тот тип, который соответствует форме спрайта: например, Circle Collider 2D (если это шар) или Box Collider 2D (если квадрат).</p>
45 Добавление компонента "Коллайдер"<p>Коллайдер позволяет указать границы объекта, через которые не сможет пройти другой объект, для которого также указаны рамки.</p>
45 Добавление компонента "Коллайдер"<p>Коллайдер позволяет указать границы объекта, через которые не сможет пройти другой объект, для которого также указаны рамки.</p>
46 <p>Например, поставить галочку возле<em>Freeze Rotation</em>, чтобы запретить объекту вращаться. У нас шар, поэтому замораживать вращение не нужно. В поле<em>Interpolate</em>укажите<em>Interpolate</em> - это сделает движение объекта более плавным.</p>
46 <p>Например, поставить галочку возле<em>Freeze Rotation</em>, чтобы запретить объекту вращаться. У нас шар, поэтому замораживать вращение не нужно. В поле<em>Interpolate</em>укажите<em>Interpolate</em> - это сделает движение объекта более плавным.</p>
47 Настройки интерполяции объекта<p>Чтобы изменить скорость падения, задайте гравитацию для всего проекта. Сделать это можно в меню<em>Edit -&gt; Project Settings -&gt; Physics 2D.</em></p>
47 Настройки интерполяции объекта<p>Чтобы изменить скорость падения, задайте гравитацию для всего проекта. Сделать это можно в меню<em>Edit -&gt; Project Settings -&gt; Physics 2D.</em></p>
48 Вход в настройки физики проекта<p>В правом окне появятся настройки, где можно менять гравитацию по оси Y или оси X. По умолчанию она равна<em>-9.98f,</em>но для 2D-игры лучше подойдет -<em>30f</em>.</p>
48 Вход в настройки физики проекта<p>В правом окне появятся настройки, где можно менять гравитацию по оси Y или оси X. По умолчанию она равна<em>-9.98f,</em>но для 2D-игры лучше подойдет -<em>30f</em>.</p>
49 <p>Если нужно, смените<em>Gravity Scale</em>самого объекта - множитель гравитации. Попробуйте разные значения, чтобы подобрать подходящую скорость.</p>
49 <p>Если нужно, смените<em>Gravity Scale</em>самого объекта - множитель гравитации. Попробуйте разные значения, чтобы подобрать подходящую скорость.</p>
50 <p>Чтобы он не летел в пустоту, поставьте под ним платформу.</p>
50 <p>Чтобы он не летел в пустоту, поставьте под ним платформу.</p>
51 Создание платформы<p>Обратите внимание, что<em>Rigidbody 2D</em>указывать не нужно, иначе платформа будет падать.</p>
51 Создание платформы<p>Обратите внимание, что<em>Rigidbody 2D</em>указывать не нужно, иначе платформа будет падать.</p>
52 <p>Для этого перетащите её из боковой левой панели в папку<em>Prefabs</em>. Оттуда добавляются копии объектов на карту. В редакторе вы можете растягивать и поворачивать объекты: попробуйте это сделать, чтобы создать простую локацию.</p>
52 <p>Для этого перетащите её из боковой левой панели в папку<em>Prefabs</em>. Оттуда добавляются копии объектов на карту. В редакторе вы можете растягивать и поворачивать объекты: попробуйте это сделать, чтобы создать простую локацию.</p>
53 Добавление объектов и установка их границ и физики в Unity<p>Поведение объекта прописывают с помощью кода. В Unity для этого используются языки C# и JavaScript. Скрипты тоже являются ассетами и добавляются к объектам в виде компонентов.</p>
53 Добавление объектов и установка их границ и физики в Unity<p>Поведение объекта прописывают с помощью кода. В Unity для этого используются языки C# и JavaScript. Скрипты тоже являются ассетами и добавляются к объектам в виде компонентов.</p>
54 <p>Для этого зайдите в папку<em>Scripts</em>, нажмите правую кнопку, выберите<em>Create -&gt; С# Script</em>. Дайте скрипту понятное название вроде<em>PlayerControl.</em></p>
54 <p>Для этого зайдите в папку<em>Scripts</em>, нажмите правую кнопку, выберите<em>Create -&gt; С# Script</em>. Дайте скрипту понятное название вроде<em>PlayerControl.</em></p>
55 Создание скрипта на C#using System.Collections; //Можете убрать подключение коллекций, если не будете их использовать, это снизит общий объем проекта using System.Collections.Generic; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { //Метод, который запускается при старте игры void Start () { } //Метод, который выполняется при каждой смене кадра - тут и будет происходить управление объектом void Update () { } }public float maxHealth = 100; //Здоровье игрока public float currHealth = 100; public Rigidbody2D rb; //С помощью Rigidbody 2D будет осуществляться управление объектом public float jumpForce = 7000f; //Сила прыжка public float speed = 5f; //Скорость движенияrb = GetComponent&lt;Rigidbody2D&gt;(); if(currHealth &gt; 0) //Управление объектом будет доступно, если здоровье выше нуля { float moveX = Input.GetAxis("Horizontal"); //Получение направления движения rb.MovePosition(rb.position + Vector2.right * moveX * speed * Time.deltaTime); //Изменение позиции if(Input.GetKeyDown(KeyCode.UpArrow)) //Действия при нажатии стрелочки вверх { rb.AddForce(Vector2.up * jumpForce); //Добавление силы прыжка } } else { Destroy(gameObject); //Если здоровье ниже нуля, то объект будет удален //Обратите внимание, что в качестве аргумента указан gameObject, а не this //Если указать this, то для текущего объекта будет отключен этот скрипт }<p>Для указания координат используются статические классы<em>Vector2(x, y)</em>и <em>Vector3(x, y, z)</em> - они пригодятся не только для написания скрипта ходьбы, но для любых других целей, в которых требуется указание позиции.</p>
55 Создание скрипта на C#using System.Collections; //Можете убрать подключение коллекций, если не будете их использовать, это снизит общий объем проекта using System.Collections.Generic; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { //Метод, который запускается при старте игры void Start () { } //Метод, который выполняется при каждой смене кадра - тут и будет происходить управление объектом void Update () { } }public float maxHealth = 100; //Здоровье игрока public float currHealth = 100; public Rigidbody2D rb; //С помощью Rigidbody 2D будет осуществляться управление объектом public float jumpForce = 7000f; //Сила прыжка public float speed = 5f; //Скорость движенияrb = GetComponent&lt;Rigidbody2D&gt;(); if(currHealth &gt; 0) //Управление объектом будет доступно, если здоровье выше нуля { float moveX = Input.GetAxis("Horizontal"); //Получение направления движения rb.MovePosition(rb.position + Vector2.right * moveX * speed * Time.deltaTime); //Изменение позиции if(Input.GetKeyDown(KeyCode.UpArrow)) //Действия при нажатии стрелочки вверх { rb.AddForce(Vector2.up * jumpForce); //Добавление силы прыжка } } else { Destroy(gameObject); //Если здоровье ниже нуля, то объект будет удален //Обратите внимание, что в качестве аргумента указан gameObject, а не this //Если указать this, то для текущего объекта будет отключен этот скрипт }<p>Для указания координат используются статические классы<em>Vector2(x, y)</em>и <em>Vector3(x, y, z)</em> - они пригодятся не только для написания скрипта ходьбы, но для любых других целей, в которых требуется указание позиции.</p>
56 <p>Unity по умолчанию устанавливает клавиши, которые меняют движение по осям:</p>
56 <p>Unity по умолчанию устанавливает клавиши, которые меняют движение по осям:</p>
57 <p>Так, если пользователь нажмёт стрелку<em>вправо</em>или<em>D</em>, то направление по оси X будет равно<em>+1</em>, если<em>влево</em>, то <em>-1</em>, если ничего не предпримет -<em>0</em>. Чтобы получить это значение, используется метод<em>GetAxis()</em>статичного класса<em>Input</em>.</p>
57 <p>Так, если пользователь нажмёт стрелку<em>вправо</em>или<em>D</em>, то направление по оси X будет равно<em>+1</em>, если<em>влево</em>, то <em>-1</em>, если ничего не предпримет -<em>0</em>. Чтобы получить это значение, используется метод<em>GetAxis()</em>статичного класса<em>Input</em>.</p>
58 <p>Прыжок срабатывает после нажатия отдельной кнопки. Это нужно, чтобы нельзя было лететь вниз при нажатии<em>стрелочки вниз</em>или<em>S</em>.</p>
58 <p>Прыжок срабатывает после нажатия отдельной кнопки. Это нужно, чтобы нельзя было лететь вниз при нажатии<em>стрелочки вниз</em>или<em>S</em>.</p>
59 <p>Этот же скрипт позволяет прыгать даже в воздухе. Есть несколько способов запретить двойные прыжки, но сейчас пройдёмся по основным моментам.</p>
59 <p>Этот же скрипт позволяет прыгать даже в воздухе. Есть несколько способов запретить двойные прыжки, но сейчас пройдёмся по основным моментам.</p>
60 <p>Вот как работает игра с таким управлением.</p>
60 <p>Вот как работает игра с таким управлением.</p>
61 using UnityEngine; public class CameraFix : MonoBehaviour { public GameObject player; void Update() { transform.position = new Vector3(player.transform.position.x, player.transform.position.y, -10f); } }<p>Его нужно подключить к объекту<em>Main Camera:</em></p>
61 using UnityEngine; public class CameraFix : MonoBehaviour { public GameObject player; void Update() { transform.position = new Vector3(player.transform.position.x, player.transform.position.y, -10f); } }<p>Его нужно подключить к объекту<em>Main Camera:</em></p>
62 <p>Если не получается найти нужный объект в списке, просто перетащите его.</p>
62 <p>Если не получается найти нужный объект в списке, просто перетащите его.</p>
63 <p>По тому же принципу работает полоса здоровья - её положение зависит от координат персонажа:</p>
63 <p>По тому же принципу работает полоса здоровья - её положение зависит от координат персонажа:</p>
64 using UnityEngine; public class Health : MonoBehaviour { public PlayerControl player; void Update () { //Получение длины полосы float healthPercent = (player.currHealth / player.maxHealth) * 100; float healthLevel = healthPercent / 10; transform.localScale = new Vector3(healthLevel, 1f, 1f); //Изменение масштаба transform.position = new Vector3(player.transform.position.x, player.transform.position.y + 4f, transform.position.z); //Изменение позиции } }<p>С помощью<em>transform.localScale</em>, кстати, можно менять размер мяча. Например, если немного приплюснуть его при приземлении, а потом вернуть в исходное состояние, - это создаст более мультяшный эффект.</p>
64 using UnityEngine; public class Health : MonoBehaviour { public PlayerControl player; void Update () { //Получение длины полосы float healthPercent = (player.currHealth / player.maxHealth) * 100; float healthLevel = healthPercent / 10; transform.localScale = new Vector3(healthLevel, 1f, 1f); //Изменение масштаба transform.position = new Vector3(player.transform.position.x, player.transform.position.y + 4f, transform.position.z); //Изменение позиции } }<p>С помощью<em>transform.localScale</em>, кстати, можно менять размер мяча. Например, если немного приплюснуть его при приземлении, а потом вернуть в исходное состояние, - это создаст более мультяшный эффект.</p>
65 <p>Ещё один важный инструмент - триггеры. С их помощью отслеживают попадание чего-либо в определённую область. Для этого либо создается отдельный объект, либо триггер прикрепляется к существующему.</p>
65 <p>Ещё один важный инструмент - триггеры. С их помощью отслеживают попадание чего-либо в определённую область. Для этого либо создается отдельный объект, либо триггер прикрепляется к существующему.</p>
66 <p>Это пригодится, если нужны препятствия. Например, создать канцелярские кнопки, о которые может уколоться мяч.</p>
66 <p>Это пригодится, если нужны препятствия. Например, создать канцелярские кнопки, о которые может уколоться мяч.</p>
67 <p>Обратите внимание, что тут сразу три коллайдера, но триггер установлен только на тот, который находится на острие кнопки.</p>
67 <p>Обратите внимание, что тут сразу три коллайдера, но триггер установлен только на тот, который находится на острие кнопки.</p>
68 using UnityEngine; public class ButtonTrigger : MonoBehaviour { public PlayerControl player; void OnTriggerEnter2D(Collider2D obj) { player.currHealth -= 5f; Destroy(gameObject); } }<p>Так кнопка сначала отнимет здоровье игрока, а потом исчезнет. Ещё можно добавить проверку, какой именно объект запустил триггер (объект будет передан в аргументе<em>obj</em>типа<em>Collider 2D</em>).</p>
68 using UnityEngine; public class ButtonTrigger : MonoBehaviour { public PlayerControl player; void OnTriggerEnter2D(Collider2D obj) { player.currHealth -= 5f; Destroy(gameObject); } }<p>Так кнопка сначала отнимет здоровье игрока, а потом исчезнет. Ещё можно добавить проверку, какой именно объект запустил триггер (объект будет передан в аргументе<em>obj</em>типа<em>Collider 2D</em>).</p>
69 <p>То же самое легко проделать и с аптечкой, но уже не отнимать здоровье, а прибавлять его. А чтобы персонаж при падении не летел в пропасть, добавьте область, при попадании в которую объект будет перемещён в точку Respawn.</p>
69 <p>То же самое легко проделать и с аптечкой, но уже не отнимать здоровье, а прибавлять его. А чтобы персонаж при падении не летел в пропасть, добавьте область, при попадании в которую объект будет перемещён в точку Respawn.</p>
70 <p>Unity позволяет относительно легко создавать крутые игры. Это в разы быстрее и эффективнее, чем писать всё с нуля, но при условии, что вы хорошо умеете пользоваться этим движком и знаете C# или JS.</p>
70 <p>Unity позволяет относительно легко создавать крутые игры. Это в разы быстрее и эффективнее, чем писать всё с нуля, но при условии, что вы хорошо умеете пользоваться этим движком и знаете C# или JS.</p>
71 <p>Всему этому мы обучаем на курсе "<a>Разработчик игр на Unity</a>". Вы освоите все необходимые инструменты, а в конце обучения у вас будет несколько проектов, которые не стыдно будет показать сообществу геймеров и создателей игр.</p>
71 <p>Всему этому мы обучаем на курсе "<a>Разработчик игр на Unity</a>". Вы освоите все необходимые инструменты, а в конце обучения у вас будет несколько проектов, которые не стыдно будет показать сообществу геймеров и создателей игр.</p>
72 <a>Курс с трудоустройством: "Профессия Разработчик игр на Unity с нуля" Узнать о курсе</a>
72 <a>Курс с трудоустройством: "Профессия Разработчик игр на Unity с нуля" Узнать о курсе</a>