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 -> Project Settings -> Physics 2D.</em></p>
47
Настройки интерполяции объекта<p>Чтобы изменить скорость падения, задайте гравитацию для всего проекта. Сделать это можно в меню<em>Edit -> Project Settings -> 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 -> С# Script</em>. Дайте скрипту понятное название вроде<em>PlayerControl.</em></p>
54
<p>Для этого зайдите в папку<em>Scripts</em>, нажмите правую кнопку, выберите<em>Create -> С# 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<Rigidbody2D>(); if(currHealth > 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<Rigidbody2D>(); if(currHealth > 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>