Использование компонентов
Компоненты ( Components ) определяют поведение объектов в игре. Они — функциональная часть каждого игрового объекта ( GameObject ). Если вы ещё не поняли взаимосвязи компонентов и игровых объектов, прочитайте страницу GameObjects, прежде чем двигаться дальше.
Игровой объект является контейнером для различных компонентов. По умолчанию у всех игровых объектов есть компонент Transform . Потому что Transform диктует, где расположен игровой объект, и как он поворачивается и масштабируется. Без компонента Transform, игровой объект не будет иметь место в мире. Попробуйте создать пустой игровой объект в качестве примера. Выберите в меню GameObject->Create Empty . Выберите новый игровой объект, и посмотрите в инспектор ( Inspector ).
Помните, что вы всегда можете использовать инспектор, чтобы увидеть, какие компоненты добавлены к выбранному игровому объекту. Компоненты добавляются и удаляются, а инспектор всегда покажет вам, какие из них находятся на объекте в настоящее время. Вы будете использовать инспектор, чтобы изменить все свойства любого компонента (включая скрипты)
Добавление компонентов
Вы можете добавить компоненты к выбранному игровому объекту через меню Components. Сейчас мы попробуем это, добавив Rigidbody на пустой игровой объект, который только что создали. Выделите его и выберите в меню Component->Physics->Rigidbody . После этого, вы увидите, что в инспекторе отобразился компонент Rigidbody и его свойства. Если нажать Play в то время как пустой игровой объект все еще выбран, вы можете получить небольшой сюрприз. Попробуйте, и обратите внимание, как Rigidbody добавил функциональность пустому игровому объекту (Y-компонент игрового объекта начинает уменьшаться, потому что физический движок в Unity заставляет игровой объект падать под действием силы тяжести).
Другой вариант заключается в использовании браузера компонентов ( Component Browser ), который может быть активирована с помощью кнопки Add Component в инспекторе объекта.
Браузер обеспечивает удобную навигацию по компонентам с помощью категорий, а также имеет окно поиска, которое можно использовать, чтобы найти компоненты по имени.
Вы можете прикрепить любое количество или комбинацию компонентов к одному игровому объекту. Некоторые компоненты работают лучше в сочетании с другими. Например, Rigidbody работает с любым коллайдером. Rigidbody контролирует Transform через физический движок NVIDIA PhysX ,а коллайдер позволяет Rigidbody сталкиваться и взаимодействовать с другими коллайдерами.
Если вы хотите узнать больше об использовании каждого компонента, вы можете прочитать о любом из них на соответствующей странице справочника компонентов. Вы также можете получить доступ к указанной странице для компонента в Unity, нажав на маленький ? на заголовке компонента в инспекторе.
Редактирование компонентов
Одной из замечательных особенностей компонентов является гибкость. При подключении компонента к игровому объекту, существуют различные значения или свойства ( Properties ) в компоненте, которые могут изменяться в редакторе при создании игры или через скрипты в запущенной игре. Есть два основных типа свойств: значения ( Values ) и ссылки ( References ).
Взгляните на изображение ниже. Это пустой Игровой Объект с компонентом Audio Source . Все параметры компонента Audio Source в Инспекторе выставлены по умолчанию.
Компонент содержит одно свойство-ссылку и семь свойств-значений. Audio Clip — это свойство-ссылка. Когда этот аудио источник начинает играть, он будет пытаться проиграть файл, на который ссылается свойство Audio Clip . Если такой ссылки не окажется, то возникнет ошибка, так как никакое аудио не будет проиграно. Вы должны назначить файл в Инспекторе. Это просто: перетащите файл из Project View на свойство-ссылку или с помощью выбора объекта (Object Selector).
Компоненты могут включать ссылки на любые другие типы компонентов, игровых объектов или ассетов. Вы можете узнать больше о назначении ссылок на странице о редактировании свойств-ссылок.
Все остальные свойства после Audio Clip это свойства-значения. Они могут быть отрегулированы прямо в Инспекторе. Свойства значения после Audio Clip — это все переключатели, числовые значения и выпадающие меню, но свойства-значения могут также быть текстовыми строками, цветами, кривыми и другими типами. Вы можете узнать больше об этом и о редактировании свойств-значении на странице о редактировании свойств-значений.
Команды контекстного меню компонента
Контекстное меню для компонента имеет ряд полезных команд.
Те же команды также доступны через иконку-шестеренку в крайнем верхнем правом углу панели компонента в инспекторе.
Сбросить
Эта команда восстанавливает значения свойств компонента, которые были до самой последней сессии редактирования.
Удалить
Команда Remove Component доступна в случаях, когда вы более не нуждаетесь в связи компонента с игровым объектом. Обратите внимание, что некоторые комбинации компонентов, которые зависят друг от друга, работают только когда Rigidbody также прикреплено; вы увидите предупреждающее сообщение, если вы попробуете удалить компоненты, которые зависят от каких-либо других компонентов.
Переместить Вверх/Вниз
Каждый компонент Image Effects применяет определенный визуальный эффект к итоговому изображению, но порядок, в котором эффекты применяются, важен. Контекстное меню имеет Move Up (поднять вверх) и Move Down (опустить вниз).
Скопировать/Вставить
Команда Copy Component сохраняет тип и текущие настройки свойств компонента. Они могут быть вставлены в другой компонент того же типа с помощью команды Paste Component Values . Вы также можете создать компонент в объекте со скопированными свойствами, используя команду Paste Component As New .
Проверка свойств
Пока ваша игра находится в Режиме Проигрывания , вы вольны изменять свойства любых Игровых Объектов в инспекторе. Например, вы можете захотеть поэкспериментировать с разными высотами прыжка. Если вы создадите свойство Jump Height в скрипте, вы сможете войти в Режим Проигрывания, изменить значение, и нажать кнопку прыжка, чтобы посмотреть, что произойдет. Затем, не выходя из Режима Проигрывания, вы можете изменить его снова и увидеть результат через секунду. Когда вы выйдете из Режима Проигрывания, ваши свойства вернутся к их изначальным “предыгровым” значениям, так что вы не потеряете свои труды. Такой рабочий процесс дает вам невероятную мощь для экспериментов, регулировки и совершенствования геймплея без лишних затрат времени в повторяющихся циклах. Попробуйте это с любыми свойствами в Режиме Проигрывания. Мы думаем, вы будете впечатлены.
Компоненты и моноповедения в Unity
Каждый игровой объект в Unity состоит из компонентов. Любой компонент четко реализует конкретный набор поведений, необходимых для того, чтобы выполнялся GameObject. Почему объект получается таким, каков он есть? Именно благодаря вкладу, который вносят компоненты, из которых этот объект состоит.
На картинках ниже — объект «Warrior». Он показан над окном «Инспектор» в интерфейсе игрового движка Unity. Обратите внимание на проиллюстрированные разделы (Animator, Rigidbody, Collider) – они, как раз таки, и являются компонентами, слагающими этот объект.
Представим, к примеру, что речь идет про автомобиль в игре:
— у единственного «видимого» элемента авто будет компонент Renderer, отрисовывающий машину и, скорее всего, компонент Collider, который задает для авто границы столкновений; — если авто представляет персонажа, то у самого объекта Car возможно наличие Player Input Controller (контроллера ввода от персонажа). Этот контроллер принимает все события, связанные с нажатиями клавиш, а также транслирует их в код, который, в свою очередь, отвечает за движение автомобиля в игре.
Нельзя не сказать, что есть возможность писать большие и сложные компоненты, в которых компонент один в один равен кодируемому объекту (к примеру, компонент player содержит код, который полностью описывает персонажа, а компонент enemy, в свою очередь, полностью кодирует противника). Как правило, принято извлекать логику и дробить ее на небольшие «обтекаемые» кусочки, которые будут соответствовать конкретным признакам. К примеру: • все объекты, которые обладают здоровьем, будь то Player или Enemy, могут иметь компонент LivingObject, который задает исходное значение здоровья, принимает урон и приводит в исполнение смерть, если объект умирает; • у игрока может быть компонент ввода, который контролирует сообщаемые ему движения, а у врага — аналогичный компонент, реализованный посредством искусственного интеллекта.
На протяжении своего жизненного цикла компоненты получают разные обратные вызовы, которые в среде Unity называются Сообщениями. В частности, к Сообщениям относятся: — OnEnable/OnDisable, — Start, — OnDestroy, — Update и прочие.
Если объект реализует метод Update() , то данный метод будет вызываться Unity в каждом кадре игрового цикла, и происходить это будет до тех пор, пока объект является активным, а заданный компонент действует. Эти методы можно пометить private — в таком случае игровой движок Unity все равно будет вызывать их.
Наверное, вы уже догадались, что компоненты могут предоставлять и публичные методы. В таком случае другие компоненты могут принимать ссылку на данный компонент и вызывать эти публичные методы.
Остается добавить, что в коде есть MonoBehavior — вездесущий родительский класс, предназначенный для представления компонентов. Большая часть невстроенных компонентов будут наследовать от MonoBehavior, а он уже, в свою очередь, будет наследовать от Behavior и Component, соответственно.
Компоненты
И вот, зайдя в юнити и прочитав пару статей, вы обращаете внимание на панельку под названием Inspector.
Каждое подменю — это так называемый компонент. Что это? Вкратце — кусочки, из которых складывается поведение объекта, его положение в мире и все-все-все. Так, например, компонент Collider дает предмету осязаемую форму, на которую смогут реагировать другие объекты, у которых есть компонент, ответственный за физику — RigidBody, не говоря о Transform, который позволяет нашему предмету иметь в мире положение, масштаб и поворот. Вкратце говоря, если Game Object — предмет, то компоненты — его свойства.
Важно понимать, что компонент — любой класс, наследуемый от Component.
На этих кирпичиках и строится мир в юнити. Попробуем написать собственный компонент.
Дважды кликнув по выбранному в поле Script файлу, или найдя этот файл в папке проекта, мы попадем в нашу рабочую среду, где и будем творить.
По умолчанию это MonoDevelop, но вы всегда можете сменить на другой в Edit/Preferences/ExternalTools.
Создадим новый скрипт пройдя в меню Assets/Create/C#Script. Новый скрипт, для примера, мы назовем «SomeComponent».
И вот мы смотрим на код.
Скопировать в буфер
using UnityEngine; using System.Collections; public class SomeComponent : MonoBehaviour < // Use this for initialization void Start () < >// Update is called once per frame void Update () < >>
Разберем этот код. ( Важно — имя класса обязательно должно совпадать с именем файла ).
Замечу, что функции Start, Update и FixedUpdate есть только в тех компонентах, что наследуются от MonoBehaviour.
MonoBehaviour — это компонент, описывающий поведение объекта. Отсюда и слово «Behaviour». Скажем, это может быть поведение юнита, здания, игрока, двери или еще какой другой оказии в игровом мире. Чтобы обеспечить взаимодействие с миром и сделаны специальные методы, которые позволяют нам отслеживать окружающие изменения.
Start — вызывается при появлении этого компонента на нашей сцене (Если был там с самого начала — запустится при запуске сцены), появился ли он во время игры вместе с некоторым новым объектом или был добавлен уже к существующему.
Update — этот метод вызывается каждый раз при перерисовке картинки на экране. Замечу, что добавив слово Fixed вы получите.
FixedUpdate — метод, вызывающийся каждый раз, при каждом просчете физики.
Немного отвлечемся. Вы правильно поняли, физика и графика идут раздельно и считаются с разными периодами. Это позволяет, к примеру, полностью останавливая просчет физики, не трогать ничего, связанного с графикой.
Это основные, общие для всех компонентов функции, но не единственные.
Скопировать в буфер
// Update is called once per frame void Update ()
Так например этот код будет каждый раз при перерисовке графики поднимать наш объект на 1 единицу вверх.
Важно заметить, что все публичные переменные, объявленные в этом классе, автоматически появляются в подменю, где их можно будет изменить на те значения, какие будут нужны при запуске сцены, если вы конечно не написали кастомное, хотя, вряд ли вы тогда читали бы эту статью.
Использование компонентов
Компоненты (Components) определяют поведение объектов в игре. Они — функциональная часть каждого игрового объекта (GameObject). Если вы ещё не поняли взаимосвязи компонентов и игровых объектов, прочитайте страницу GameObjects, прежде чем двигаться дальше.
Игровой объект является контейнером для различных компонентов. По умолчанию у всех игровых объектов есть компонент Transform. Потому что Transform диктует, где расположен игровой объект, и как он поворачивается и масштабируется. Без компонента Transform, игровой объект не будет иметь место в мире. Попробуйте создать пустой игровой объект в качестве примера. Выберите в меню GameObject->Create Empty. Выберите новый игровой объект, и посмотрите в инспектор (Inspector).
Помните, что вы всегда можете использовать инспектор, чтобы увидеть, какие компоненты добавлены к выбранному игровому объекту. Компоненты добавляются и удаляются, а инспектор всегда покажет вам, какие из них находятся на объекте в настоящее время. Вы будете использовать инспектор, чтобы изменить все свойства любого компонента (включая скрипты)
Добавление компонентов
Вы можете добавить компоненты к выбранному игровому объекту через меню Components. Сейчас мы попробуем это, добавив Rigidbody на пустой игровой объект, который только что создали. Выделите его и выберите в меню Component->Physics->Rigidbody. После этого, вы увидите, что в инспекторе отобразился компонент Rigidbody и его свойства. Если нажать Play в то время как пустой игровой объект все еще выбран, вы можете получить небольшой сюрприз. Попробуйте, и обратите внимание, как Rigidbody добавил функциональность пустому игровому объекту (Y-компонент игрового объекта начинает уменьшаться, потому что физический движок в Unity заставляет игровой объект падать под действием силы тяжести).
Другой вариант заключается в использовании браузера компонентов (Component Browser), который может быть активирована с помощью кнопки Add Component в инспекторе объекта.
Браузер обеспечивает удобную навигацию по компонентам с помощью категорий, а также имеет окно поиска, которое можно использовать, чтобы найти компоненты по имени.
Вы можете прикрепить любое количество или комбинацию компонентов к одному игровому объекту. Некоторые компоненты работают лучше в сочетании с другими. Например, Rigidbody работает с любым коллайдером. Rigidbody контролирует Transform через физический движок NVIDIA PhysX,а коллайдер позволяет Rigidbody сталкиваться и взаимодействовать с другими коллайдерами.
Если вы хотите узнать больше об использовании каждого компонента, вы можете прочитать о любом из них на соответствующей странице справочника компонентов. Вы также можете получить доступ к указанной странице для компонента в Unity, нажав на маленький ? на заголовке компонента в инспекторе.
Редактирование компонентов
One of the great aspects of Components is flexibility. When you attach a Component to a GameObject, there are different values or Properties in the Component that can be adjusted in the editor while building a game, or by scripts when running the game. There are two main types of Properties: Values and References.
Взгляните на изображение ниже. Это пустой Игровой Объект с компонентом Audio Source. Все параметры компонента Audio Source в Инспекторе выставлены по умолчанию.
Компонент содержит одно свойство-ссылку и семь свойств-значений. Audio Clip — это свойство-ссылка. Когда этот аудио источник начинает играть, он будет пытаться проиграть файл, на который ссылается свойство Audio Clip. Если такой ссылки не окажется, то возникнет ошибка, так как никакое аудио не будет проиграно. Вы должны назначить файл в Инспекторе. Это просто: перетащите файл из Project View на свойство-ссылку или с помощью выбора объекта (Object Selector).
Компоненты могут включать ссылки на любые другие типы компонентов, игровых объектов или ассетов. Вы можете узнать больше о назначении ссылок на странице о редактировании свойств-ссылок.
Все остальные свойства после Audio Clip это свойства-значения. Они могут быть отрегулированы прямо в Инспекторе. Свойства значения после Audio Clip — это все переключатели, числовые значения и выпадающие меню, но свойства-значения могут также быть текстовыми строками, цветами, кривыми и другими типами. Вы можете узнать больше об этом и о редактировании свойств-значении на странице о редактировании свойств-значений.
Команды контекстного меню компонента
The context menu for a component has a number of useful commands.
Те же команды также доступны через иконку-шестеренку в крайнем верхнем правом углу панели компонента в инспекторе.
Сбросить
Эта команда восстанавливает значения свойств компонента, которые были до самой последней сессии редактирования.
Удалить
Команда Remove Component доступна в случаях, когда вы более не нуждаетесь в связи компонента с игровым объектом. Обратите внимание, что некоторые комбинации компонентов, которые зависят друг от друга, работают только когда Rigidbody также прикреплено; вы увидите предупреждающее сообщение, если вы попробуете удалить компоненты, которые зависят от каких-либо других компонентов.
Move Up/Down
Use the Move Up and Move Down commands to rearrange the order of components of a GameObject in the Inspector.
Tip: Alternatively, click and drag the component’s name up or down in the Inspector window, and then drop it.
Скопировать/Вставить
Команда Copy Component сохраняет тип и текущие настройки свойств компонента. Они могут быть вставлены в другой компонент того же типа с помощью команды Paste Component Values. Вы также можете создать компонент в объекте со скопированными свойствами, используя команду Paste Component As New.
Проверка свойств
Пока ваша игра находится в Режиме Проигрывания, вы вольны изменять свойства любых Игровых Объектов в инспекторе. Например, вы можете захотеть поэкспериментировать с разными высотами прыжка. Если вы создадите свойство Jump Height в скрипте, вы сможете войти в Режим Проигрывания, изменить значение, и нажать кнопку прыжка, чтобы посмотреть, что произойдет. Затем, не выходя из Режима Проигрывания, вы можете изменить его снова и увидеть результат через секунду. Когда вы выйдете из Режима Проигрывания, ваши свойства вернутся к их изначальным “предыгровым” значениям, так что вы не потеряете свои труды. Такой рабочий процесс дает вам невероятную мощь для экспериментов, регулировки и совершенствования геймплея без лишних затрат времени в повторяющихся циклах. Попробуйте это с любыми свойствами в Режиме Проигрывания. Мы думаем, вы будете впечатлены.
- 2018–09–18 Page amended
- Ability to drag and drop components in Inspector window added in 5.6