其他 | 与此次碰撞相关的 Collision2D 数据。 |
当传入的碰撞器与此对象的碰撞器接触时发送(仅限二维物理)。
有关碰撞的更多信息将在调用期间传递的 Collision2D 参数中报告。如果您不需要此信息,则可以在没有参数的情况下声明 OnCollisionEnter2D。
注意:碰撞事件将发送到禁用的 MonoBehaviour,以允许根据碰撞启用行为。
其他资源:Collision2D 类,OnCollisionExit2D,OnCollisionStay2D。
以下两个脚本示例创建了 OnCollisionEnter2D 演示。示例 1 生成一个(白色)名为 GameObject1
的 box
精灵。此精灵与示例 2 GameObject2
(即 floor
精灵)碰撞。可以使用上下左右键移动 box
精灵。例如,一旦 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"); } }
示例 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。