版本: Unity 6 (6000.0)
语言英语
  • C#

MonoBehaviour.OnCollisionEnter2D(Collision2D)

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们确实阅读用户提出的每项更改建议,并在适用时进行更新。

关闭

提交失败

由于某种原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册

参数

其他 与此次碰撞相关的 Collision2D 数据。

描述

当传入的碰撞器与此对象的碰撞器接触时发送(仅限二维物理)。

有关碰撞的更多信息将在调用期间传递的 Collision2D 参数中报告。如果您不需要此信息,则可以在没有参数的情况下声明 OnCollisionEnter2D

注意:碰撞事件将发送到禁用的 MonoBehaviour,以允许根据碰撞启用行为。

其他资源:Collision2D 类,OnCollisionExit2DOnCollisionStay2D

以下两个脚本示例创建了 OnCollisionEnter2D 演示。示例 1 生成一个(白色)名为 GameObject1box 精灵。此精灵与示例 2 GameObject2(即 floor 精灵)碰撞。可以使用上下左右键移动 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"); } }

示例 2。这将创建地板。

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 从仅包含其所需的脚本示例开始。示例 1 应用于 GameObject1,示例 2 应用于 GameObject2。