ontriggerenter2d unity что это
Справочник: C#
Общее
Переменная — поименованная область памяти, адрес которой можно использовать для осуществления доступа к данным и изменять значение в ходе выполнения программы. Переменные хранят в себе информацию разного типа, эти данные называют значением переменной. Для каждого типа данных есть свой тип переменной. Например:
Инициализация переменной
Все переменные в C# должны быть объявлены (инициализированы) до их применения. Например:
Задать значение переменной можно, в частности, с помощью оператора присваивания — знак «=». Кроме того, при объявлении переменной можно сразу задать ее значение. Например:
Переменные численных типов можно складывать, вычитать, умножать и делить:
+ — операция сложения;
— — операция вычитания;
* — операция умножения;
/ — операция деления.
Довольно часто при создании скриптов возникает необходимость сделать так, чтобы выполнение или невыполнение каких-то действий зависело от выполнения или невыполнения некоторого условия. Для решения подобных задач используется условный оператор if:
Чтобы сказать программе, что делать, если условие не выполняется, используйте блок else:
Бывает, что нужно проверить несколько вариантов условия. Для этого используется блок else if:
Для сравнения значений существуют следующие операторы:
> больше
>= больше или равно.
== равно.
!= не равно.
Функция — участок кода с собственными именем, который принимает на вход какие-то данные, что-то с ними делает и возвращает обратно результат (хотя возможен вариант когда функция ничего не принимает и не возвращает,а просто что-то делает).
Посмотри на пример:
У нас есть разные люди с данными в виде отдельных фамилии, имени, отчества, которые надо объединить и вывести на экран. Обрати внимание, что два раза повторяется один и тот же участок кода — склеивание трех строк в одну. Функция в нашем случае будет выглядеть вот так:
Слова public static отложим пока в сторону, string означает, что функция вернет назад строку, CreateFio(string surname, string name, string otchestvo) — название функции и описание того, что она принимает на вход три строки.
Теперь та же программа будет выглядеть таким образом:
Unity Engine
Эта функция клонирует объект и размещает клон в нужно тебе месте.
Ты можешь клонировать GameObject или компонент. Если ты клонируешь компонент, то GameObject, к которому он присоединен, также будет клонирован. В обоих случаях все дочерние объекты также будут клонированы. Все свойства при этом будут соответствовать оригинальному объекту.
Ты можешь клонировать объект, который размещен на сцене или prefab.
OnTriggerEnter(Collider) — это функция событий.
OnTriggerEnter вызывается, когда Collider other входит в триггер. Код, который будет размещен в этой функции, будет выполнен один раз.
OnTriggerExit(Collider) — это функция событий.
OnTriggerEnter вызывается, когда Collider other выходит из триггер. Код, который будет размещен в этой функции, будет выполнен один раз.
OnTriggerStay(Collider) — это функция событий.
OnTriggerStay вызывается почти каждый кадр, пока Collider other находится в триггере. Код, который будет размещен в этой функции, будет выполнятся до тех пор, пока Collider other не выйдет за пределы триггера.
Start — это функция событий.
Функция Start вызывается до обновления первого кадра(first frame) только если скрипт включен.
Для объектов добавленных на сцену, функция Start будет вызываться во всех скриптах до функции Update. Естественно, это не может быть обеспечено при создании объекта непосредственно во время игры.
Каждый объект в сцене имеет Transform. Компонент Transform содержит в себе следующие свойства: позиция (position), поворот (rotation) и масштаб объекта (scale).
Значения положения, вращения и масштаба Transform’а измеряются относительно его родителя. Если у Transform’а нет родителя, тогда все эти свойства измеряются в мировом пространстве.
Игра — это что-то вроде анимации, в которой кадры генерируются на ходу. Ключевой концепт в программировании игр заключается в изменении позиции, состояния и поведения объектов в игре прямо перед отрисовкой кадра. Такой код в Unity обычно размещают в функции Update. Update вызывается перед отрисовкой кадра и перед расчётом анимаций.
Этот справочник постоянно дополняется. Если у тебя есть, что добавить, тебе хочется что-то убрать или изменить, а может просто сказать «спасибо» — пиши Администратору сайта.
Про создание платформера на Unity. Часть вторая, звездная
Я, как и обещал, продолжаю делиться с вами знаниями, приобретенными в процессе освоения 2D-режима Unity. От начинающего, так сказать, начинающим. Систематизирую, улучшаю и прогрессирую вместе с вами. Сегодня мы добавим к содержимому первой статьи управление камерой, сбор бонусов и первый способ умереть в игре. Если вам, как и мне, не терпится приступить, то добро пожаловать под кат.
И да, гифок там еще больше, чем в прошлый раз.
Чтобы камера во время игры не стояла статично, а плавно двигалась за персонажем, используем заранее подготовленный скрипт. Все по-прежнему просто: берем его и перетаскиваем, но уже на камеру.
Сам скрипт очень короткий и выглядит вот так:
Main camera, на которую повешен этот скрипт, следует за объектом, который указан у него (скрипта) в публичной переменной target. К слову — все публичные переменные в скриптах можно изменять прямо из редактора Unity. В нашем случае укажем на храброго носатого героя, запустим игру и проверим.
Теперь можно сделать префаб из платформы (помните как? если нет, смотрите первую статью) и раскидать их по сцене произвольным образом. В моем случае, выглядеть это все будет примерно так:
Прогуляемся по уровню. Прыжок, еще прыжок… Неудачное движение и герой падает в яму и не собирается возвращаться назад. Как нам с этим бороться? Да легко! Основная идея в том, что в пустоте под платформами будут расположены невидимые объекты, при пересечении которых можно будет загрузить уровень заново или вернуть персонажа назад с, допустим, минус одной жизнь. Для этого нам понадобятся пустой объект, которому добавим Box Collider (вытянутый по горизонтали) и поставим на нем в инспекторе галку Is trigger. Триггер в Unity отличается от простого коллайдера тем, что он не является препятствием, но при пересечении с объектом может вызвать какое-то событие. Объект переименуем в dieCollider и напишем немного кода для обработки падения. Вот вам гифка по случаю такого длинного абзаца:
Как можно быстрее найдем во вкладке Assets и, после двойного клика, впервые познакомимся с MonoDevelop в рамках этой серии уроков.
Для обработки пересечения с триггером используется функция OnTriggerEnter2D. Для простого коллайдера аналогично OnCollisionEnter2D.
Добавим следующий код:
Как видите, все логично. Если имя объекта, с которым мы столкнулись, совпадает со строкой «dieCollider», то перезагружаем уровень вполне очевидным методом — загружаем еще раз уровень, который уже загружен.
Теперь можно упасть в яму и…
Отлично, персонаж возвращается на стартовую позицию. Сделаем префаб из dieCollider’а, расставим его копии во всех опасных местах и осмотримся: чего-то явно не хватает. Конечно, бонусов, которые можно собирать! Принцип их создания абсолютно аналогичен созданию областей, которые возвращают нас назад. Мы будем снова использовать триггеры, только теперь будем сталкиваться не с невидимым объектом, а со вполне конкретной звездой. Работает это так:
Теперь вернемся в MonoDevelop и напишем немного кода. Объявим float переменную score (которую на первое время можно сделать публичной, чтобы следить за результатом в процессе создания игры) и добавим следующий код в функцию OnTriggerEnter2D
Он выполняет две простые функции — увеличивает результат на единицу и уничтожает объект, с которым мы столкнулись (в данном случае звезду). Так как из бонуса мы уже сделали префаб, раскидаем немного по уровню и посмотрим что будет, если их собирать. Обратите внимание на переменную score в правом нижнем углу экрана.
Теперь давайте научимся отображать результат на экране, ведь никто не хочет играть в игру прямо в редакторе и смотреть где-то сбоку количество собранных звезд. В этом нам поможет функция OnGUI(), которая прекрасно умеет отрисовывать на экране текстовые блоки, кнопки и прочие полезные вещи.
Проще некуда. Прямо на ДжиЮАе рисуется квадрат с координатой левого верхнего угла (0,0) и размерами 100×100. В нем выводится текст, прямо говорящий нам о количестве собранных звездочек.
Вот так. По итогам двух уроков мы научились создавать игровое окружение, добавили в игру бонусы, возможность умереть и начать заново. В следующий раз я покажу вам как сделать несколько уровней и заставить нашего персонажа бросаться чем-нибудь во что-нибудь. Но этого определенно мало. Поэтому добавим немного интерактивности в наше с вами обучение: голосуйте в прикрепленном опросе и я обязательно добавлю что-то на выбранную вами тему.
И да: напомню, что прямо сейчас проходит конкурс разработчиков игр, в котором можно принять участие и получить Xbox One или Lumia 930!
Unity3d. Уроки от Unity 3D Student (B13-B16)
Предыдущие уроки вы можете найти по следующим ссылкам:
Уроки B01-B03
Уроки B04-B08
Уроки B09-B12
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.
Добавим его на сцену — Game Object->Create Other->GUI Text.
Так же, обратите внимание, чтоб у камеры был включен компонент GUILayer.
Текст можно редактировать напрямую через редактор (поле Text).
Но мы воспользуемся скриптом для этого. Добавим скрипт (GUITextExample). Код будем писать в метод Update():
Если зайти в стравку о параметре guiText.text, то увидите следующие:
var text: String
Description
The text to display.
То есть, при передачи параметра мы должны быть уверены что передаем string.
Теперь если запустить игру, то текст поменяется.
Попробуем отобразить счетчик. В класс добавим переменную-счетчик (Counter) и немного подправим код в методе Update().
В итоге Unity выдаст ошибку:
Нам требуется привести переменную типа int к типу string.
Это можно сделать многими способами. Вот некоторые из них:
Воспользуемся последним способом, только вместо пустой строки напишем текст:
Жмем play и наблюдаем как увеличивается значения переменной-счетчика.
Мы так же можем изменить шрифт текста, если у вас в проекте есть дополнительный шрифт (font).
Чтоб поменять шрифт, достаточно перетащить его в соответствующие поле компонента GUIText (Font).
Тут же можно поменять другие параметры, такие как размер (font size), выравнивание (alignment) и некоторые другие.
Базовый Урок 15 — Добавление компонентов с помощью скриптов
В уроке рассказывается, как добавить компонент к объекту используя скрипты и быть увереным, что мы их добавили только однажды.
Для того, чтобы добавить компонент в run-time воспользуемся скриптами.
В нашем примере у нас снова есть платформа («platform») и ящик(«box» с rigidbody) который на нее падает.
Попробуем добивать компонент к платформе, как только ящик упадёт на неё.
Добавим скрипт addComp В класс добивим следующий код:
Скрипт добавим к ящику. Жмем 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
Немного подредактируем наш скрипт так, чтоб мы могли указывать имя уровня из окна редактора, таким образом мы делаем наш скрипт более «гибким».
В окне редактора, на против соответствующего поля компонента, напишем название сцены, которую хотим загрузить.
Collider.OnTriggerEnter(Collider)
Success!
Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.
Submission failed
For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.
Parameters
Description
When a GameObject collides with another GameObject, Unity calls OnTriggerEnter.
OnTriggerEnter happens on the FixedUpdate function when two GameObjects collide. The Colliders involved are not always at the point of initial contact.
Note: Both GameObjects must contain a Collider component. One must have Collider.isTrigger enabled, and contain a Rigidbody. If both GameObjects have Collider.isTrigger enabled, no collision happens. The same applies when both GameObjects do not have a Rigidbody component.
To use the following code sample, create a primitive GameObject, and attach a Collider and Rigidbody component to it. Enable Collider.isTrigger and Rigidbody.isKinematic. This GameObject will travel forward, until it collides with another GameObject. When a collision occurs, the direction immediately reverses.
Is something described here not working as you expect it to? It might be a Known Issue. Please check with the Issue Tracker at issuetracker.unity3d.com.
Copyright ©2021 Unity Technologies. Publication Date: 2021-12-10.
#6 OnTriggerEnter and OnTriggerExit Methods. Detecting objects in Unity
Introduction
In this article we are going to study how to use the OnTriggerEnter (Collider c) and OnTriggerExit (Collider c) methods to detect the player in a given region and apply actions when that happens. Specifically we are going to make the GameDevLab door open when the player is in front of it and close when it moves away.
Go to the project’s main page
Procedure
We are going to use the “OnTriggerEnter/Exit” station, which consists of a portal that leads to a small room that for now has nothing special.
Initially the door is closed, our goal is to detect the character when he approaches and open the door to let him in and away from the portal the door must close.
All elements of the station are contained in the GameObject “#6 OnTriggerEnter/Exit”.
This GameObject is assigned the script “OnTriggerEnterExit” which is the one we have to complete on this occasion.
In addition to a Mesh Collider so that the character does not cross the structure, it also has a Box Collider in Trigger mode, as seen in figures 3 and 4.
Let’s use this Collider to solve the exercise.
If you want to know more about Colliders I invite you to watch this video I made for the series “My First Game in Unity”.
Resolution
When we open the OnTriggerEnterExit Script for the first time we find two methods, the openDoor() method that will open the door and the closeDoor() method that will close it.
In addition, the region where the redefinition of the OnTriggerEnter(Collider c) and OnTriggerExit(Collider c) methods is suggested is indicated with green comments.
We’re not going to worry about how the door opens and closes because that’s already solved in GameDevLab.
How the OnTriggerEnter(Collider c) and OnTriggerExit(Collider c) methods work
In the previous article we saw how the OnTriggerStay method worked and we used it to make the damage and regeneration stations affect the player’s health.
For the OnTriggerEnter and OnTriggerExit methods the same requirements are needed, what changes is the moment they are executed.
OnTriggerEnter runs the moment the player enters the trigger for the first time, i.e. the previous frame of the game was outside the trigger and the current frame is inside.
On the other hand, the OnTriggerExit method is executed at the moment in which the player leaves the trigger, that is to say in the previous frame of the game it was inside the trigger and in the current frame it is outside.
With this in mind, what we can do is open the door in the OnTriggerEnter method and close it in the OnTriggerExit method.
In addition we are going to verify that the tag of the Collider that entered in the trigger is equal to “Player”, of that form we know that it is about the player. The following figure shows the resolution.
Conclusion
The OnTriggerEnter and OnTriggerEnter methods allow us to detect GameObjects that enter a certain region, this has a number of applications, for example activate kinematics, mechanisms, allow us to perform certain actions only when we are in a certain region, and so on.
Unlike the OnTriggerStay method, these methods are run only once when one of the above situations occurs.