Time deltatime что это

Unity3d. Уроки от Unity 3D Student (B04-B08)

Предыдущие уроки вы можете найти в соответствующем топике.

Теперь в каждом посте в скобках (в конце) будут указываться номера уроков. Буква в начале номера обозначает раздел (B-Beginner, I — Intermediate).

PS: Если вы не проходили предыдущие уроки, очень рекомендую их пройти, т.к. последующие изредка на них ссылаются.

Базовый Урок 04 — Уничтожение объектов

В уроке рассказывается как удалять объекты со сцены, использую команду Destroy (уничтожить).

Создайте пустую сцену и добавьте в нее сферу (GameObject->Create Other->Sphere) и куб (GameObject->Create Other->Cube). Куб назовем “Box”. Расположите объекты как показано на рисунке ниже.
Time deltatime что это. 602c7453af013d9a7c89af9980c71bb7. Time deltatime что это фото. Time deltatime что это-602c7453af013d9a7c89af9980c71bb7. картинка Time deltatime что это. картинка 602c7453af013d9a7c89af9980c71bb7

Добавьте C#-Скрипт (Project View->Create->C# Script) и назовите его Destroyer. Как уже говорилось, при создании C#-скрипта Unity создает некий каркас, состоящий из подключенных библиотек и основного класса (используемого скриптом) с методами Start() и Update(). В Базовом Уроке 02 (основы ввода) использовался метод Update(), который вызывается каждый кадр. В данном случае мы воспользуемся методом Start(), который выполняется сразу после загрузки сцены. Добавим в тело метода Start() функцию Destroy() и передадим в нее gameObject, указав таким образом, что скрипт должен уничтожить объект, компонентом которого он является:

Добавим скрипт к сфере. Сделать это можно несколькими путями. Перетащив скрипт из Project View на сферу в Scene View.
Time deltatime что это. 211fb84cd94a7d1a3c1eda4e5cb08b04. Time deltatime что это фото. Time deltatime что это-211fb84cd94a7d1a3c1eda4e5cb08b04. картинка Time deltatime что это. картинка 211fb84cd94a7d1a3c1eda4e5cb08b04

Или на имя объекта в Hierarchy.
Time deltatime что это. 36829431b600476969497bef38ddfadc. Time deltatime что это фото. Time deltatime что это-36829431b600476969497bef38ddfadc. картинка Time deltatime что это. картинка 36829431b600476969497bef38ddfadc

Так же можно выбрать сферу и добавить скрипт через меню компонентов (Component->Scripts->Destroyer) или просто перетащив скрипт в Inspector View выбранного объекта.
Time deltatime что это. 45d1277d36cf8b93a312cce116807b48. Time deltatime что это фото. Time deltatime что это-45d1277d36cf8b93a312cce116807b48. картинка Time deltatime что это. картинка 45d1277d36cf8b93a312cce116807b48

Снова выберите сферу и убедитесь, что среди компонентов присутствует ваш скрипт.
Time deltatime что это. b0403. Time deltatime что это фото. Time deltatime что это-b0403. картинка Time deltatime что это. картинка b0403

Нажмите на Play и вы увидите, что сразу после загрузки сцены сфера исчезает.
Time deltatime что это. b0404. Time deltatime что это фото. Time deltatime что это-b0404. картинка Time deltatime что это. картинка b0404

Давайте теперь попробуем уничтожить другой объект. Для этого нам понадобится статический метод Find класса GameObject. Заменим код в методе Start() следующим:

Примечание от автора перевода: Обратите внимание, что во втором случае мы передаем значение, вызывая статическую функцию, поэтому пишем имя класса (GameObject — с большой буквы), в то время как в первом мы передаем объект этого класса (gameObject — с маленькой буквы). В противном случае компилятор выдаст ошибку:

