Параметры
other | Данные Collision2D, связанные с этим столкновением. |
Описание
Отправляется, когда входящий коллайдер вступает в контакт с коллайдером этого объекта (только для 2D-физики).
Дополнительная информация о столкновении сообщается в параметре Collision2D, передаваемом во время вызова. Если вам не нужна эта информация, вы можете объявить OnCollisionEnter2D без параметра.
Примечание. События столкновения будут отправляться отключенным MonoBehaviours, чтобы можно было включить поведение в ответ на коллизии.
Смотрите также: класс Collision2D, OnCollisionExit2D, OnCollisionStay2D.
Следующие два примера скрипта создают демонстрацию OnCollisionEnter2D. Пример 1 генерирует (белый) спрайт box
с именем GameObject1
. Этот спрайт сталкивается со спрайтом Example2 GameObject2
, который является спрайтом floor
. Спрайт box
можно перемещать с помощью клавиш вверх, вниз, влево и вправо. Например, когда box
упадет на floor
, ее можно поднять вверх с помощью клавиши "вверх". Как только клавиша «вверх» будет отпущена, коробка
упадет обратно на floor
. Каждый раз, когда box
достигает floor
, будет выполняться вызов OnCollisionEnter2D. сделанный. GameObject1
просто предоставляет в консоли строку, указывающую, что столкновение произошло.
using UnityEngine;
// Создаем спрайт коробки, который падает и ударяется о спрайт пола. Коробку можно перемещать/анимировать
// с помощью клавиш вверх, влево, вправо и вниз. Переместите спрайт коробки вверх и дайте ему
// падение увеличит количество вызовов из 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);
}
// вызывается, когда куб падает на пол
void OnCollisionEnter2D(Collision2D col)
{
Debug.Log("OnCollisionEnter2D");
}
}
Example2. This creates the floor.
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, каждый с одним из сценариев. Эти игровые объекты начинаются только с примера сценария, который им нужен. Example1 применяется к GameObject1, а Example2 — к GameObject2.