Unity3D圣典3.3版本-中文版
文集大纲加载中……
本文档使用 MrDoc 发布
-
+
首页
Collider.OnCollisionEnter 进入碰撞
# [Collider](Collider.html).OnCollisionEnter 进入碰撞 function *OnCollisionEnter* (*collisionInfo* : [Collision](../Collision/Collision.html)) : 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](../Collision/Collision.html) class and not a Collider. The [Collision](../Collision/Collision.html) 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](../Collision/Collision.html) 类而不是 Collider。[Collision](../Collision/Collision.html) 类包含接触点,碰撞速度等信息。在这个函数如果你不使用 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); } ```
da
2022年5月17日 17:51
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码