Version: 2023.1

MonoBehaviour.OnCollisionEnter2D(Collision2D)

切换到手册

参数

other 与该碰撞关联的 Collision2D 数据。

描述

当传入碰撞体与该对象的碰撞体接触时发送(仅限 2D 物理)。

在调用期间传入的 Collision2D 参数中报告有关碰撞的进一步信息。如果不需要该信息,则可以声明没有参数的 OnCollisionEnter2D

**注意:**碰撞事件将发送到已禁用的 MonoBehaviour,以便允许启用 Behaviour,以响应碰撞。

另请参阅:Collision2D 类、OnCollisionExit2DOnCollisionStay2D

以下两个脚本示例创建了一个 OnCollisionEnter2D 演示。 Example1 生成一个名为 GameObject1 的白色 box 精灵。 该精灵与 Example2 的 GameObject2floor 精灵)碰撞。可以使用上、下、左、右键移动 box 精灵。 例如,当 box 落到 floor 时,可以用向上键将其向上推。 松开向上键后,box 将再度落向 floor。 每当 box 撞到 floor,都将调用 OnCollisionEnter2DGameObject1 只是在控制台中提供一个字符串, 表示发生了碰撞。

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>(); } }

这两个对象存储为 GameObject,每个对象附加上述脚本之一。 这些 GameObject 仅从它需要的脚本示例开始。 Example1 应用于 GameObject1,Example2 应用于 GameObject2。