MonoBehaviour.OnTriggerEnter2D(Collider2D)
Параметры
| Параметр | Описание |
|---|---|
| прочие | Другой Collider2D участвовал в этом столкновении. |
Описание
Отправляется, когда другой объект входит в коллайдер-триггер, прикрепленный к этому объекту (2D только физика).
Дополнительная информация о другом коллайдере сообщается в параметре Collider2D, передаваемом во время вызова.
Это сообщение отправляется триггеру Collider2D и Rigidbody2D (если таковой имеется), к которому принадлежит триггер Collider2D, и Rigidbody2D (или Collider2D, если нет Rigidbody2D), который касается триггера.
Примечание: Триггеры отправляются только в том случае, если к одному из Коллайдеров также прикреплен Rigidbody2D. Триггеры отправляются в отключенный MonoBehaviours, чтобы позволить включить Поведение в ответ на столкновения.
Дополнительные ресурсы: Collider2D class, OnTriggerExit2D, OnTriggerStay2D.
Следующие два примера скриптов создают OnTriggerEnter2D demo. Example1 генерирует Unity логотип, GameObject1. Этот спрайт сталкивается со спрайтом Example2,
GameObject2. Скрипт Example1 создает Rigidbody2D. В этом сценарии используется кинематический режим. Example2 поддерживает 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); } }
Example2. Это спрайт, который движется вперёд и назад и триггеры с Example1.
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; } }