error CS0176: Static member `UnityEngine.GameObject.Find(string)’ cannot be accessed with an instance reference, qualify it with a type name instead

что переводится как:
“статический член UnityEngine.GameObject.Find(string) не может быть доступен по ссылки экземпляра (класса), вместо этого определите (вызовите) его с именем типа.”

Сохраним изменения в коде скрипта. Скрипт не требуется убирать со сферы и добавлять к нашему кубу, т.к. назависимо от того, к какому объекту он теперь прикреплен, скрипт будет искать любой объект (на сцене) с именем Box. Нажмем Play и увидим как теперь сфера остается в сцене, а куб пропадает.
Time deltatime что это. b0405. Time deltatime что это фото. Time deltatime что это-b0405. картинка Time deltatime что это. картинка b0405

Что делать, если нам требуется уничтожить объект не сразу, а спустя какое-то время? Это можно сделать передав значение во 2ой параметр функции Destroy:

Нажмите Play и убедитесь, что куб изчезает через 3и секунды после того, как сцена целиком загрузится.

Дополнительные материалы:

Базовый Урок 05 — Реализация создание объектов

В уроке рассказывается как создавать объекты в сцене в реальном времени (runtime), используя префабы и команду Instantiate (инстанциирование)

Если вы хотите добавлять объекты на сцену, когда сцена уже загружена, то вам требуется использовать скрипты, а точнее команду Instantiate().

Загрузите сцену из Базового урока 03 (Префабы) или создайте такую же новую. В нашей сцене присутствует префаб BouncyBox.
Time deltatime что это. a9c20463392be04283ed51279a6ff151. Time deltatime что это фото. Time deltatime что это-a9c20463392be04283ed51279a6ff151. картинка Time deltatime что это. картинка a9c20463392be04283ed51279a6ff151

Нажмите Play и убедитесь, что куб по-прежнему падает и отталкивается от поверхностей.
Теперь удалите со сцены экземпляр BouncyBox.
Time deltatime что это. b5b083bee9d81941b87ae0365a998697. Time deltatime что это фото. Time deltatime что это-b5b083bee9d81941b87ae0365a998697. картинка Time deltatime что это. картинка b5b083bee9d81941b87ae0365a998697

После этого добавьте пустой объект (напоминаю, GameObject->Create Empty или Ctrl + Shift + N в Windows, Cmd + Shift + N в MacOS). Расположите его примерно в том месте, где раньше был экземпляр BouncyBox.
Time deltatime что это. e43972c0f39feb3c235d00f722fdf28d. Time deltatime что это фото. Time deltatime что это-e43972c0f39feb3c235d00f722fdf28d. картинка Time deltatime что это. картинка e43972c0f39feb3c235d00f722fdf28d

Создадим C#-Скрипт и назовем его Creater. Начнем редактирование скрипта. Заведем открытую (public) переменную типа GameObject и назовем ее thePrefab. Модификатор public требуется указывать, если, например, вы хотите передавать значение переменной через Inspector View. После чего в теле функции Start() создадим еще один GameObject (с именем instance) и проинициализируем его значением с помощью статической функции Instantiate().

Рассмотрим метод Instantiate() подробнее.

Метод клонирует объект original с заданными вектором положения (position) и кватернионом поворота (rotation).
Тип Vector3 является обычным 3х компонентым вектором (аналогично вектору из R 3 ).
Тип Quaternion — кватернион, задающий поворот объекта.

Добавьте скрипт к пустому объекту (c именем GameObject).Напоминаю, поскольку thePrefab объявлен с модификатором public, вы можете задавать его начальное значение прямо в Inspector View (у соответствующего компонента, то есть в нашем случае это Creator у GameObject’а). Перетащите наш префаб в место указания значения (или выберете его из списка, кликнув на кружок справа).
Time deltatime что это. 5871c6be3bf62675e92f57fd8f92d3a3. Time deltatime что это фото. Time deltatime что это-5871c6be3bf62675e92f57fd8f92d3a3. картинка Time deltatime что это. картинка 5871c6be3bf62675e92f57fd8f92d3a3

Нажмем Play и увидим, что на сцене появился наш прыгающий кубик.
Time deltatime что это. b0504. Time deltatime что это фото. Time deltatime что это-b0504. картинка Time deltatime что это. картинка b0504

Но наш кубик прыгает просто вверх и вниз, потому что не имеет начального угла поворота. Выберите GameObject и поверните его под небольшим углом.

Теперь, нажав Play, вы увидите, что кубик падает и отталкивается под различными углами.
Time deltatime что это. e8527b147def4aec38429464f65ed7bc. Time deltatime что это фото. Time deltatime что это-e8527b147def4aec38429464f65ed7bc. картинка Time deltatime что это. картинка e8527b147def4aec38429464f65ed7bc

Дополнительные материалы:

Базовый Урок 06 — Простой таймер

В данном уроке рассказывается как в Unit при помощи скриптов
создавать простой таймер, используя Time.deltaTime и переменную типа float.

Воспользуемся сценой из предыдущего урока (с пустым игровым объектом,
генерирующим экземпляры префаба, т.е. BouncyBox).
Time deltatime что это. a8f2f897ce9a8b26dfa0a36a26dd949e. Time deltatime что это фото. Time deltatime что это-a8f2f897ce9a8b26dfa0a36a26dd949e. картинка Time deltatime что это. картинка a8f2f897ce9a8b26dfa0a36a26dd949e

Создадим С#-скрипт и назовем его Timer. Добавим переменную myTimer, и напишем следующий код.

Сохраняем скрипт и переключаемся назад в Unity. Добавим скрипт к объекту GameObject.
Time deltatime что это. b0601. Time deltatime что это фото. Time deltatime что это-b0601. картинка Time deltatime что это. картинка b0601

Напомню, т.к. myTimer объявлена открытой (public), то в Inspector View вы можете менять ее начальное значение.

Жмем Play. Как только значение myTimer упадет до нуля, в статус баре вы увидите строку GAME OVER. Значение переменной myTimer будет продолжать опускаться (это можно увидеть в Inspector View).
Time deltatime что это. b0602. Time deltatime что это фото. Time deltatime что это-b0602. картинка Time deltatime что это. картинка b0602

Для того, чтобы переменная myTimer не опускалась ниже нуля, добавим еще одно ветвление в функцию Update(), в итоге мы получаем следующий код:

Нажмем Play и проследим за поведением переменной myTimer. Когда ее значение будет достаточно близким к нулю, то оно перестанет изменяться.
Time deltatime что это. b0603. Time deltatime что это фото. Time deltatime что это-b0603. картинка Time deltatime что это. картинка b0603

Дополнительные материалы:

Базовый Урок 07 — Основы движения

В уроке рассказывается, как двигать объекты c помощью функции transform.Translate.

Создадим сцену с кубом, камерой и источником света.
Time deltatime что это. b0700. Time deltatime что это фото. Time deltatime что это-b0700. картинка Time deltatime что это. картинка b0700

Создадим новый C#-скрипт и назовем его Move.
Поскольку движение должно быть непрерывно во времени, то основной код будет располагаться в методе Update(). Вызовем функцию Translate, объекта transform и передадим ей в качестве параметра Vector3(0, 0, 1). Получим следующий код:

Разберемся подробнее в коде. Тут transform — это объект класса Transform, привязанный к нашему объекту. Метод Translate() двигает объект вдоль вектора на расстояние равное его длине (параллельный перенос).

Сохраним наш скрипт и добавим его к нашему кубу. Нажмите Play и увидите как куб стремительно улетает вдоль оси Oz.

Time deltatime что это. b0701. Time deltatime что это фото. Time deltatime что это-b0701. картинка Time deltatime что это. картинка b0701

Давайте уменьшим скорость движения, например, умножив наш вектор на Time.deltaTime, то есть:

Нажмите Play и убедитесь, что куб начинает двигаться заметно медленнее.

Можно сделать наш скрипт более удобным в использовании, если скорость задать не фиксированным вектором, а через переменную. Заведем public переменную типа float и назовем ее speed. С помощью этой переменной можно будет задавать начальную скорость через Inspector View (по умолчанию она будет равна 5.0f):

Сохраним скрипт и убедимся, что в Inspector View у компонента Move появилась переменная Speed.
Time deltatime что это. b0702. Time deltatime что это фото. Time deltatime что это-b0702. картинка Time deltatime что это. картинка b0702

Посмотрите, как будет меняться скорость движения нашего объекта в соответствии с заданным начальным значением этой переменной. Например, при Speed = 3 скорость объекта не очень быстрая, но и не медленная.

Примечение: Для выражения Vector3(0.0f, 0.0f, 1.0f) существует короткая (но видимо чуть более медленная, если не прав, прошу поправить) запись Vector3.forward.

Кусок кода из обертки:

Дополнительные материалы:

Базовый Урок 08 — Основы движения с помощью силы.

В уроке рассказывается как c помощью приложения силы двигать физическое тело (Rigidbody).

Если у вас на сцене есть объект с компонентом Rigidbody, то нужно задавать ему движение с помощью приложения силы (передав таким образом все расчеты движения физическому движку игры). В противном случае вы можете начать конфликтовать с физикой объекта. Мы по-прежнему используем сцену из Базового урока 03.

Time deltatime что это. b0800. Time deltatime что это фото. Time deltatime что это-b0800. картинка Time deltatime что это. картинка b0800

Создадим C#-скрипт и назовем его Force. В методе Start() вызовем метод AddForce() компонента rigidbody (cвязанного с нашим объектом) и передадим ему вектор приложенной силы Vector3(0.0f, 0.0f, power). В классе заведем переменную типа float с именем power и значением, по умолчанию равным 500.0f:

Сохраним скрипт и добавим его к нашему объекту (или префабу). Теперь, если нажать Play, вы увидите как куб падает не вниз а под углом, из-за воздействия силы приложенной вдоль оси Oz.
Time deltatime что это. b0801. Time deltatime что это фото. Time deltatime что это-b0801. картинка Time deltatime что это. картинка b0801

Источник

Time deltatime что это

Главная » Введение в скрипты Unity — часть 1

Введение в скрипты Unity — часть 1

Создание скриптов — неотъемлемая часть даже самых простых игр. Эти небольшие наборы кода работают вместе, чтобы делать самые разные вещи.

Версия: C# 7.3, Unity 2019.2, Unity

Создание скриптов — неотъемлемая часть даже самых простых игр. Эти небольшие наборы кода работают вместе, чтобы делать самые разные вещи: от перемещения персонажа по экрану до отслеживания инвентаря. Разработчики игр пишут скрипты в Unity на C#, мощном объектно-ориентированном языке программирования, разработанном Microsoft около 2000 года. С тех пор он стал одним из самых популярных языков программирования. Команда Unity выбрала C# в качестве основного языка программирования Unity, поскольку он хорошо документирован, прост в освоении и гибок.

В основе Unity лежит хорошо документированный API, с которым могут взаимодействовать скрипты. В этом уроке вы создадите простую игру — начав с нескольких моделей и изучив, как использовать наиболее важные части Unity API. Вы узнаете, как создавать скрипты C#, которые:

Перед началом убедитесь, что вы соответствуете следующим требованиям:

Итак, вы готовы открыть для себя Unity API, создав простую игру!

Приступая к работе

Скачайте материалы для проекта с помощью кнопки «Скачать материалы урока» вверху страницы, распакуйте их куда-нибудь и откройте стартовый проект в Unity.

Для начала обратите внимание на окно Project и разверните папку RW. Этот проект поставляется с набором готовых ассетов, которые вы будете использовать, чтобы вдохнуть жизнь в игру с помощью скриптов:

Time deltatime что это. p1. Time deltatime что это фото. Time deltatime что это-p1. картинка Time deltatime что это. картинка p1

Чтобы сосредоточиться на написании скриптов, вот включенные папки ресурсов и их содержимое:

Теперь откройте сцену Game в папке RW / Scenes, если она еще не открыта, и посмотрите вокруг в режиме просмотра Scene.

Time deltatime что это. p2. Time deltatime что это фото. Time deltatime что это-p2. картинка Time deltatime что это. картинка p2

Есть несколько плавучих островов с ветряными мельницами, мостами и небольшой железнодорожной веткой, на которой стоит синяя сенокосилка. Теперь взглянем на Иерархию:

Time deltatime что это. p3. Time deltatime что это фото. Time deltatime что это-p3. картинка Time deltatime что это. картинка p3

Вот краткий обзор игровых объектов:

Затем нажмите кнопку воспроизведения в верхней части редактора и посмотрите на представление Game, чтобы увидеть, что происходит.

Time deltatime что это. p4. Time deltatime что это фото. Time deltatime что это-p4. картинка Time deltatime что это. картинка p4

Единственные признаки жизни на данный момент — частицы дыма, вылетающие из сеноуборочной машины. В ближайшее время такая игра не получит ни одной награды за игру года, но это хорошая основа для дальнейшего развития.

Нажмите кнопку play еще раз, чтобы остановить тестирование «игры».

Теперь, когда вы знакомы с проектом, пора приступить к написанию скриптов!

Ваш первый скрипт

Создавать новые скрипты в Unity довольно просто. Щелкните правой кнопкой мыши папку RW / Scripts, выберите Create > C# Script и назовите скрипт Rotate.

Time deltatime что это. p5. Time deltatime что это фото. Time deltatime что это-p5. картинка Time deltatime что это. картинка p5

Хотя скрипт еще ничего не делает, вы уже можете использовать его как компонент, прикрепив его к игровому объекту. В этом случае скрипт Rotate будет вращать колеса всех ветряных мельниц.

Компоненты — это экземпляры скриптов, что означает, что вы можете добавить столько компонентов к любому игровому объекту, сколько захотите. Любые изменения, внесенные в скрипт, отразятся на всех его компонентах.

Разверните Scenery в Иерархии, чтобы раскрыть его потомков. Откройте Windmill в редакторе префабов, щелкнув стрелку рядом с его названием.

Time deltatime что это. p6. Time deltatime что это фото. Time deltatime что это-p6. картинка Time deltatime что это. картинка p6

Примечание. Редактор Unity недавно обновил систему префабов. Чтобы получить более подробное представление о новой системе, ознакомьтесь с этим замечательным руководством!

Выберите Wheel, это потомок Windmill. Теперь нажмите кнопку Add Component в нижней части Инспектора, начните вводить «rotate», пока в списке не появится компонент Rotate, и выберите его.

Time deltatime что это. p7. Time deltatime что это фото. Time deltatime что это-p7. картинка Time deltatime что это. картинка p7

Это добавит компонент Rotate к колесам всех ветряных мельниц.

Чтобы отредактировать скрипт, вам нужно открыть его в редакторе кода, таком как Visual Studio. Есть несколько способов открыть скрипт, но самый простой — найти исходный файл в окне Project и дважды нажать на него. Двойной щелчок по полю Script любого компонента также работает:

Time deltatime что это. p8. Time deltatime что это фото. Time deltatime что это-p8. картинка Time deltatime что это. картинка p8

Используйте любой из описанных выше методов, чтобы открыть скрипт Rotate в редакторе кода по умолчанию. Вот как это выглядит в Visual Studio:

Time deltatime что это. p9. Time deltatime что это фото. Time deltatime что это-p9. картинка Time deltatime что это. картинка p9

Сам скрипт представляет собой единый класс, производный от MonoBehaviour, базового класса Unity, от которого должны быть унаследованы все скрипты, если их нужно использовать в качестве компонентов.

MonoBehaviour является частью пространства имен UnityEngine и реализует несколько общедоступных методов, но, что более важно, огромный список функций событий.

Примечание. Функции — это другое название методов, все они являются подпрограммами. В языках ООП, таких как C#, вам следует использовать термин «метод», но Unity предпочитает вместо этого использовать функцию при описании большинства своих встроенных методов.

Unity по умолчанию добавляет методы Start и Update во все новые скрипты. На самом деле это функции событий, они вызываются, когда их запускает определенное действие. Вот несколько наиболее распространенных функций обработки событий, и когда они вызываются:

В ходе этого урока вы будете использовать гораздо больше таких функций-обработчиков, поскольку они являются важной частью создания скриптов. Вы можете проверить полный список функций событий в документации Unity.

Добавьте следующую строку внутри метода Update :

Эта строчка кода, которая постоянно создает вращение по оси Y с течением времени, уже демонстрирует некоторые возможности Unity API:

Примечание. Редактор Unity использует углы Эйлера для изменения поворота игрового объекта — это знакомые оси X, Y и Z. На самом деле движок Unity внутренне использует кватернионы, которые состоят из значений X, Y, Z и W. Эти значения очень сложно интерпретировать, и они не предназначены для прямого использования. Чтобы узнать больше о различиях, взгляните на документацию Unity по этому вопросу.

Сохраните этот скрипт и вернитесь в редактор.

Вы заметите, что редактор не будет отвечать в течение очень короткого времени, пока он компилирует скрипт. Вы можете проверить, когда происходит эта компиляция, посмотрев в нижний правый угол редактора, там будет небольшой анимированный значок:

Time deltatime что это. p10. Time deltatime что это фото. Time deltatime что это-p10. картинка Time deltatime что это. картинка p10

Если вы еще не вышли из режима редактирования префаба, сделайте это сейчас, щелкнув стрелку влево рядом с префабом Windmill в Иерархии. Вам будет предложено сохранить или отменить изменения. Нажмите на кнопку Save.

Time deltatime что это. p11. Time deltatime что это фото. Time deltatime что это-p11. картинка Time deltatime что это. картинка p11

Теперь запустите воспроизведение сцены. Вы заметите, что колеса ветряной мельницы теперь медленно вращаются, так расслабляюще.

Time deltatime что это. p12. Time deltatime что это фото. Time deltatime что это-p12. картинка Time deltatime что это. картинка p12

Теперь предположим, что вы хотите настроить скорость вращения колес или добавить компонент Rotate к другому игровому объекту, который должен вращаться по другой оси. Было бы неплохо, если бы вы могли изменить эти значения в редакторе?

Вот тут-то и пригодятся переменные!

Переменные

Переменные — это контейнеры данных, в которых хранится информация. Они могут варьироваться от жизней и денег игрока до ссылки на префаб, который появляется в сцене. Как только вы добавите их в скрипт, вы можете редактировать их значения в редакторе.

Откройте скрипт Rotate в вашем любимом редакторе кода и добавьте следующую строку прямо над методом Start :

Эта переменная изменит скорость и по какой оси будет происходить вращение.

Модификатор public в контексте Unity означает, что эта переменная будет доступна редактору и другим классам.

Vector3 — это структура, в которой хранятся значения X, Y и Z, Vector3 может использоваться для передачи положения, поворота или масштаба игрового объекта.

Теперь замените эту строку:

Всегда выбирайте переменную вместо «магического числа», такого как 50, которые вы добавили ранее. Это позволит вам изменять и повторно использовать значения, не открывая скрипт.

Теперь сохраните скрипт и вернитесь в редактор. Откройте префаб Windmill из Иерархии, как вы делали раньше, и снова выберите игровой объект Wheel.

Взгляните на Inspector, компонент Rotate теперь имеет поле, которое вы можете настроить:

Time deltatime что это. p13. Time deltatime что это фото. Time deltatime что это-p13. картинка Time deltatime что это. картинка p13

Измените значение Y в поле Rotation Speed на 120 и выйдите из режима префаба, нажав на стрелку в верхнем левом углу Иерархии, и сохранив изменения при появлении запроса.

Time deltatime что это. p14. Time deltatime что это фото. Time deltatime что это-p14. картинка Time deltatime что это. картинка p14

Теперь поиграйте в сцену. Колеса вращаются, как и раньше, но чуть быстрее.

Огромным преимуществом наличия переменных в редакторе является то, что вы можете изменять их в режиме воспроизведения! Выберите колесо одной из ветряных мельниц в окне Hierarchy и попробуйте изменить параметр скорости вращения Rotation Speed. Вы можете перемещать значение Y слева направо или изменять число напрямую.

Time deltatime что это. p15. Time deltatime что это фото. Time deltatime что это-p15. картинка Time deltatime что это. картинка p15

Это приведет к тому, что колесо изменит свою скорость в реальном времени:

Time deltatime что это. p16. Time deltatime что это фото. Time deltatime что это-p16. картинка Time deltatime что это. картинка p16

После выхода из режима игры все значения, которые вы установили для игровых объектов в Иерархии, будут сброшены. Это отличный способ поиграть со значениями и посмотреть, что работает лучше всего. Вы можете настроить высоту прыжка персонажа, количество здоровья вражеских орков или даже расположение элементов пользовательского интерфейса.

Конечно, как только вы найдете нужные значения, вы можете сохранить их, чтобы они применялись каждый раз при запуске игры. Самый надежный способ сделать это — скопировать и вставить значения в компоненты и использовать префабы.

Находясь в режиме игры, измените вращение одного из колес на все, что, по вашему мнению, выглядит хорошо, например, на 150 по оси Y. Теперь щелкните правой кнопкой мыши компонент Rotate вокруг его имени в Инспекторе или щелкните левой кнопкой мыши шестеренку параметров в правом верхнем углу компонента и выберите Copy Component. Это скопирует компонент и его значения в буфер обмена.

Time deltatime что это. p17. Time deltatime что это фото. Time deltatime что это-p17. картинка Time deltatime что это. картинка p17

Далее остановите режим воспроизведения. Вы заметите, что скорость возвращается к своему прежнему значению в Inspector. Щелкните правой кнопкой мыши имя компонента Rotate и выберите Paste Component Values. Все значения, которые вы скопировали, теперь вставляются в компонент Rotate.

Time deltatime что это. p18. Time deltatime что это фото. Time deltatime что это-p18. картинка Time deltatime что это. картинка p18

Хотя это изменило скорость вращения одной из ветряных мельниц, вы хотите применить такое значение ко всем. Для этого выберите ветряную мельницу, которую вы изменили, и выберите Overrides > Apply All в правом верхнем углу Inspector, чтобы применить все изменения к префабу Windmill.

Time deltatime что это. p19. Time deltatime что это фото. Time deltatime что это-p19. картинка Time deltatime что это. картинка p19

Ввод игрока и создание экземпляров префабов

Игра не была бы игрой, если бы не требовалось определенного уровня участия игрока. Скрипты могут получать состояние клавиатуры, мыши и любых подключенных геймпадов. Первая цель — заставить эту маленькую машинку двигаться по рельсам слева направо.

Движение

Создайте новый скрипт C# в RW / Scripts, назовите его HayMachine и откройте его в редакторе кода.

Добавьте следующие переменные прямо над Start :

Эта переменная позволит вам указать скорость, с которой может двигаться машина.

Теперь добавьте этот метод ниже Update :

Этот фрагмент кода перемещает сеноуборочную машину, используя горизонтальный ввод игрока:

Когда Unity не обнаруживает никаких вводных данных, horizontalInput останется на 0 и машина не будет двигаться.

Теперь, чтобы вызвать метод, который вы добавили для каждого кадра, добавьте к нему вызов в Update :

Затем сохраните этот скрипт и вернитесь в редактор. Выберите Hay Machine в Иерархии и добавьте к нему компонент Hay Machine.

Time deltatime что это. p21. Time deltatime что это фото. Time deltatime что это-p21. картинка Time deltatime что это. картинка p21

Установите Movement Speed на 14 и воспроизведите сцену. Используйте клавиши со стрелками или A и D для перемещения машины слева направо. Все работает!

Time deltatime что это. p22. Time deltatime что это фото. Time deltatime что это-p22. картинка Time deltatime что это. картинка p22

К сожалению, вы можете переместить машину за пределы рельсов и даже за пределы экрана, это не правильно. Вам нужно будет установить некоторые границы, чтобы машина не двигалась слишком далеко.

Снова откройте скрипт HayMachine и добавьте следующую переменную под другими:

Эта переменная будет использоваться для ограничения движения по оси X. В качестве значения по умолчанию присваивается 22, это будет начальное значение, которое также будет заполнено в редакторе.

Вот что изменилось:

Изображение ниже более наглядно иллюстрирует происходящее:

Time deltatime что это. p23. Time deltatime что это фото. Time deltatime что это-p23. картинка Time deltatime что это. картинка p23

Белые линии слева и справа обозначают границы, линия, проходящая через машину, является ее центром. Перемещение машины в любом направлении «блокирует» ее при достижении границы:

Time deltatime что это. p24. Time deltatime что это фото. Time deltatime что это-p24. картинка Time deltatime что это. картинка p24

Сохраните скрипт и вернитесь в редактор. Попробуйте воспроизвести сцену и еще раз переместить машину влево и вправо. Машина останавливается, как только она перемещается к одному из краев.

Далее вы будете реализовывать скрипт стрельбы тюками сена!

Создание и стрельба снарядами

Прежде чем вы сможете начать что-либо запускать, вам нужно создать игровой объект для сена. Начните с создания нового пустого игрового объекта в окне Hierarchy, нажав правой кнопкой мыши на пустое пространство и выбрав Create Empty. Это создаст пустой игровой объект с именем GameObject в корне Иерархии.

Не снимая выделения с пустого GameObject, измените его имя на Hay Bale в Инспекторе и сбросьте его компонент Transform, щелкнув правой кнопкой мыши на компонент Transform и выбрав Reset.

Time deltatime что это. p25. Time deltatime что это фото. Time deltatime что это-p25. картинка Time deltatime что это. картинка p25

Теперь добавьте 3D-модель в Hay Bale, перетащив модель Hay Bale из RW / Models на Hay Bale в Иерархии. Не снимая выделения с модели Hay Bale, назовите ее Hay Bale Model и сбросьте ее компонент Tranform. Теперь вы заметите сено, твердо стоящее на поверхности, как в режиме сцены, так и в режиме игры.

Time deltatime что это. p26. Time deltatime что это фото. Time deltatime что это-p26. картинка Time deltatime что это. картинка p26

Затем выберите Hay Bale и добавьте следующие компоненты с помощью кнопки Add Component:

Time deltatime что это. p27. Time deltatime что это фото. Time deltatime что это-p27. картинка Time deltatime что это. картинка p27

Теперь, когда сено имеет необходимые компоненты для использования физики и может вращаться для анимации, пришло время настроить его.

Тюк будет сброшен сеноуборочной машиной и полетит прямо вперед, не подвергаясь воздействию силы тяжести. Позже в этом уроке, когда вы добавите овец, они будут использоваться, чтобы овцы не причиняли себе вреда.

Для начала установите флажок Is Trigger на Box Collider, чтобы тюк не мог толкать твердые тела. Затем установите флажок Is Kinematic на его Rigidbody, чтобы сено не провалилось сквозь поверхность. Наконец, установите Rotation Speed при вращении на (X: 300, Y: 50, Z: 0).

Сохраните сцену и нажмите кнопку воспроизведения. Вы заметите, что сено крутится на месте.

Time deltatime что это. p28. Time deltatime что это фото. Time deltatime что это-p28. картинка Time deltatime что это. картинка p28

Чтобы сено двинулось вперед, вам нужно написать еще один служебный скрипт. Создайте новый скрипт C# в RW / Scripts, назовите его Move и откройте его в редакторе кода.

Добавьте следующие объявления переменных в начало класса прямо над методом Start :

Вот для чего они нужны:

Теперь добавьте в Update следующее:

Это то, что на самом деле перемещает игровой объект с помощью translation, это геометрический термин, который означает преобразование точки на расстояние в заданном направлении. По сути, это означает перемещение игрового объекта в контексте Unity.

Сохраните этот скрипт и вернитесь в редактор. Добавьте компонент Move в Hay Bale, установите для него Movement Speed на (X: 0, Y: 0, Z: 20) и оставьте Space равным World.

Time deltatime что это. p29. Time deltatime что это фото. Time deltatime что это-p29. картинка Time deltatime что это. картинка p29

Теперь запустите воспроизведение сцены, и вы увидите, как тюк сена летит к мостам и исчезает с экрана, отлично!

Time deltatime что это. p30. Time deltatime что это фото. Time deltatime что это-p30. картинка Time deltatime что это. картинка p30

Перетащите Hay Bale в папку RW / Prefabs, чтобы превратить его в префаб, и удалите оригинал из иерархии. Теперь вы сможете ссылаться на этот префаб, чтобы создавать больше игровых объектов типа Hay Bale, когда захотите.

Чтобы сеноуборочная машина выбрасывала тюки, вам нужно написать скрипт. Откройте скрипт HayMachine и добавьте следующие объявления переменных прямо над Start :

Вот краткое объяснение переменных:

Теперь добавьте метод ShootHay под UpdateMovement :

Чтобы вызвать приведенный выше код, вам понадобится код для запроса ввода. Добавьте следующий метод чуть выше ShootHay :

Вот что делает этот блок кода:

Это вызывает метод над каждым кадром.

Теперь сохраните скрипт и вернитесь в редактор. Выберите Hay Machine в Иерархии, разверните его, щелкнув стрелку слева, и посмотрите на окно Inspector.

Time deltatime что это. p31. Time deltatime что это фото. Time deltatime что это-p31. картинка Time deltatime что это. картинка p31

Новые общедоступные переменные, которые вы только что добавили, стали полями, которые можно назначать. Перетащите Hay Bale из RW \ Prefabs в слот Hay Bale Prefab, перетащите дочерний игровой объект Hay Spawnpoint, который находится в Hay Machine, в слот Hay Spawnpoint и установите интервал стрельбы на 0,8.

Time deltatime что это. p32. Time deltatime что это фото. Time deltatime что это-p32. картинка Time deltatime что это. картинка p32

Теперь сохраните сцену и нажмите кнопку воспроизведения. Перемещайте сеноуборочную машину с помощью клавиш со стрелками и стреляйте сеном с помощью клавиши пробела!

Time deltatime что это. p33. Time deltatime что это фото. Time deltatime что это-p33. картинка Time deltatime что это. картинка p33

Все должно работать как на GIF-изображении выше.

Возможно, вы заметили, что тюки никогда не разрушаются и продолжают бесконечно улетать в никуда.

Time deltatime что это. p34. Time deltatime что это фото. Time deltatime что это-p34. картинка Time deltatime что это. картинка p34

Чтобы исправить это, вы разумно примените триггеры, теги и пару строк кода.

Теги и реакция на физику

Создать новый тег довольно просто: выберите Edit > Project Settings. в верхнем меню и откройте вкладку Tags and Layers в окне Project Settings. Теперь разверните список тегов, и вы заметите, что в проекте уже есть два предварительно загруженных тега: DestroyHay и DropSheep.

Time deltatime что это. p35. Time deltatime что это фото. Time deltatime что это-p35. картинка Time deltatime что это. картинка p35

Нажмите кнопку + под списком тегов, назовите новый тег Hay и нажмите кнопку Save, чтобы добавить этот новый тег в список.

Time deltatime что это. p36. Time deltatime что это фото. Time deltatime что это-p36. картинка Time deltatime что это. картинка p36

После добавления тега Hay закройте окно настроек проекта и выберите Hay Bale в папке RW \ Prefabs. Откройте раскрывающееся меню Tag прямо под полем имени и выберите Hay.

Time deltatime что это. p37. Time deltatime что это фото. Time deltatime что это-p37. картинка Time deltatime что это. картинка p37

Теперь разница между тюками сена и другими игровыми объектами очевидна: вы можете добавить область, которая разрушает сено при соприкосновении с ним. Добавьте новый пустой игровой объект в Hierarchy и назовите его Triggers. Сбросьте его Transform и добавьте пустой GameObject в качестве его дочернего элемента. Назовите этого потомка Hay Destroyer.

Time deltatime что это. p38. Time deltatime что это фото. Time deltatime что это-p38. картинка Time deltatime что это. картинка p38

Выберите Hay Destroyer, установите его положение на (X: 0, Y: 4, Z: 68) и добавьте к нему Box Collider. Установите флажок Is Trigger на Box Collider и установите Size на (X: 60, Y: 8, Z: 12). Затем измените тег на DestroyHay. Теперь вы должны увидеть огромный коллайдер в форме прямоугольника, появившийся в представлении сцены, прямо за пределами поля обзора камеры.

Time deltatime что это. p39. Time deltatime что это фото. Time deltatime что это-p39. картинка Time deltatime что это. картинка p39

Теперь, чтобы этот триггер уничтожил любое сено, вам нужно написать еще один служебный скрипт. Создайте новый сценарий C # внутри RW \ Scripts, назовите его DestroyOnTrigger и откройте его в редакторе кода. Полностью удалите методы Start и Update и добавьте вместо них это объявление переменной:

Эта строка позволит вам ввести имя любого тега, который уничтожит этот игровой объект.

Теперь добавьте этот метод под только что добавленной переменной:

Вот что происходит:

Сохраните этот скрипт и вернитесь в редактор. Время проверить!

Выберите Hay Bale в RW \ Prefabs, добавьте компонент Destroy On Trigger и измените Tag Filter на DestroyHay.

Time deltatime что это. p40. Time deltatime что это фото. Time deltatime что это-p40. картинка Time deltatime что это. картинка p40

Теперь нажмите кнопку play и попробуйте снова коснуться сена. Вы заметите, что любое сено, попавшее в Hay Destroyer, мгновенно уничтожается.

Time deltatime что это. p41. Time deltatime что это фото. Time deltatime что это-p41. картинка Time deltatime что это. картинка p41

Теперь, когда у вас есть полный контроль над сеноуборочной машиной и ее снарядами, пора познакомить с пушистыми друзьями.

Скрипты для овец

В игре, которую вы создаете, стая овец в панике бежит к вам, ни перед чем не останавливаясь. К несчастью для них, это касается выступа сразу за машиной, ага!

Теперь овца в Инспекторе должна выглядеть так:

Time deltatime что это. p42. Time deltatime что это фото. Time deltatime что это-p42. картинка Time deltatime что это. картинка p42

Перетащите модель Sheep из RW \ Models на Sheep, чтобы придать ей визуальные эффекты. Назовите игровой объект, который вы только что добавили, Sheep Model, сбросьте его Transform и установите поворот по оси X на -90, чтобы голова выходила из поверхности.

Time deltatime что это. p43. Time deltatime что это фото. Time deltatime что это-p43. картинка Time deltatime что это. картинка p43

Теперь эта овца готова к написанию скрипта!

Примечание. До сих пор вы создавали общие скрипты, которые можно повторно использовать для любого игрового объекта или даже других проектов. Скрипт, который вы собираетесь написать, намного более конкретен, потому что его взаимодействие довольно уникально и со временем будет усложняться по мере добавления в игру дополнительных функций.

Создайте новый скрипт C# с именем Sheep в RW \ Scripts и откройте его в редакторе кода.

Для начала овце просто нужно бежать вперед и исчезнуть, когда ее ударит тюк сена. Добавьте следующие объявления переменных прямо над Start :

Вот для чего они нужны:

Разобравшись с этим, добавьте эту строку в Update :

Затем добавьте этот метод ниже Update :

Вот суть этого метода:

Последняя часть заставляет овцу реагировать на физику, с добавлением следующего кода:

Вот что это делает:

На этом пока что, сохраните скрипт и вернитесь в редактор. Выберите Sheep в Иерархии и добавьте компонент Sheep. Установите Run Speed на 10 и Got Hay Destroy Delay на 1.

Time deltatime что это. p44. Time deltatime что это фото. Time deltatime что это-p44. картинка Time deltatime что это. картинка p44

Теперь запустите воспроизведение сцены, выстрелите в овцу и посмотрите, что произойдет!

Time deltatime что это. p45. Time deltatime что это фото. Time deltatime что это-p45. картинка Time deltatime что это. картинка p45

Потрясающие! Овца перестает двигаться и исчезает, как вы это и закодировали. Что произойдет, если овца пробежит мимо, а вы ее не пристрелите? Перезапустите сцену и проверьте это.

Овечка пролетает через край как по волшебству, это никуда не годится! Вам нужно будет создать еще одну зону срабатывания, чтобы скрипт Sheep мог обнаруживать столкновения с ней и соответствующим образом реагировать.

Time deltatime что это. p46. Time deltatime что это фото. Time deltatime что это-p46. картинка Time deltatime что это. картинка p46

Когда овца касается этого триггера, она должна упасть и исчезнуть из поля зрения. Чтобы реализовать это, вам необходимо внести некоторые изменения в скрипт Sheep. Снова откройте его в редакторе кода и добавьте следующие объявления переменных ниже существующих:

Они говорят сами за себя, но вот краткий обзор:

Теперь назначьте необходимые ссылки, добавив это в Start :

Это находит и кэширует collider и rigidbody овцы для дальнейшего использования.

Затем необходимо настроить коллайдер овцы, чтобы на него повлияла гравитация. Для этого добавьте этот метод:

Теперь добавьте следующее в onTriggerEnter прямо под существующим оператором if:

Теперь сохраните этот скрипт и вернитесь в редактор. Выберите Sheep и измените значение Drop Destroy Delay на 4.

Запустите воспроизведение сцены еще раз и позвольте овце пройти мимо машины, чтобы посмотреть, что произойдет.

Time deltatime что это. p47. Time deltatime что это фото. Time deltatime что это-p47. картинка Time deltatime что это. картинка p47

Работает! Овца теперь падает и исчезает, когда игроку не удается ее спасти. Вот это мотивирует!

Теперь, когда овца действует так, как задумано, перетащите ее из Иерархии в папку RW \ Prefabs, чтобы превратить ее в префаб, и удалите оригинал из Иерархии.

Это первая часть урока по написанию скриптов. Похвалите себя, вы узнали основы создания скриптов для реализации игрового процесса в Unity.

Куда двигаться дальше?

Вы можете скачать готовый проект, нажав на кнопку «Скачать материалы урока» вверху страницы.

Если вы хотите узнать больше об API Unity, ознакомьтесь с этими полезными ресурсами:

Когда вы будете готовы сделать еще один шаг в написании скриптов с помощью Unity, ознакомьтесь со второй частью урока, вы пригласите целую стаю пушистых друзей и научитесь:

Мы надеемся, что вам понравился этот урок. Если у вас есть какие-либо вопросы или комментарии, то присоединяйтесь к обсуждению, а также делитесь в соцсетях, чтобы сохранить урок в репостах и закладках.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *