Читать книгу Разработка игры в Unity. С нуля и до реализации - Дмитрий Вадимович Денисов - Страница 10
Часть 1. Установка необходимого программного обеспечения
1.3 Программа “Hello World” и принципы работы в Unity
ОглавлениеПроверить корректность работы всех установленных программных пакетов можно, написав простейшую программу. По традиции принято создавать программу, которая выводит сообщение Hello World. В нашем примере мы не просто выведем сообщение, но и научимся взаимодействовать с объектами в среде Unity.
1. Чтобы создать первый проект на Unity, откройте Unity Hub и перейдите во вкладку Project. Нажмите New чтобы перейти в окно создания нового проекта:
2. В появившемся новом окне выберите тип проекта – 3D, дайте имя новому проекту, например 01_HelloWorld. Проверьте путь к папке, в которой будет создан проект (здесь скорее важно, чтобы вы осознанно указали папку для проекта и не потеряли его в дальнейшем). После этого нажмите Create:
3. Проект будет создан и открыт в новом окне Unity. На рисунке ниже показано, как выглядит запущенная среда разработки Unity, в данный момент вам может показаться, что она содержит довольно большое количество разнообразных и непонятных окон, но в дальнейшем мы разберемся в том, как они устроены и за что отвечают отдельные элементы среды разработки:
4. Возможно при первом запуске Unity появится сообщение о необходимости обновить встроенный Visual Studio Editor до последней версии (сообщение с желтым восклицательным знаком внизу среды разработки). В этом случае перейдите во вкладку Window – Package Manager, выберите Visual Studio Editor и нажмите Update:
5. Создадим новый C# Script-файл с простой командой, которая выводит сообщение “Hello World”. Для этого на панели Project перейдите в папку Assets, в данный момент в ней находится только одна папка с названием Scenes:
6. Кликните правой кнопкой мыши внутри папки Assets и выберите из контекстного меню Create – C# Script, как показано ниже:
7. Назовите созданный скрипт-файл HelloWorld. Содержимое папки Assets после этого должно выглядеть так, как показано на рисунке ниже:
8. Откройте файл HelloWorld.cs, кликнув по нему дважды. Файл автоматически откроется в Visual Studio Community 2019. Содержимое файла и вид среды разработки показаны на рисунке ниже:
9. В дальнейшем мы будем приводить программный код и в виде скриншотов, и в виде листинга (текстом). Его будет удобнее читать, а в случае использования электронной версии издания – копировать и вставлять части кода в свой проект. В дальнейшем мы разберемся с каждой строкой приведенного выше программного кода. Пока лишь обратите внимание на то, что внутри кода содержится два метода: void Start() и void Update().
– void Start() – это метод, который запускается при старте игры в Unity. Это значит, что команды, написанные внутри фигурных скобок этого метода, отработают один раз при запуске сцены в Unity.
– void Update () – это метод, который запускается каждый кадр на сцене. Другими словами, в метод Update() следует писать тот функционал, который требует регулярного обновления в процессе игры.
10. Добавьте строку кода, которая будет выводить сообщение «Hello World!11!». Для этого внутрь фигурных скобок метода void Start(), как показано в листинге ниже (листинг приводится целиком), нужно написать команду print:
// Start Code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HelloWorld : MonoBehaviour
{
void Start()
{
print("Hello World!11!");
}
void Update()
{
}
}
// End Code
Листинг дублируется ниже в виде скриншота из MS Visual Studio.
11. Скрипт-файл с названием HelloWorld.cs написан. Однако, чтобы он начал работать, нам следует его подключить к одному из игровых объектов внутри сцены Unity. Давайте создадим такой объект, например, простейший куб.
12. Чтобы создать игровой объект “Куб”, на верхней панели быстрого доступа в среде Unity выберите GameObject – 3D Object – Cube:
13. Таким образом, на сцене появится новый игровой объект:
14. Чтобы подключить скрипт HelloWorld.cs к объекту Cube, можно просто перетащить (зажав левую кнопку мыши) скрипт-файл на куб.
15. Теперь, если выделить объект Cube, кликнув по нему левой кнопкой мыши, то можно увидеть, что в правой части среды разработки (окно Inspector) к кубу подключился файл HelloWorld.cs (Script-файл):
16. Теперь, можно запустить сцену и проверить ее работу. Для этого нужно нажать кнопку Run в верхней центральной части среды разработки.
17. После этого сцена запустилась. На ней статично висит куб и кажется, что ничего не происходит, но если перейти в окно Console (в нижней части среды разработки), то можно заметить, что при старте было отправлено сообщение в чат:
Вместо функции print, можно использовать функцию Debug.Log(), которая является частью движка Unity. Отличие функции Debug.Log() от функции print() заключается в том, что print() не позволяет увидеть какую-либо информацию, после сборки проект. То есть print() выводит информацию только в консоль среды разработки Unity, тогда как функция Debug.Log() выводит сообщение в специальный файл в папке проекта при запуске готовой игры, содержимое которого потом можно просмотреть. По сути обе эти функции делают одно и тоже, но рекомендуют использовать именно Debug.Log(). В качестве эксперимента вы можете заменить функцию print(“Hello World”) в листинге выше на функцию Debug.Log(“Hello World”).
Обычным сообщением в окне консоли сложно удивить, особенно если речь идет о разработке игры. Поэтому давайте добавим еще немного функций для наглядности. Следует отметить, что многие моменты, связанные с разработкой игры, на себя берет Unity без необходимости написания какого-либо функционала. Иногда даже очень сложный функционал в игре можно реализовать просто настройками внутри среды разработки Unity. Продемонстрируем это на примере ниже.
18. Сделаем так, чтобы созданный 3D объект Cube при запуске сцены падал вниз. Для этого выделите объект Cube (клик левой кнопкой мыши в окне Hierarchy), после этого в правой части среды разработки станет активно окно Inspector:
19. Содержание окна Inspector зависит от типа выбранного объекта. В нем содержатся свойства объекта, его параметры, подключаемые Script-файлы и т. д. Нажмите в нижней части окна Inspector кнопку Add Component:
20. После этого появится список с перечнем компонентов, которые могут быть подключены к выбранному объекту Cube. Найдите с помощью поиска компонент Rigidbody и кликните по нему левой кнопкой мыши так, чтобы он добавился в окно Inspector.
21. Rigidbody – это механическое свойство объекта, определенное в базовом движке Unity. Другими словами, если назначить этот компонент объекту, то он начнет вести себя в соответствии с механикой абсолютно твердого тела. Запустите сцену еще раз (нажмите Run) и убедитесь, что теперь объект Cube начинает падать вниз.
22. Создадим еще один объект – плоскость (Plane), которая будет ограничивать падение куба за пределы начальной сцены. Для этого выполните действия, которые уже выполнялись при создании объекта Cube, – в верхней части меню выберите GameObject – 3D Object – Plane:
23. После создания плоскости переместим ее немного ниже уровня объекта Cube. Для этого выделите объект Plane в окне Hierarchy (клик левой кнопкой мыши) и в окне Inspector в верхней части установите значения напротив свойства Transform – Position [X:0, Y: -3, Z:0]:
24. Запустите сцену еще раз. Теперь объект куб (Cube) падает на плоскость (Plane) при старте сцены.
25. Теперь добавим немного интерактивности. Откройте скрипт-файл, который мы создали ранее с именем HelloWorld.cs и напишите туда небольшой функционал, который будет уничтожать объект Cube при нажатии клавиши пробел. В программном коде ниже показано содержимое файла HelloWorld.cs, а жирным шрифтом в комментариях показаны новые строки кода, которые нужно ввести дополнительно:
// Start Code
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HelloWorld : MonoBehaviour
}
public GameObject obj;
void Start()
{
print("Hello World!11!");
}
void Update()
{
if (Input.GetKeyUp(KeyCode.Space))
{
Destroy(obj);
}
}
}
// End Code
Листинг дублируется ниже в виде скриншота из MS Visual Studio.
В листинг были добавлены следующие строки кода:
– создается переменная класса GameObject c именем obj, в которую можно будет поместить объект (как это сделать будет показано далее). Класс GameObject – это встроенный класс Unity, в дальнейшем мы познакомимся с множеством встроенных классов и их методов;
– создается условие if, которое уничтожает объект (Destroy(obj)) при нажатии клавиши Space. При этом используется метод Input.GetKeyUp, который срабатывает, после того как игрок отпустил клавишу. Также есть похожий метод Input.GeyKeyDown, который срабатывает сразу при нажатии клавиши. В качестве эксперимента можете изменить метод на Inputy.GetKeyDown.
26. Вернитесь в среду разработки Unity и снова выберите объект Cube. обратите внимание, что теперь в окне Inspector внутри скрипт-файла HelloWorld.cs появилась новая переменная Obj. Стоит отметить, что если бы мы создали приватную (private) переменную объекта, то в инспекторе мы бы ее не увидели (приватную переменную можно увидеть, если сверху строки public GameObject obj добавить [Serialize.Field]):
27. Новая переменная появилась благодаря тем самым строкам кода, которые мы добавили выше. Теперь, если кликнуть на значок “мишени” рядом с надписью None (Game Object) то можно выбрать любой из существующих на сцене объектов, который будет удаляться при нажатии клавиши пробел. Например, выберите объект Cube:
28. Теперь запустите сцену и проверьте, что она работает следующим образом:
– В окно Console выводится сообщение “Hello World!11!”;
– Куб (Cube) начинает падать;
– Куб падает на плоскость Plane и останавливается;
– При нажатии на клавишу пробел объект Cube удаляется.
29. В качестве эксперимента замените объект Cube на плоскость Plane внутри скрипта Hello World (Script) в окне Inspector:
30. Проверьте, как теперь отрабатывает сцена после запуска. Что происходит при нажатии на клавиши “пробел”? Теперь, при нажатии клавиши, со сцены должна удаляться плоскость Plane.