Unity 3D 碰撞检测:使用 OnTriggerEnter 处理触发器碰撞事件
Unity 3D 碰撞检测:使用 OnTriggerEnter 处理触发器碰撞事件
这篇文章介绍了如何在 Unity 3D 引擎中使用 OnTriggerEnter 方法来检测和处理物体碰撞。代码示例使用 C# 编写,展示了如何创建一个简单的碰撞检测系统,并在物体碰撞时显示信息提示框。
C# 脚本:OnCollision.csC#public class OnCollision : MonoBehaviour{ public GameObject collisionPanel; // 定义信息提示框
void Start() { Rigidbody rb = GetComponent<Rigidbody>();
// 将刚体的运动类型设置为静态 rb.isKinematic = true;
// 将碰撞器设置为触发器 Collider collider = GetComponent<Collider>(); collider.isTrigger = true; }
/// <summary> /// 物体发生碰撞 /// </summary> /// <param name='other'>与当前物体碰撞的另一个碰撞器</param> private void OnTriggerEnter(Collider other) { //Debug.Log(gameObject.transform.name + '与' + collision.transform.name + '发生碰撞 ');
if (other.tag == 'cube') { return; } else { CollisionText.Instance.str_CollisionText = gameObject.transform.name + '与' + other.gameObject.name + '发生碰撞!'; // 将物体碰撞的信息导入碰撞信息文本 } CollisionText.Instance.UpdateCollisionText(); // 将物体碰撞的信息导入碰撞信息文本 UI
collisionPanel.SetActive(true); // 信息提示框显示 }}
代码解释
OnCollision类: 继承自MonoBehaviour,用于处理物体碰撞事件。-collisionPanel: 公共变量,用于引用信息提示框游戏对象。-Start方法: 在游戏开始时调用,初始化物体的刚体和碰撞器属性。 - 将刚体设置为静态 (isKinematic = true),防止物体因物理效果而移动。 - 将碰撞器设置为触发器 (isTrigger = true),允许物体接收触发事件。-OnTriggerEnter方法: 当物体与其他带有碰撞器的物体发生触发碰撞时调用。 - 检查碰撞物体的标签是否为 'cube',如果是,则不进行任何处理。 - 如果碰撞物体不是 'cube',则将碰撞信息存储在CollisionText实例的str_CollisionText变量中。 - 调用UpdateCollisionText方法更新 UI 上的碰撞信息文本。 - 激活信息提示框 (collisionPanel.SetActive(true))。
总结
这段代码展示了如何在 Unity 3D 中使用 OnTriggerEnter 方法处理物体碰撞。您可以根据自己的需求修改和扩展这段代码,例如添加声音效果、粒子效果或其他游戏逻辑。
原文地址: https://www.cveoy.top/t/topic/eaBj 著作权归作者所有。请勿转载和采集!