unity создание префаба через скрипт

Создание элементов интерфейса путём скриптинга

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

Создание префаба элемента интерфейса

Для того, чтобы с лёгкостью динамично инстанциировать элементы интерфейса, сначала нужно создать префаб для типа элемента интерфейса, который будете потом инстанциировать. Настройте нужный вам элемент интерфейса в сцене, затем перетащите его в Project View, чтобы конвертировать его в префаб.

К примеру префабом для кнопки может быть игровой объект (Game Object) с Image и Button компонентом, и дочерний игровой объект с Text компонентом. Ваши настройки могу отличаться между собой, в зависимости от того, что вам в данный момент нужно сделать.

Вы можете задаться вопросом, почему мы не используем API методы для создания разных типов контроллеров, включая визуальную часть и многое другое. Сделано так было, потому что существует бесконечное количество способов например чтобы сделать кнопку одним из элементов для настройки чего-либо. Использует она изображение, текст или и то и другое сразу? Или для работы ей нужно использовать одновременно сразу несколько изображений? Что из себя представляет к примеру шрифт, его цвет, размер или выравнивание? Какой спрайт или спрайты должно будет использовать изображение? Благодаря тому, что вы можете создать любой префаб и инстанциировать его, вы получаете возможность настроить его так, как вам нужно. Если же вам потом захочется изменить поведение и отображение какого-либо элемента интерфейса, вы просто сможете отредактировать нужный вам префаб и применённые изменения тут же отразятся в вашем интерфейсе, включая динамически созданный интерфейс.

Инстанциирование элемента интерфейса

Префабы элементов интерфейса инстанциируются как обычные используя метод Instantiate. При назначении родительского элемента в качестве инстанциируемого элемента интерфейса, рекомендуется делать это с использованием метода Transform.SetParent вкупе со значением параметра worldPositionStays выставленным в false.

Позиционирование элемента интерфейса

Элемент интерфейса позиционируется там где нужно используя компонент Rect Transform. Если элемент интерфейса является потомком компоновочной группы (Layout Group), тогда он будет автоматически позиционирован там где нужно без необходимости делать это вручную.

При позиционировании компонента Rect Transform бывает полезным сперва определить имеет или должен ли он иметь свойство растягиваемости. Данное свойство вступает в действие, когда параметры anchorMin и anchorMax не соответствуют друг другу.

Для того, чтобы сделать Rect Transform нерастягиваемым, его позиция задаётся попросту через свойства anchoredPosition и sizeDelta. Свойство anchoredPosition задаёт позицию точки опоры относительно привязок. Свойство sizeDelta представляет собой значение исходного размера тогда, когда нет никакого растяжения.

Для растяжения Rect Transform проще будет задать позицию используя свойства offsetMin и offsetMax. Свойство offsetMin задаёт угол левого нижнего угла прямоугольника относительно левой нижней привязки. Свойство offsetMax задаёт угол правого верхнего угла прямоугольника относительно правой верхней привязки.

настройка элемента интерфейса

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

Делается это путём получения различных компонентов и изменения их свойств. Для более подробной информации по компонентам Image и Text, ознакомьтесь с соответствующими разделами документации по скриптингу и тому как работать путём скриптинга с UnityEvents.

Источник

Создание экземпляров префабов во время работы приложения

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

Общие сценарии

Чтобы показать мощь префабов, давайте рассмотрим некоторые основные ситуации, где они могут пригодиться:

Построение стены

Это объяснение иллюстрирует преимущества использования префабов над созданием объектов из кода.

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

Если вы исполните этот код, вы увидите целую кирпичную стену, создаваемую при входе в режим Play Mode. На отдельный кирпич приходится по 2 строки, отвечающие за функциональность: строки CreatePrimitive() и AddComponent(). Пока что не так и плохо, но все кирпичи не имеют текстур. Каждое дополнительное действие, которое мы хотим сделать с кирпичом, вроде изменения текстуры, трения или массы Rigidbody, требует дополнительную строку.

Если вы создадите префаб и выполните все установки вручную, то вам понадобится использовать лишь по одной строке на создание и установку каждого кирпича. Это освобождает вас от поддержания и изменения тонн кода, когда вы хотите внести изменения. При использовании префаба вы просто вносите изменения в него и жмёте Play. Совсем нет надобности изменять код.

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

