как редактировать скрипт в unity
Создание и Использование Скриптов
Поведение игровых объектов контролируется с помощью компонентов (Components), которые присоединяются к ним. Несмотря на то, что встроенные компоненты Unity могут быть очень разносторонними, вскоре вы обнаружите, что вам нужно выйти за пределы их возможностей, чтобы реализовать ваши собственные особенности геймплея. Unity позволяет вам создавать свои компоненты, используя скрипты. Они позволяют активировать игровые события, изменять параметры компонентов, и отвечать на ввод пользователя каким вам угодно способом.
Unity supports the C# programming language natively. C# (pronounced C-sharp) is an industry-standard language similar to Java or C++.
Изучение искусства программирования и использования этих языкам выходит за рамки данного введения. Однако есть множество книг, обучающих материалов и ресурсов для изучения программирования в среде Unity. Посетите Обучающий раздел на нашем сайте для получения подробной информации.
Создание скриптов
Unlike most other assets, scripts are usually created within Unity directly. You can create a new script from the Create menu at the top left of the Project panel or by selecting Assets > Create > C# Script from the main menu.
Новый скрипт будет создан в папке, которую вы выбрали в панели Project. Имя нового скрипта будет выделено, предлагая вам ввести новое имя.
Лучше ввести новое имя скрипта сразу после создания чем изменять его потом. Имя, которое вы введете будет использовано, чтобы создать начальный текст в скрипте, как описано ниже.
Структура файла скрипта
When you double-click a script Asset in Unity, it will be opened in a text editor. By default, Unity will use Visual Studio, but you can select any editor you like from the External Tools panel in Unity’s preferences (go to Unity > Preferences).
Содержимое файла будет выглядеть примерно так:
Скрипт взаимодействует с внутренними механизмами Unity за счет создания класса, наследованного от встроенного класса, называемого MonoBehaviour. Вы можете думать о классе как о своего рода плане для создания нового типа компонента, который может быть прикреплен к игровому объекту. Каждый раз, когда вы присоединяете скриптовый компонент к игровому объекту, создается новый экземпляр объекта, определенный планом. Имя класса берется из имени, которое вы указали при создании файла. Имя класса и имя файла должны быть одинаковыми, для того, чтобы скриптовый компонент мог быть присоединен к игровому объекту.
Заметка для опытных программистов: вы можете быть удивлены, что инициализация объекта выполняется не в функции-конструкторе. Это потому, что создание объектов обрабатывается редактором и происходит не в начале игрового процесса, как вы могли бы ожидать. Если вы попытаетесь определить конструктор для скриптового компонента, он будет мешать нормальной работе Unity и может вызвать серьезные проблемы с проектом.
Управление игровым объектом
Как было сказано ранее, скрипт определяет только план компонента и, таким образом, никакой его код не будет активирован до тех пор, пока экземпляр скрипта не будет присоединен к игровому объекту. Вы можете прикрепить скрипт перетаскиванием ассета скрипта на игровой объект в панели Hierarchy или через окно Inspector выбранного игрового объекта. Имеется также подменю Scripts в меню Component, которое содержит все скрипты, доступные в проекте, включая те, которые вы создали сами. Экземпляр скрипта выглядит так же, как и другие компоненты в окне Inspector:-
После присоединения скрипт начнет работать, когда вы нажмете Play и запустите игру. Вы можете проверить это добавив следующий код в функцию Start:-
Debug.Log is a simple command that just prints a message to Unity’s console output. If you press Play now, you should see the message at the bottom of the main Unity editor window and in the Console window (menu: Window > General > Console).
2018–03–19 Page amended with limited editorial review
MonoDevelop replaced by Visual Studio from 2018.1
Создание и Использование Скриптов
Unity изначально поддерживает три языка программирования:
Изучение искусства программирования и использования этих языкам выходит за рамки данного введения. Однако есть множество книг, обучающих материалов и ресурсов для изучения программирования в среде Unity. Посетите Обучающий раздел на нашем сайте для получения подробной информации.
Создание скриптов
В отличии от других ассетов, скрипты обычно создаются непосредственно в Unity. Вы можете создать скрипт используя меню Create в левом верхнем углу панели Project или выбрав Assets > Create > C# Script (или JavaScript/Boo скрипт) в главном меню.
Новый скрипт будет создан в папке, которую вы выбрали в панели Project. Имя нового скрипта будет выделено, предлагая вам ввести новое имя.
Лучше ввести новое имя скрипта сразу после создания чем изменять его потом. Имя, которое вы введете будет использовано, чтобы создать начальный текст в скрипте, как описано ниже.
Структура файла скрипта
После двойного щелчка на скрипте в Unity, он будет открыт в текстовом редакторе. По умолчанию Unity будет использовать MonoDevelop, но вы можете выбрать любой редактор из панели External Tools в настройках Unity.
Содержимое файла будет выглядеть примерно так:
Заметка для опытных программистов: вы можете быть удивлены, что инициализация объекта выполняется не в функции-конструкторе. Это потому, что создание объектов обрабатывается редактором и происходит не в начале игрового процесса, как вы могли бы ожидать. Если вы попытаетесь определить конструктор для скриптового компонента, он будет мешать нормальной работе Unity и может вызвать серьезные проблемы с проектом.
A UnityScript script works a bit differently to C# script:
Здесь функции Start и Update имеют такое же значение, но класс не объявлен явно. Предполагается, что скрипт сам по себе определяет класс; он будет неявно производным от MonoBehaviour и получит своё имя от имени файла скриптового ассета.
Управление игровым объектом
Как было сказано ранее, скрипт определяет только план компонента и, таким образом, никакой его код не будет активирован до тех пор, пока экземпляр скрипта не будет присоединен к игровому объекту. Вы можете прикрепить скрипт перетаскиванием ассета скрипта на игровой объект в панели Hierarchy или через окно Inspector выбранного игрового объекта. Имеется также подменю Scripts в меню Component, которое содержит все скрипты, доступные в проекте, включая те, которые вы создали сами. Экземпляр скрипта выглядит так же, как и другие компоненты в окне Inspector:-
После присоединения скрипт начнет работать, когда вы нажмете Play и запустите игру. Вы можете проверить это добавив следующий код в функцию Start:-
Скрипты для редактора в Unity3D
Сегодня поговорим о том, как писать скрипты для Unity Editor. Статья рассчитана на тех, кто уже знаком с Unity3D, что-то успел сделать, но еще не решился попробовать писать скрипты для эдитора.
Если коротко — то в режиме эдитора скриптами можно сделать абсолютно всё тоже самое, что и в режиме игры.
Начнем с простого. Допустим, мы хотим в режиме эдитора создать 10 кубиков и расположить их в линию. Для начала давайте упростим задачу и забудем про эдитор, давайте сделаем так, чтобы эти кубики создавались при старте приложения.
Теперь попробуем выполнить этот код в режиме эдитора, для этого нужно к коду добавить всего лишь один волшебный атрибут [ContextMenu()] к функции Create10Cubes():
так чтобы код выглядел вот так:
Теперь, если мы нажмем правой кнопкой по заголовку скрипта, там появится пункт CreateCubes, при нажатии на который функция точно также будет выполнена.
Важное замечание: функция, помеченная атрибутом ContextMenu, не должна иметь параметров, вернее, если у нее будут параметры, вы не сможете вызвать таким способом.
Лично я применяю такой способ, когда нужно что-то сделать с группой объектов, например, выключить отбрасывание теней у всех детей объекта, у которых в названии встречается «withoutshadow»:
Вобщем способ хорош для одноразовых действий над кучей объектов — быстренько накидали нужный код в отдельном классе, кинули на нужный объект и тут же удалили этот класс к едрене фене.
Теперь давайте решим следующую задачу: мы хотим запечь occlusion culling. Для этого нам необходимо пометить галочкой Occluder Static все объекты, которые бубдут загораживать другие объекты, и галочкой Occludee Static все, которые будут скрываться за Occluder`ами. То есть нам нужно вычленить все статичные объекты, непрозрачным объкетам поставить обе галки (на самом деле все), прозрачным — только Occludee, а Occluder выключить.
Казалось бы, ну что такого, пробежался по сцене ручками — расставил кому нужно галочки — и все. Но проблема в том, что объектов в сцене может быть много и в процессе развития проекта сцена скорее всего будет меняться. Следить самому за всеми этими галочками — с ума можно сойти. Поэтому мы напишем маленький скриптик, который делает это за нас.
Для начала напишем полезный код, который выполняет нашу работу, а далее оформим это в отдельный виззард:
1) Найти интересующие нас объекты в сцене;
2) Расставить нужные галочки.
Оформим код в виде отдельной команды, для того чтобы его можно было вызывать из любого места и он не зависел от того, в каком виззарде он будет вызываться. Внимание: файл, содержащий следующий код, необходимо поместить в папку под названием Editor, это нужно для того, чтобы этот код не попал в основной билд:
Здесь мы предполагаем, что статичные объекты уже до этого каким то образом нашли (скорее всего ручками) и отметили их галочкой Static, а значит, в том числе и BatchingStatic.
Теперь давайте оформим отдельный виззард, чтобы можно было удобно вызывать эту команду:
Тут нам пригодится класс EditorWindow.
На этом пока закончим наш обзор, он получился далеко не полным.
В следующих статьях я планирую описать, как можно создавать кастомные инспекторы для ваших классов, как вмешиваться в процесс импорта ассетов, как можно поставить запекать тени на 20-ти уровнях по очереди и получить скриншоты с результатом себе на почту.
Создание и Использование Скриптов
Поведение игровых объектов контролируется с помощью компонентов (Components), которые присоединяются к ним. Несмотря на то, что встроенные компоненты Unity могут быть очень разносторонними, вскоре вы обнаружите, что вам нужно выйти за пределы их возможностей, чтобы реализовать ваши собственные особенности геймплея. Unity позволяет вам создавать свои компоненты, используя скрипты. Они позволяют активировать игровые события, изменять параметры компонентов, и отвечать на ввод пользователя каким вам угодно способом.
Unity supports the C# programming language natively. C# (pronounced C-sharp) is an industry-standard language similar to Java or C++.
Изучение искусства программирования и использования этих языкам выходит за рамки данного введения. Однако есть множество книг, обучающих материалов и ресурсов для изучения программирования в среде Unity. Посетите Обучающий раздел на нашем сайте для получения подробной информации.
Создание скриптов
Unlike most other assets, scripts are usually created within Unity directly. You can create a new script from the Create menu at the top left of the Project panel or by selecting Assets > Create > C# Script from the main menu.
Новый скрипт будет создан в папке, которую вы выбрали в панели Project. Имя нового скрипта будет выделено, предлагая вам ввести новое имя.
Лучше ввести новое имя скрипта сразу после создания чем изменять его потом. Имя, которое вы введете будет использовано, чтобы создать начальный текст в скрипте, как описано ниже.
Структура файла скрипта
When you double-click a script Asset in Unity, it will be opened in a text editor. By default, Unity will use Visual Studio, but you can select any editor you like from the External Tools panel in Unity’s preferences (go to Unity > Preferences).
Содержимое файла будет выглядеть примерно так:
Скрипт взаимодействует с внутренними механизмами Unity за счет создания класса, наследованного от встроенного класса, называемого MonoBehaviour. Вы можете думать о классе как о своего рода плане для создания нового типа компонента, который может быть прикреплен к игровому объекту. Каждый раз, когда вы присоединяете скриптовый компонент к игровому объекту, создается новый экземпляр объекта, определенный планом. Имя класса берется из имени, которое вы указали при создании файла. Имя класса и имя файла должны быть одинаковыми, для того, чтобы скриптовый компонент мог быть присоединен к игровому объекту.
Заметка для опытных программистов: вы можете быть удивлены, что инициализация объекта выполняется не в функции-конструкторе. Это потому, что создание объектов обрабатывается редактором и происходит не в начале игрового процесса, как вы могли бы ожидать. Если вы попытаетесь определить конструктор для скриптового компонента, он будет мешать нормальной работе Unity и может вызвать серьезные проблемы с проектом.
Управление игровым объектом
Как было сказано ранее, скрипт определяет только план компонента и, таким образом, никакой его код не будет активирован до тех пор, пока экземпляр скрипта не будет присоединен к игровому объекту. Вы можете прикрепить скрипт перетаскиванием ассета скрипта на игровой объект в панели Hierarchy или через окно Inspector выбранного игрового объекта. Имеется также подменю Scripts в меню Component, которое содержит все скрипты, доступные в проекте, включая те, которые вы создали сами. Экземпляр скрипта выглядит так же, как и другие компоненты в окне Inspector:-
После присоединения скрипт начнет работать, когда вы нажмете Play и запустите игру. Вы можете проверить это добавив следующий код в функцию Start:-
Debug.Log is a simple command that just prints a message to Unity’s console output. If you press Play now, you should see the message at the bottom of the main Unity editor window and in the Console window (menu: Window > General > Console).
2018–03–19 Page amended
MonoDevelop replaced by Visual Studio from 2018.1
Скриптинг в Unity: переменные, input и первый скрипт
Создание сценариев — неотъемлемая часть даже самых простых игр. Эти небольшие части кода работают сообща, чтобы делать самые разные вещи: от перемещения персонажа по экрану до отслеживания вашего инвентаря. Разработчики игр пишут сценарии в Unity на C#, мощном объектно-ориентированном языке программирования, разработанном Microsoft около 2000 года. С тех пор он стал одним из самых популярных языков программирования. Команда Unity выбрала C # в качестве основного языка программирования, потому что он хорошо документирован, прост в изучении и достаточно гибок.
В основе Unity лежит хорошо документированный API, с которым могут взаимодействовать скрипты. В этом руководстве вы создадите простую игру, начав с нескольких моделей и изучите как использовать наиболее важные части Unity API. Вы узнаете, как создавать сценарии C# в Unity:
Введение
Первое, что нужно сделать — это загрузить материалы для проекта.
Обратите внимание на окно Project и разверните папку RW. Этот проект содержит в себе набор готовых ассетов, которые вы будете использовать, чтобы вдохнуть жизнь в игру с помощью скриптов:
Разберем содержимое папки Assets:
Теперь откройте сцену Game в RW/Scenes, если она еще не открыта, и посмотрите вокруг в режиме сцены
Несколько летающих островов с ветряными мельницами, мостами и небольшой железнодорожной веткой, на которой стоит синяя вагонетка. Теперь взглянем на Иерархию:
Краткий обзор GameObjects:
Затем нажмите кнопку воспроизведения в верхней части редактора и взгляните на окно игры, чтобы увидеть, что происходит.
Единственные признаки жизни на данный момент — частицы дыма, вылетающие из вагонетки. В ближайшее время эта игра не выиграет ни одной награды за игру года, но это хорошая основа для дальнейшего развития.
Нажмите кнопку воспроизведения еще раз, чтобы остановить тестирование «игры».
Теперь, когда вы знакомы с проектом, пора приступить к написанию сценариев!
Первый скрипт
Создавать новые скрипты в Unity довольно просто. Щелкните правой кнопкой мыши папку RW/Scripts, выберите Create ►C# Script и назовите сценарий Rotate.
Хотя сценарий еще ничего не делает, вы уже можете использовать его как компонент, прикрепив его к GameObject. В этом случае скрипт Rotate будет вращать колеса всех ветряных мельниц.
Компоненты — это экземпляры скриптов, что означает, что вы можете добавить столько компонентов к любому GameObject, сколько захотите. Любые изменения, внесенные в сценарий, отразятся на всех его компонентах.
Разверните Scenery в Иерархии, чтобы раскрыть его содержимое. Откройте Windmill в редакторе префабов, щелкнув стрелку рядом с ее названием.
Выберите Wheel, который наследуется от Windmill. Теперь нажмите кнопку «Add Component» в нижней части инспектора, начните вводить «rotate», пока в списке не появится компонент Rotate, и выберите его.
Это добавит компонент Rotate к колесам всех ветряных мельниц.
Чтобы отредактировать скрипт, вам нужно открыть его в редакторе кода, например, Visual Studio. Есть несколько способов открыть скрипт, но самый простой — найти исходный файл в окне «Project» и дважды щелкнуть его. Двойной щелчок по полю Script любого компонента также работает:
Используйте любой из описанных выше методов, чтобы открыть скрипт Rotate в редакторе кода. Вот как это выглядит в Visual Studio:
Сам скрипт представляет собой единый класс, производный от MonoBehaviour, базового класса Unity, от которого должны быть унаследованы все скрипты, если их нужно использовать в качестве компонентов.
MonoBehaviour является частью пространства имен UnityEngine и реализует несколько общедоступных методов, но, что более важно, огромный список функций событий.
Функции — это другое название методов, все они являются подпрограммами. В языках ООП, таких как C#, вам следует использовать термин «метод», но Unity предпочла вместо этого использовать функцию при описании большинства своих встроенных методов.
Unity добавляет Start и Update методы по умолчанию для всех новых сценариев. На самом деле это функции событий, они вызываются, когда их запускает определенное действие. Вот несколько наиболее распространенных функций обработки событий и времени их вызова:
В ходе этого руководства вы будете использовать гораздо большую их разновидность, поскольку они являются важной частью сценариев. Вы можете проверить полный список функций событий в документации Unity.
Добавьте следующую строку внутри Update :
Эта единственная линия, которая постоянно вращается по оси Y с течением времени, уже демонстрирует некоторые возможности Unity API:
Редактор Unity использует углы Эйлера для изменения поворота GameObject — это знакомые оси X, Y и Z. На самом деле движок Unity внутренне использует кватернионы, которые состоят из значений X, Y, Z и W. Эти значения очень сложно интерпретировать и не предназначены для прямого использования.
Сохраните этот сценарий и вернитесь в редактор.
Можно заметить, что редактор не будет отвечать в течение короткого времени во время компиляции. Вы можете проверить, когда происходит эта компиляция, посмотрев в нижний правый угол редактора, там будет небольшой анимированный значок:
Если вы еще не вышли из режима редактирования префаба, сделайте это сейчас, щелкнув стрелку влево рядом с префабом Windmill в окне иерархии. Вам будет предложено сохранить или отменить. Щелкните Save.
Теперь посмотрим в сцену. Вы заметите, что колесо ветряной мельницы теперь медленно вращается, так что все идет по плану.
Переменные
Переменные — это контейнеры данных, в которых хранится информация. Это может быть как и количество жизни и денег игрока, так и ссылки на сборный объект, который появляется в сцене. Как только вы добавите их в скрипт, вы можете редактировать их значения в редакторе.
Откройте скрипт Rotate в редакторе кода и добавьте следующую строку прямо над методом Start:
Эта переменная задаст скорость и ось, по которой будет происходить вращение.
Теперь заменим эту строку:
Скорость вращения теперь передается в метод Rotate с помощью переменной, что упрощает ее изменение. Векторы могут быть умножены на переменные с одним типом значения, например, deltaTime для изменения всех включенных значений вектора сразу. Например, Vector3 со значением (X: 1, Y: 2, Z: 3), умноженное на float со значением 3, приведет к результату Vector3 со значением (X: 3, Y: 6, Z: 9).
Всегда выбирайте переменную вместо сферического числа в ваккуме, такого как 50, которые вы добавили ранее. Это позволит вам изменять и повторно использовать значения, не открывая скрипт.
Взгляните на инспектор, у компонента Rotate теперь есть поле, которое вы можете настроить:
Измените значение Y в поле Rotation Speed на 120 и выйдите из редактирования префаба, щелкнув стрелку в верхнем левом углу Иерархии, сохранив свои изменения при появлении запроса.
Теперь посмотрим в сцену. Колесо вращается как и раньше, но чуть быстрее.
Огромным преимуществом наличия переменных в редакторе является то, что вы можете изменять их в режиме воспроизведения! Выберите колесо одной из ветряной мельницы в иерархии и попробуйте изменить скорость вращения. Вы можете перемещать значение Y слева направо или изменять число напрямую.
Это приведет к тому, что колесо изменит свою скорость в реальном времени:
После выхода из режима воспроизведения все значения, которые вы установили для GameObjects в иерархии, будут сброшены. Это отличный способ поиграть со значениями и посмотреть, что работает лучше. Вы можете настроить высоту прыжка персонажа, количество здоровья вражеских игроков или даже расположение элементов пользовательского интерфейса.
Конечно, как только вы найдете нужные значения, вы можете сохранить их, чтобы они применялись каждый раз при запуске игры. Самый надежный способ сделать это — скопировать и вставить значения в компоненты и использовать префабы.
Находясь в режиме воспроизведения, измените вращение одного из колес на такое, какое, по вашему мнению, выглядит хорошо, например, на 150 по оси Y. Теперь щелкните правой кнопкой мыши на имя компонента Rotate в Инспекторе или щелкните левой кнопкой мыши шестеренку параметров в правом верхнем углу компонента и выберите Copy Component. Это скопирует компонент и его значения в буфер обмена.
Далее остановите режим воспроизведения. Вы заметите, что скорость в инспекторе вернется к своему прежнему значению. Щелкните правой кнопкой мыши на имя компонента Rotate и выберите Paste Component Values. Все значения, которые вы скопировали, теперь вставятся в компонент Rotate.
Хотя это изменило скорость вращения одной из ветряных мельниц, вы хотите применить это ко всем. Для этого выберите родительский компонент Windmill и в верхней правой части инспекторав ыберите Overrides ► Apply All, чтобы применить изменения ко всем ветреным мельницам.
Ввод игрока и создание экземпляров префабов
Игра не была бы игрой, если бы не требовала определенного участия в ней игрока. Скрипты могут получить состояние клавиатуры, мыши и любых подключенных девайсов. Первая цель — заставить вагонетку двигаться по рельсам слева направо.
Движение
Добавьте следующие переменные прямо вверху Start :
Эта переменная позволит вам указать скорость, с которой будет двигаться вагонетка.
Теперь добавьте этот метод ниже Update :
Этот фрагмент кода перемещает вагонетку, используя горизонтальный ввод игрока:
В этом случае вы можете использовать клавиши со стрелками влево и вправо, клавиши A и D или левый аналоговый джойстик в качестве входа.
Когда Unity не обнаруживает никаких входных данных, horizontalInput будет оставаться на 0 и вагонетка двигаться не будет.
Теперь, чтобы вызывать метод в каждом кадре, добавьте вызов к нему в Update :
Затем сохраните этот сценарий и вернитесь в редактор. Выберите Hay Machine в иерархии и добавьте к нему компонент Hay Machine.
Установите его Movement Speed на 14 и воспроизведите сцену. Используйте клавиши со стрелками или A и D для перемещения вагонетки слева направо. Работает!
Упс, вы можете переместить машину за пределы рельсов и даже за экран, а это нехорошо. Вам нужно будет установить некоторые границы, чтобы этого не происходило.
Снова откройте скрипт HayMachine и добавить эту переменную ниже других:
Эта переменная будет использоваться для ограничения движения по оси X. В качестве значения по умолчанию ему присваивается 22, это будет начальное значение, которое также будет заполнено в редакторе.
Теперь отредактируйте UpdateMovement оператор if-else, чтобы он использовал границу при проверках:
Вот что поменялось:
Изображение ниже более наглядно иллюстрирует происходящее:
Белые линии слева и справа обозначают границы, линия, проходящая через вагонетку, является ее центром. Перемещение вагонетки в заданном направлении блокируется при достижении границы:
Сохраните скрипт и вернитесь в редактор. Попробуйте воспроизвести сцену и еще раз переместить вагонетку влево и вправо. Вагонеткаа останавливается, как только она перемещается к одному из краев.
Создание и стрельба снарядами
Прежде чем вы сможете начать что-либо запускать, вам нужно создать GameObject для стога сены. Начните с создания нового пустого GameObject в иерархии, щелкнув правой кнопкой мыши на пустое пространство и выбрав Create Empty. Это создаст пустой GameObject с именем GameObject в корне иерархии.
Не снимая выделения с пустого GameObject, измените его имя на Hay Bale в инспекторе и сбросьте его компонент Transform, щелкнув правой кнопкой мыши компонент Transform и выбрав Reset.
Затем выберите Hay Bale и добавьте следующие компоненты с помощью кнопки Add Component:
Теперь, когда стог сена имеет необходимые компоненты для использования физики и может вращаться для анимации, пришло время настроить его.
Тюк будет сброшен вагонеткой и полетит прямо вперед, не подвергаясь воздействию силы тяжести. Позже в этом уроке, когда вы добавите овец, она будет использоваться, чтобы овцы не причиняли себе вреда.
Сохраните сцену и нажмите кнопку воспроизведения. Вы увидете, что сено крутится на месте.
Чтобы сено двинулось вперед, вам нужно написать еще один служебный скрипт. Создайте новый сценарий 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.
Теперь включите сцену, и вы увидите, что тюк сена летит к мостам и исчезает с экрана, отлично!
Перетащите Hay Bale в папку RW/Prefabs, чтобы превратить его в префаб, и удалите оригинал из иерархии. Теперь вы сможете ссылаться на этот префаб, чтобы создавать больше, когда захотите.
Чтобы вагонетка выбрасывала тюки, вам нужно написать скрипт. Откройте скрипт HayMachine и добавьте следующие объявления переменных прямо вверху Start :
Вот краткое объяснение переменных:
Теперь добавьте метод ShootHay ниже UpdateMovement :
Чтобы вызвать приведенный выше код, вам понадобится код для запроса ввода. Добавьте следующий метод чуть выше ShootHay :
Вот что делает этот блок кода:
Наконец, добавьте эту строку Update прямо под UpdateMovement(); :
Это вызывает метод в каждым кадре.
Теперь сохраните этот скрипт и вернитесь в редактор. Выберите Hay Machine в иерархии, разверните его, щелкнув стрелку слева, и посмотрите в инспектор.
Новые общедоступные переменные, которые вы только что добавили, стали полями, которые можно назначать. Перетащите Hay Bale из RW/Prefabs на слот Hay Bale Prefabe, перетащите Hay Spawnpoint на слот Hay Spawnpoint и установить Shoot Interval 0,8.
Теперь сохраните сцену и нажмите кнопку воспроизведения. Перемещайте вагонетку с помощью клавиш со стрелками и стреляйте сеном с помощью клавиши пробела!
Все должно работать как на GIF-изображении выше.
Возможно, вы заметили, что тюки никогда не разрушаются и продолжают бесконечно улетать в никуда.
Теги и реакция на физику
Чтобы идентифицировать типы GameObject, вы можете использовать теги. Теги — это справочные слова, такие как «Player» или «Collectible», которые вы можете назначить GameObjects, чтобы легко их находить и отличать от других GameObject. В качестве тега можно использовать любое слово или короткое предложение.
Создать новый тег довольно просто: выберите Edit ► Project Settings в верхнем меню и откройте вкладку Tags and Layers в окне Project Settings. Теперь разверните список Tags, и вы заметите, что в проекте уже есть два предварительно загруженных тега : DestroyHay и DropSheep.
Теперь разница между тюками сена и другими игровыми объектами очевидна: вы можете добавить область, которая разрушает сено при соприкосновении с ним. Добавьте новый пустой GameObject в иерархию и назовите его Triggers. Сбросьте его Transform и добавьте пустой GameObject в качестве его дочернего элемента. Назовите его Hay Destroyer.
Теперь, чтобы этот триггер уничтожал каждое сено, вам нужно написать еще один служебный скрипт. Создайте новый сценарий C# внутри RW /Scripts, назовите его DestroyOnTrigger и откройте его в редакторе кода. Полностью удалите методы Start и Update и добавьте вместо них это объявление переменной:
Эта строка позволит вам ввести имя любого тега, который уничтожит этот GameObject.
Теперь добавьте этот метод под только что добавленной переменной:
Вот что происходит:
Сохраните этот сценарий и вернитесь в редактор. Пришло время его проверить!
Выберите Hay Bale в RW /Prefabs, добавьте компонент Destroy On Trigger и измените Tag Filter на DestroyHay.
Теперь нажмите кнопку воспроизведения и попробуйте снова. Вы заметите, что любое сено, попавшее в «Hay Destroyer», мгновенно уничтожается.
Скрипты для овец
В игре, которую вы создаете, стадо овец в панике бежит к вам, ни перед чем не останавливаясь.
Теперь овца в инспекторе должна выглядеть так:
Теперь эта овца готова к написанию сценария!
До сих пор вы создавали общие сценарии, которые можно повторно использовать для любого GameObject или даже других проектов. Сценарий, который вы собираетесь написать, намного более конкретен, потому что его взаимодействие довольно уникально и со временем будет усложняться по мере добавления в игру дополнительных функций.
Создайте новый сценарий C# с именем Sheep в RW /Scripts и откройте его в редакторе кода.
Для начала овце просто нужно бежать вперед и исчезнуть, когда ее ударит тюк сена. Добавьте следующие объявления переменных прямо выше Start :
Вот для чего они нужны:
Разобравшись с этим, добавьте эту строку в Update :
Затем добавьте этот метод ниже Update :
Вот суть этого метода:
Последняя часть заставляет овцу реагировать на физику, добавляя следующий код:
На этом пока что все, сохраните сценарий и вернитесь в редактор. Выберите Sheep в иерархии и добавьте компонент Sheep. Установите скорость бега на 10 и задержку уничтожения сена на 1.
Теперь запустите сцену, выстрелите в овцу и посмотрите, что произойдет!
Потрясающие! Овца перестает двигаться и исчезает, как вы и написали. Что произойдет, если овца пробежит мимо, а вы ее не пристрелите? Перезапустите сцену и проверьте это.
Овечка пролетает через край как по волшебству, это нехорошо! Вам нужно будет создать еще одну зону срабатывания, чтобы сценарий Sheep мог обнаруживать столкновения с ней и соответствующим образом реагировать.
Когда овца попадает в триггер, она должна упасть и исчезнуть из поля зрения. Чтобы реализовать это, вам необходимо внести некоторые изменения в скрипт Sheep. Снова откройте его в редакторе кода и добавьте следующие объявления переменных ниже существующих:
Они говорят сами за себя, но вот краткий обзор:
Теперь назначьте необходимые ссылки, добавив это в Start :
Это находит и кэширует коллайдер овцы и твердое тело для дальнейшего использования.
Затем необходимо настроить коллайдер овцы, чтобы на него повлияла гравитация. Для этого добавьте этот метод:
Теперь добавьте следующее OnTriggerEnter прямо под существующим оператором if:
Если овца была сбита чем-то другим, кроме тюка сена, он проверяет, имеет ли столкнувший коллайдер тег DropSheep; Drop вызывается, если это так.
Снова воспроизведите сцену и позвольте овце пройти мимо вагонетки, чтобы увидеть, что произойдет.
Теперь падает и пропадает, когда игроку не удается в нее попасть.
Теперь, когда овца действует так, как задумано, перетащите ее из иерархии в папку RW/Prefabs, чтобы превратить ее в префаб и удалить оригинал из иерархии.
Это первая часть этого урока! Похвалите себя, вы узнали основы создания скриптов для реализации игрового процесса в Unity.