关于Unity3D 2D碰撞器和触发器的区别浅谈
展开全部
<pre t="code" l="csharp">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参数以避免不必要的计算。注意,如果碰撞器附加一个非动力学刚体,也仅发送碰撞事件。
C
JavaScript
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();
}
另一个例子:
C
JavaScript
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);
}
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参数以避免不必要的计算。注意,如果碰撞器附加一个非动力学刚体,也仅发送碰撞事件。
C
JavaScript
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();
}
另一个例子:
C
JavaScript
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);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询