Параметры
other | Другой Collider2D участвовал в этом столкновении. |
Описание
Отправляется, когда другой объект входит в триггерный коллайдер, прикрепленный к этому объекту (только 2D-физика).
Дополнительная информация о другом коллайдере сообщается в параметре Collider2D, передаваемом во время вызова.
Это сообщение отправляется триггеру Collider2D и Rigidbody2D (если есть), к которому принадлежит триггер Collider2D, и Rigidbody2D (или Collider2D, если Rigidbody2D отсутствует), который касается триггера.
Примечание. Триггерные события отправляются только в том случае, если к одному из коллайдеров также подключен Rigidbody2D. Триггерные события отправляются отключенным MonoBehaviours, чтобы разрешить активацию Behaviours в ответ на коллизии.
Смотрите также: класс Collider2D, OnTriggerExit2D, OnTriggerStay2D.
В следующих двух примерах скрипта создается демонстрация OnTriggerEnter2D. В примере 1 создается спрайт с логотипом Unity, GameObject1
. С этим спрайтом сталкивается спрайт Example2, GameObject2
. Сценарий Example1 создает Rigidbody2D. В этом скрипте используется кинематический режим. Пример 2 поддерживает метод OnCollisionEnter2D. Это вызывается, когда GameObject2 сталкивается с GameObject1
. Код скрипта для GameObject2
определяет время, необходимое для столкновения с GameObject1
. GameObject2
неоднократно анимируется слева направо. Когда в левой части экрана GameObject2
перемещается вправо к GameObject1
. Когда они столкнулись, GameObject2
возвращается влево. Левая сторона экрана является отправной точкой для GameObject2
. Правая сторона экрана — это постоянная позиция GameObject1
. Код сценария Example2 заставляет GameObject2
конфликтовать с GameObject1
. GameObject2
остается в столкновении в течение короткого промежутка времени.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Example1 : MonoBehaviour
{
private BoxCollider2D bc;
private Rigidbody2D rb;
void Awake()
{
SpriteRenderer sprRend = gameObject.AddComponent<SpriteRenderer>() as SpriteRenderer;
sprRend.color = new Color(0.9f, 0.9f, 0.9f, 1.0f);
bc = gameObject.AddComponent<BoxCollider2D>() as BoxCollider2D;
bc.size = new Vector2(1.3f, 1.3f);
bc.isTrigger = true;
rb = gameObject.AddComponent<Rigidbody2D>() as Rigidbody2D;
rb.bodyType = RigidbodyType2D.Kinematic;
}
void Start()
{
gameObject.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("logo");
gameObject.transform.Translate(4.0f, 0.0f, 0.0f);
gameObject.transform.localScale = new Vector2(2.0f, 2.0f);
}
}
Пример 2. Это спрайт, который перемещается вперед и назад и срабатывает в Примере 1.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Example2 : MonoBehaviour
{
private float spriteMove;
void Awake()
{
SpriteRenderer sprRend;
sprRend = gameObject.AddComponent<SpriteRenderer>() as SpriteRenderer;
sprRend.color = new Color(0.9f, 0.9f, 0.9f, 1.0f);
BoxCollider2D bc;
bc = gameObject.AddComponent<BoxCollider2D>() as BoxCollider2D;
bc.size = new Vector2(1.3f, 1.3f);
bc.isTrigger = true;
}
void Start()
{
gameObject.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("circle");
gameObject.transform.Translate(-4.0f, 0.0f, 0.0f);
spriteMove = 0.1f;
}
void FixedUpdate()
{
gameObject.transform.Translate(spriteMove, 0.0f, 0.0f);
if (gameObject.transform.position.x < -4.0f)
{
// move GameObject2 to the right
spriteMove = 0.1f;
}
}
// when the GameObjects collider arrange for this GameObject to travel to the left of the screen
void OnTriggerEnter2D(Collider2D col)
{
Debug.Log(col.gameObject.name + " : " + gameObject.name + " : " + Time.time);
spriteMove = -0.1f;
}
}