MonoBehaviour.OnCollisionEnter2D(Collision2D)
Параметры
| Параметр | Описание |
|---|---|
| прочие | Данные Collision2D, связанные с этим столкновением. |
Описание
Отправляется, когда входящий коллайдер контактирует с коллайдером этого объекта (2D только физика).
Дополнительная информация о столкновении сообщается в параметре Collision2D, передаваемом во время вызова. Если вам не нужна эта информация, то вы можете объявить OnCollisionEnter2D без параметра.
Примечание: OnCollisionEnter2D вызывается только на скриптах, присоединенных к GameObjects, которые имеют Collider2D и/или Rigidbody2D, непосредственно участвующих в столкновении. Он не передается автоматически родителю GameObjects, если только они сами не имеют соответствующих компонентов. Составные коллайдеры (родитель Rigidbody2D + ребенок Collider2Ds) получают события как на родителе, так и на конкретном ребенке, участвующем в столкновении. События столкновения отправляются отключенному MonoBehaviours, чтобы позволить включить Поведение в ответ на столкновения.
Дополнительные ресурсы: Collision2D class, OnCollisionExit2D, OnCollisionStay2D.
Следующие два примера скриптов создают OnCollisionEnter2D demo. Example1 генерирует (белый) box спрайт вызванный GameObject1. Этот спрайт столкнулся с Example2
GameObject2 который является floor спрайт. box sprite можно перемещать с помощью вверх, вниз, влево и вправо клавиши. Например, после того, как box уменьшилась до floor его можно подтолкнуть вверх с ключом вверх. Как только ключ вверх освобождается box упадет обратно к floorКаждый раз, когда box попадает в floor год OnCollisionEnter2D будет сделано.
GameObject1 просто предоставляет в консоли строку, указывающую на то, что столкновение произошло.
using UnityEngine;
// Create a box sprite which falls and hits a floor sprite. The box can be moved/animated // with the up, left, right, and down keys. Moving the box sprite upwards and letting it // fall will increase the number of calls from OnCollisionEnter2D.
public class Example1 : MonoBehaviour { public Texture2D tex;
void Awake() { SpriteRenderer sr = gameObject.AddComponent<SpriteRenderer>() as SpriteRenderer; transform.position = new Vector3(0.0f, 2.5f, 0.0f);
Sprite sp = Sprite.Create(tex, new Rect(0.0f, 0.0f, tex.width, tex.height), new Vector2(0.5f, 0.5f), 100.0f); sr.sprite = sp;
gameObject.AddComponent<BoxCollider2D>();
Rigidbody2D rb = gameObject.AddComponent<Rigidbody2D>(); rb.bodyType = RigidbodyType2D.Dynamic; }
void FixedUpdate() { float moveHorizontal = Input.GetAxis("Horizontal"); float moveVertical = Input.GetAxis("Vertical");
gameObject.transform.Translate(moveHorizontal * 0.05f, moveVertical * 0.25f, 0.0f); }
// called when the cube hits the floor void OnCollisionEnter2D(Collision2D col) { Debug.Log("OnCollisionEnter2D"); } }
Example2. Это создает пол.
using UnityEngine;
public class Example2 : MonoBehaviour { public Texture2D tex;
void Awake() { SpriteRenderer sr = gameObject.AddComponent<SpriteRenderer>() as SpriteRenderer; transform.position = new Vector3(0.0f, -2.0f, 0.0f);
Sprite sp = Sprite.Create(tex, new Rect(0.0f, 0.0f, tex.width, tex.height), new Vector2(0.5f, 0.5f), 100.0f); sr.sprite = sp;
gameObject.AddComponent<BoxCollider2D>(); } }
Два объекта хранятся как GameObjects каждый с одним из скриптов. Эти GameObjects начинаются только с примера скрипта, который ему нужен. Example1 применяется к GameObject1 и Example2 к GameObject2.