Collider.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 : ContactPoint = collision.contacts[0];
	var rot : Quaternion = Quaternion.FromToRotation(Vector3.up, contact.normal);
	var pos : Vector3 = contact.point;
	Instantiate(explosionPrefab, pos, rot);
	// Destroy the projectile
	//销毁物体
	Destroy (gameObject);
}
Page last updated: 2013-7-12