Он не только очень чистый, но им можно пользоваться много раз. В нём не упоминается ни создание куба, ни то, что он должен содержать Rigidbody. Всё это задано в префабе, который может быть быстро создан в редакторе

Теперь нам остаётся лишь создать префаб, который мы делаем в редакторе. Вот так:

We’ve created our Brick Prefab, so now we have to attach it to the brick variable in our script. When you select the empty GameObject that contains the script, the Brick variable will be visible in the inspector.

Теперь перетащите префаб “Brick” из окна Project View на переменную brick в инспекторе. Нажмите Play и вы увидите стену построенную из префабов.

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

Но т.к. вы сейчас используете префаб, вы можете настроить Prefab за секунды. Хотите внести изменения для всей кучи образцов? Настройте Rigidbody в префабе всего один раз. Хотите использовать иной Material для всех образцов? Перетащите материал на префаб всего один раз. Хотите изменить трение? Используйте другой физический материал (Physic Material) в коллайдере префаба. Хотите добавить системы частиц ко всем кирпичам? Добавьте дочернюю систему к префабу всего один раз.

Создание экземпляров ракет и взрывов

Вот как префабы подходят для данного сценария:

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

Этот скрипт покажет, как запустить ракету используя функцию Instantiate().

Замена персонажа на Ragdoll или обломки

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

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

Любой из этих вариантов может быть достигнут разовым вызовом Instantiate(). Вам надо просто привязать к нему правильный префаб и всё готово!

Это стандартные шаги, если надо собрать префаб сломанного самолёта:

Следующий пример покажет, как эти шаги моделируются в коде.

Размещение группы объектов по заданному шаблону

Допустим вы хотите поместить группу объектов по сетке или кругу. Как всегда, это может быть выполнено двумя способами:

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

Источник

Создание экземпляров префабов во время работы приложения

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

Общие сценарии

Чтобы показать мощь префабов, давайте рассмотрим некоторые основные ситуации, где они могут пригодиться:

Построение стены

Это объяснение иллюстрирует преимущества использования префабов над созданием объектов из кода.

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

Если вы создадите префаб и выполните все установки вручную, то вам понадобится использовать лишь по одной строке на создание и установку каждого кирпича. Это освобождает вас от поддержания и изменения тонн кода, когда вы хотите внести изменения. При использовании префаба вы просто вносите изменения в него и жмёте Play. Совсем нет надобности изменять код.

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

Он не только очень чистый, но им можно пользоваться много раз. В нём не упоминается ни создание куба, ни то, что он должен содержать Rigidbody. Всё это задано в префабе, который может быть быстро создан в редакторе

Теперь нам остаётся лишь создать префаб, который мы делаем в редакторе. Вот так:

Мы создали наш префаб кирпича, так что теперь надо присоединить переменную brick к нашему скрипту. Когда вы выбираете пустой GameObject, что содержит скрипт, переменная brick будет видна в инспекторе.

Теперь перетащите префаб “Brick” из окна Project View на переменную brick в инспекторе. Нажмите Play и вы увидите стену построенную из префабов.

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

Но т.к. вы сейчас используете префаб, вы можете настроить Prefab за секунды. Хотите внести изменения для всей кучи образцов? Настройте Rigidbody в префабе всего один раз. Хотите использовать иной Material для всех образцов? Перетащите материал на префаб всего один раз. Хотите изменить трение? Используйте другой физический материал ( Physic Material ) в коллайдере префаба. Хотите добавить системы частиц ко всем кирпичам? Добавьте дочернюю систему к префабу всего один раз.

Создание экземпляров ракет и взрывов

Вот как префабы подходят для данного сценария:

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

Замена персонажа на Ragdoll или обломки

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

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

Это стандартные шаги, если надо собрать префаб сломанного самолёта:

Следующий пример покажет, как эти шаги моделируются в коде.

Размещение группы объектов по заданному шаблону

Допустим вы хотите поместить группу объектов по сетке или кругу. Как всегда, это может быть выполнено двумя способами:

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

Источник

Скриптинг в Unity: переменные, input и первый скрипт

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

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

Введение

Первое, что нужно сделать — это загрузить материалы для проекта.

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

unity создание префаба через скрипт

Разберем содержимое папки Assets:

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

unity создание префаба через скрипт

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

