Rigidbody.OnCollisionEnter 当碰撞进入

function OnCollisionEnter (collisionInfo : Collision) : void

Description描述

OnCollisionEnter is called when this collider/rigidbody has begun touching another rigidbody/collider.

当这个collider/rigidbody已经开始接触另一个rigidbody/collider时,OnCollisionEnter被调用。

In contrast to OnTriggerEnter, OnCollisionEnter is passed the Collision class and not a Collider. The Collision class contains information about contact points, impact velocity etc. If you don't use collisionInfo in the function, leave out the collisionInfo parameter as this avoids unneccessary calculations. Note that collision events are only sent if one of the colliders also has a non-kinematic rigidbody attached.

相对于OnTriggerEnter,OnCollisionEnter传递Collision类而不是Collider。Collision类包含接触点,碰撞速度等细节。如果在函数中不使用collisionInfo,省略collisionInfo参数以避免不必要的计算。请注意如果一个碰撞器附加了一个非动力刚体,也只发送碰撞事件。

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
	void OnCollisionEnter(Collision collision) {
		foreach (ContactPoint contact in collision.contacts) {
		Debug.DrawRay(contact.point, contact.normal, Color.white);
	}
	if (collision.relativeVelocity.magnitude > 2)
		audio.Play();

	}
}
function OnCollisionEnter(collision : Collision) {
	// Debug-draw all contact points and normals
	//调试绘制所有的接触点和法线
	for (var contact : ContactPoint in collision.contacts) {
		Debug.DrawRay(contact.point, contact.normal, Color.white);
	}

	// Play a sound if the coliding objects had a big impact.
	//如果碰撞物体有一个较大的冲撞,播放一个声音
	if (collision.relativeVelocity.magnitude > 2)
		audio.Play();
}

另一个例子:

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
	public Transform explosionPrefab;
	void OnCollisionEnter(Collision collision) {
		ContactPoint contact = collision.contacts[0];
		Quaternion rot = Quaternion.FromToRotation(Vector3.up, contact.normal);
		Vector3 pos = contact.point;
		Instantiate(explosionPrefab, pos, rot);
		Destroy(gameObject);
	}
}
// A grenade 
// - instantiates a explosion prefab when hitting a surface
// - then destroys itself
//一枚手榴弹,在击中一个表面时初始化一个爆炸预设,然后销毁
var explosionPrefab : Transform;
function OnCollisionEnter(collision : Collision) {
	// Rotate the object so that the y-axis faces along the normal of the surface
	//旋转这个物体使y轴面向沿着表面法线的方向
	var contact = collision.contacts[0];
	var rot = Quaternion.FromToRotation(Vector3.up, contact.normal);
	var pos = contact.point;
	Instantiate(explosionPrefab, pos, rot);
	// Destroy the projectile
	//销毁这个物体
	Destroy (gameObject);
}
Page last updated: 2011-2-10