Triggers module

Using the Triggers module
To begin, specify which Colliders in the Scene the particles can interact with. To do this, assign one or more Colliders to the Colliders list property. To increase the number of Colliders in the list, click the Add (+) button beneath the list of Colliders. To remove a Collider from the list, select the Collider and click the Remove (-) button. If you have not yet assigned a Collider to an index of the list, you can use the smaller Add (+) button, to the right of the empty entry, to create and assign a new Collider. This creates a new GameObject The fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more. A GameObject’s functionality is defined by the Components attached to it. More info
See in Glossary as a child of the Particle System and attaches a Sphere Collider A sphere-shaped collider component that handles collisions for GameObjects like balls or other things that can be roughly approximated as a sphere for the purposes of physics. More info
See in Glossary to it, then assigns the Collider to the empty entry.
After you add the Colliders, you can then specify what a particle does when it meets the criteria for passing a particular trigger event type. There are four event types that describe how a particle can interact with a Collider. They are:
Accessing particles within OnParticleTrigger()
If you select Callback as the reaction to one of the trigger events, you can access the particles that fulfill the event condition from an attached script. To do this, you first need to add the OnParticleTrigger() function to an attached script. Inside this function, call the ParticlePhysicsExtensions.GetTriggerParticles() function to get the list of particles that fulfill the trigger event’s criteria. This function takes a ParticleSystemTriggerEventType, which specifies the trigger event you want to get the particles for (Inside, Outside, Enter, or Exit), and a list of Particles A small, simple image or mesh that is emitted by a particle system. A particle system can display and move particles in great numbers to represent a fluid or amorphous entity. The effect of all the particles together creates the impression of the complete entity, such as smoke. More info
See in Glossary which the function populates with the result. From the list, you can access, modify, or destroy any particle. The function can also take an optional parameter which outputs collision A collision occurs when the physics engine detects that the colliders of two GameObjects make contact or overlap, when at least one has a Rigidbody component and is in motion. More info
See in Glossary information, such as which Collider each particle triggered. The Collider Query Mode property controls what information is available through this parameter.
For more information on the API and how to use it, see the below example.
Properties
For some properties in this section, you can use different modes to set their value. For information on the modes you can use, see Varying properties over time.
| Property | Description |
|---|---|
| Inside | Specifies the action the Particle System takes for particles every frame they are inside a Collider. The options are: • Callback: Adds the particle to a list which you can retrieve in the OnParticleTrigger() callback • Kill: Destroys the particle. • Ignore: Ignores the particle. |
| Outside | Specifies the action the Particle System takes for particles every frame they are outside a Collider. The options are: • Callback: Adds the particle to a list which you can retrieve in the OnParticleTrigger() callback • Kill: Destroys the particle. • Ignore: Ignores the particle. |
| Enter | Specifies the action the Particle System takes for particles in the frame they enter a Collider. The options are: • Callback: Adds the particle to a list which you can retrieve in the OnParticleTrigger() callback • Kill: Destroys the particle. • Ignore: Ignores the particle. |
| Exit | Specifies the action the Particle System takes for particles in the frame they exit a Collider. The options are: • Callback: Adds the particle to a list which you can retrieve in the OnParticleTrigger() callback • Kill: Destroys the particle. • Ignore: Ignores the particle. |
| Collider Query Mode | Specifies the method this Particle System uses to get information about the Colliders that particles interact with. This increases the resource intensity of processing the Triggers module so, if you do not need any extra collision information, set this property to Disabled. The options are: • Disabled: Does not get any information about which Collider each particle interacts with. • One: Gets information about the first Collider each particle interacts. If a particle interacts with multiple Colliders in the frame, this returns the first Collider in the Collider list the particle interacted with. • All: Gets information about every Collider each particle interacts with. |
| Radius Scale | The particle’s Collider bounds. This allows you to match the particle’s Collider bounds to the visual appearance of the particle more closely. This is useful if a particle is circular with a fade in its texture because the default particle Collider would be inside the trigger before the particle visually looks to be. Note that this setting does not change when the event actually triggers, but can delay or advance the visual effect of the trigger. ExamplesInteraction with a colliderThe example below causes particles to turn red as they enter the Collider’s bounds, then turn green as they leave the Collider’s bounds. See the images below for the result of this example: Interaction with multiple collidersThe following example takes advantage of the additional collision data you can extract from the GetTriggerParticles() function. It causes particles inside the first Collider’s bounds to turn red, inside the second Collider’s bounds to turn blue, or inside both Colliders to turn green. It also turns particles white if they are not inside a Collider. For this example, Collider Query Mode is set to All. See the following image for the result of this example: Unity3d. Уроки от Unity 3D Student (B13-B16)Предыдущие уроки вы можете найти по следующим ссылкам: PS: Так же исправленны некоторые ошибки в предыдущих уроках, большое спасибо хабравчанинам ufomesh и MikhailS. Базовый Урок 13 — Определение столкновений с триггеромВ уроке рассказывается, как определить столкновения между невидимыми для игрока объектами, используя неосязаемые «триггер коллайдеры» (trigger colliders). Если вы хотите определить столкновения, но не ходите, чтоб столкнувшийся объект остановился, вам требуется использовать триггер (trigger) Триггеры позволяют вам определить, где именно расположен объект на сцене (во время запуска приложения). На нашей сцене имеется куб («box» с rigidbody), который падает на синюю платформу («platform»). Естественно платформа останавливает куб, поскольку среди ее компонентов присутствует box collider. У компонента box collider есть чекбокc Is Trigger. Если включить Таким образом мы можем создавать столкновения, которые не должны быть видны пользователю. Например, отключим компонент Mesh Renderer у нашей платформы. Мы по прежнему видем зеленый контур объекта, если выделим его в Hierarchy View. Если мы нажмем play, то куб провалиться через нивидимую платформу, но пока мы не можем ничего узнать о произошедшем. Создадим скрипт, назовем его Trigger и добавим в тело класса следующий код Добавим скрипт к платформе. Теперь, как тольку куб пройдет сквозь платформу, вы увидете сообщение «Box went through!» в консоли. Базовый Урок 14 — GUI текст и счетчикиВ уроке рассказывается, как отобразить информацию о счетчике на экран используя компонент GUI Text Чтобы отображать текстовую информацию на экран воспользуемся элементом GUI Text. Так же, обратите внимание, чтоб у камеры был включен компонент GUILayer. Текст можно редактировать напрямую через редактор (поле Text). Но мы воспользуемся скриптом для этого. Добавим скрипт (GUITextExample). Код будем писать в метод Update(): Если зайти в стравку о параметре guiText.text, то увидите следующие: То есть, при передачи параметра мы должны быть уверены что передаем string. Теперь если запустить игру, то текст поменяется. Попробуем отобразить счетчик. В класс добавим переменную-счетчик (Counter) и немного подправим код в методе Update(). В итоге Unity выдаст ошибку: Нам требуется привести переменную типа int к типу string. Воспользуемся последним способом, только вместо пустой строки напишем текст: Жмем play и наблюдаем как увеличивается значения переменной-счетчика. Мы так же можем изменить шрифт текста, если у вас в проекте есть дополнительный шрифт (font). Чтоб поменять шрифт, достаточно перетащить его в соответствующие поле компонента GUIText (Font). Тут же можно поменять другие параметры, такие как размер (font size), выравнивание (alignment) и некоторые другие. Базовый Урок 15 — Добавление компонентов с помощью скриптовВ уроке рассказывается, как добавить компонент к объекту используя скрипты и быть увереным, что мы их добавили только однажды. Для того, чтобы добавить компонент в run-time воспользуемся скриптами. Попробуем добивать компонент к платформе, как только ящик упадёт на неё. Скрипт добавим к ящику. Жмем play и видим — как только ящик падает на платформа, она тоже начнёт падать. Но в консоле вы увидите предупреждение: Мы получили это сообщение, поскольку пытаемся добавить компонент Rigidbody каждый раз, когда ящик сталкивается с платформой, то есть — мы добавляем его более одного раза. Чтоб этого не происходило, нам нужно добавить проверку и добавлять компонент, только в случае его отсутствия. Добавим в OnCollisionEnter() еще одно условие: Теперь запустим приложение и убедимся, что в консоли отсутствует предупреждение. Базовый Урок 16 — Переключение между сценВ уроке рассказывается, как написать скрипт, для переключения между сценами в проекте Unity. Для полноценной работы с Unity нужно уметь переключаться между различными сценами, для загрузки разных уровней, меню и другого контента. Для этого воспользуемся методом LoadLevel() класса Application. В нашем примере есть 2е сцены. Первая («Level») — с кубом и плоскостью («floor»), на которую куб падает.Вторая («gameover») — с зеленым фотон и GUI Text’ом — «YOU WIN!» Добавим скрипт (LoadLevel) со следующим кодом: Жмем play. В итоге в консоли появилась ошибка: Дело в том, что когда мы работаем с классом Application, мы должны указывать в настройках сборки (Build Settings) все сцены, которые хотим загружать в итоговом приложении. Перейдем в настройки сборки File->Build Settings и перетащим сцены Level и gameover из Project View в верхнее поле Buil Settings Немного подредактируем наш скрипт так, чтоб мы могли указывать имя уровня из окна редактора, таким образом мы делаем наш скрипт более «гибким». В окне редактора, на против соответствующего поля компонента, напишем название сцены, которую хотим загрузить. Триггеры и загрузка сценыЛюбая игра разбита на несколько уровней. Это значительно увеличивает производительность игры и упрощает ее создание. ТриггерыРазберем работу триггеров на прототипе, который мы подготовили: Задача: сделать переход из одной сцены в другую и обратно, когда Игрок подходит к двери. Триггеры подойдут замечательно. Для обработки триггеров скрипт получает события OnTriggerEnter, OnTriggerStay и OnTriggerExit. Работа с ними полностью аналогична работе с событиями Start и Update. Событие OnTriggerEnter будет посылаться, когда объект только вошел в зону триггера. Это то, что нам нужно, но для начала создадим сами объекты с триггерами. Триггер можно сделать из коллайдера. Для этого, нужно его выбрать и в окне Инспектор включить свойство isTrigger. Теперь тебе понадобится этот скрипт: OnTriggerSceneLoader.7z. Разберем как он работает. Размести этот скрипт на триггерах. В сцене внутри Башни укажи SceneName, который соответствует названию сцены снаружи Башни. И наоборот. Урок 13 — Определение столкновений с триггеромВ уроке рассказывается, как определить столкновения между невидимыми для игрока объектами, используя неосязаемые «триггер коллайдеры» (trigger colliders). Если вы хотите определить столкновения, но не ходите, чтоб столкнувшийся объект остановился, вам требуется использовать триггер (trigger) Триггеры позволяют вам определить, где именно расположен объект на сцене (во время запуска приложения). На нашей сцене имеется куб («box» с rigidbody), который падает на синюю платформу («platform»). Естественно платформа останавливает куб, поскольку среди ее компонентов присутствует box collider. У компонента box collider есть чекбокc Is Trigger. Если включить его и запустить сцену снова, то куб провалиться через платформу. Таким образом мы можем создавать столкновения, которые не должны быть видны пользователю. Например, отключим компонент Mesh Renderer у нашей платформы. Мы по прежнему видем зеленый контур объекта, если выделим его в Hierarchy View. Если мы нажмем play, то куб провалиться через нивидимую платформу, но пока мы не можем ничего узнать о произошедшем. Создадим скрипт, назовем его Trigger и добавим в тело класса следующий код // Обнаруживаем столновение с триггером // myTrigger – коллайдер, который столкнулся void OnTriggerEnter(Collider myTrigger) if (myTrigger.gameObject.name == “box”) Debug.Log(“Box went through!”); Добавим скрипт к платформе. Теперь, как тольку куб пройдет сквозь платформу, вы увидете сообщение «Box went through!» в консоли. |
Editor view
Game view
Game view
















Слева — Сцена с Башней, Справа — Сцена внутри Башни