unity создание префаба через скрипт

Краткий обзор GameObjects:

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

unity создание префаба через скрипт

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

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

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

Первый скрипт

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

unity создание префаба через скрипт

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

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

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

unity создание префаба через скрипт

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

unity создание префаба через скрипт

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

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

unity создание префаба через скрипт

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

unity создание префаба через скрипт

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

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

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

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

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

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

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

Редактор Unity использует углы Эйлера для изменения поворота GameObject — это знакомые оси X, Y и Z. На самом деле движок Unity внутренне использует кватернионы, которые состоят из значений X, Y, Z и W. Эти значения очень сложно интерпретировать и не предназначены для прямого использования.

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

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

unity создание префаба через скрипт

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

unity создание префаба через скрипт

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

unity создание префаба через скрипт

Переменные

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

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

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

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

Скорость вращения теперь передается в метод Rotate с помощью переменной, что упрощает ее изменение. Векторы могут быть умножены на переменные с одним типом значения, например, deltaTime для изменения всех включенных значений вектора сразу. Например, Vector3 со значением (X: 1, Y: 2, Z: 3), умноженное на float со значением 3, приведет к результату Vector3 со значением (X: 3, Y: 6, Z: 9).

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

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

unity создание префаба через скрипт

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

unity создание префаба через скрипт

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

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

unity создание префаба через скрипт

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

unity создание префаба через скрипт

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

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

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

unity создание префаба через скрипт

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

unity создание префаба через скрипт

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

unity создание префаба через скрипт

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

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

Движение

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

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

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

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

unity создание префаба через скрипт

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

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

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

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

unity создание префаба через скрипт

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

unity создание префаба через скрипт

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

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

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

Теперь отредактируйте UpdateMovement оператор if-else, чтобы он использовал границу при проверках:

Вот что поменялось:

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

unity создание префаба через скрипт

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

unity создание префаба через скрипт

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

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

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

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

unity создание префаба через скрипт

unity создание префаба через скрипт

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

unity создание префаба через скрипт

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

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

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

unity создание префаба через скрипт

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

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

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

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

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

Метод Translate принимает два параметра: первое направление и скорость, в то время как второе — пространство, в котором происходит движение. Движение умножается на Time.deltaTime, чтобы выполнить плавное движение в течение определенного периода времени.

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

unity создание префаба через скрипт

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

unity создание префаба через скрипт

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

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

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

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

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

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

Наконец, добавьте эту строку Update прямо под UpdateMovement(); :

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

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

unity создание префаба через скрипт

Новые общедоступные переменные, которые вы только что добавили, стали полями, которые можно назначать. Перетащите Hay Bale из RW/Prefabs на слот Hay Bale Prefabe, перетащите Hay Spawnpoint на слот Hay Spawnpoint и установить Shoot Interval 0,8.

unity создание префаба через скрипт

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

unity создание префаба через скрипт

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

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

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

Чтобы идентифицировать типы GameObject, вы можете использовать теги. Теги — это справочные слова, такие как «Player» или «Collectible», которые вы можете назначить GameObjects, чтобы легко их находить и отличать от других GameObject. В качестве тега можно использовать любое слово или короткое предложение.

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

unity создание префаба через скрипт

unity создание префаба через скрипт

unity создание префаба через скрипт

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

unity создание префаба через скрипт

unity создание префаба через скрипт

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

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

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

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

Сохраните этот сценарий и вернитесь в редактор. Пришло время его проверить!

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

unity создание префаба через скрипт

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

unity создание префаба через скрипт

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

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

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

unity создание префаба через скрипт

unity создание префаба через скрипт

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

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

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

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

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

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

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

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

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

На этом пока что все, сохраните сценарий и вернитесь в редактор. Выберите Sheep в иерархии и добавьте компонент Sheep. Установите скорость бега на 10 и задержку уничтожения сена на 1.

unity создание префаба через скрипт

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

unity создание префаба через скрипт

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

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

unity создание префаба через скрипт

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

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

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

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

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

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

Если овца была сбита чем-то другим, кроме тюка сена, он проверяет, имеет ли столкнувший коллайдер тег DropSheep; Drop вызывается, если это так.

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

unity создание префаба через скрипт

Теперь падает и пропадает, когда игроку не удается в нее попасть.

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

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

Источник

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

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