other | 与该碰撞关联的 Collision2D 数据。 |
当传入碰撞体与该对象的碰撞体接触时发送(仅限 2D 物理)。
在调用期间传入的 Collision2D 参数中报告有关碰撞的进一步信息。如果不需要该信息,则可以声明没有参数的 OnCollisionEnter2D。
注意:碰撞事件将发送到已禁用的 MonoBehaviour,以便允许启用 Behaviour,以响应碰撞。
另请参阅:Collision2D 类、OnCollisionExit2D、OnCollisionStay2D。
以下两个脚本示例创建了一个 OnCollisionEnter2D 演示。
Example1 生成一个名为 GameObject1
的白色 box
精灵。
该精灵与 Example2 的 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 increate 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。