Unity 6.3
0 онлайн 44 гостей 3 в системе
Вход

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.