碰撞和触发

碰撞器分类:

盒型碰撞器(Box Collider),球形碰撞器(Sphere Collider),胶囊碰撞器(Capsule Collider),网格碰撞器(Mesh Collider),车轮碰撞器(Wheel Collider)等;

效率比较:

球形碰撞器>胶囊碰撞器>盒型碰撞器>网格碰撞器

碰撞的必备条件:

1、两个物体要有碰撞器

2、必须要有一个物体有刚体

物理材质:

Dynamic Friction:动态摩擦力。游戏对象运动时候的摩擦力,取值在0~1之间。

Static Friction:静态摩擦力。游戏对象放置表面时候的摩擦力,取值在0~1之间。值为0时表面类似冰的效果。

Bounciness:反弹,该参数用于设置游戏对象的反弹,值为0时表示没有反弹,值为1时表示能量没有损失的反弹,会一直反弹

Friction combine:摩擦力组合,该参数用于设置游戏对象摩擦力的组合方式。

Bounce combine:反弹组合,用于设置游戏对象反弹力的组合,反弹力组合提供了与摩擦力类似的选项。

碰撞检测:

能发生碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。

一、碰撞器是一群组件,包含了多个种类,比如:Box Collider, Capsule Collider等,这些碰撞器应用的场合不同,但必须加到GameObject身上。

二、所谓触发器,只需要在检视面板中碰撞器组件中勾选is Trigger属性选择框。

三、给游戏对象添加刚体(Rigdbody)组件,并且取消刚体组件的重力选项UseGravity。

碰撞器的三种方法:

//碰撞接触的那一帧被调用  

    void OnCollisionEnter(Collision collision) {  

     print(collision.gameObject.name);  }

// 碰撞接触的每帧都被调用  

    void OnCollisionStay(Collision collision) {  

        print(collision.gameObject.name);    }  

    // 碰撞结束被调用  

    void OnCollisionExit(Collision collision) {  

        print(collision.gameObject.name);   }  

触发器的三种方法:触发器可以穿透,所以把重力去掉。

// 触发接触的那一帧被调用  

    void OnTriggerEnter(Collider other) {  

       print(other.gameObject.name);  

    }  

    //触发接触的每帧都被调用  

    void OnTriggerStay(Collider other) {  

      print(other.gameObject.name);  

    }  

    // 触发结束被调用  

    void OnTriggerExit(Collider other) {  

     print(other.gameObject.name);  

    }  

### Unity3D 中碰撞触发的使用方法 在 Unity3D 中,碰撞体(Collider)用于定义物体之间的物理交互行为。当两个带有 Collider 的对象发生接触时,默认情况下会执行刚体间的碰撞响应。然而,通过设置其中一个或多个 Collider 为 Trigger,可以使这些对象之间不产生实际的物理碰撞效果而是触发特定事件。 #### 设置触发器 为了使某个 Collider 成为触发器,在 Inspector 面板中的该组件上勾选 **Is Trigger** 属性即可[^1]。此时此 collider 不再参与常规意义上的碰撞计算,而是在其他 Rigidbody 或者同样标记为 trigger 的 collider 进入其范围时发送消息给脚本处理逻辑。 #### 编写触发回调函数 对于希望监听并响应触发事件的游戏对象来说,需要在其挂载的 MonoBehavior 脚本内实现相应的虚函数来捕获进入、停留以及离开触发区域的动作: - `OnTriggerEnter(Collider other)` 当另一个具有 Rigidbody 组件的对象首次触碰到当前作为触发器的 Collider 时调用。 - `OnTriggerStay(Collider other)` 如果另一物体持续处于触发区域内,则每一帧都会被调用一次。 - `OnTriggerExit(Collider other)` 只要之前位于触发区内的物体移出了这个空间就会被执行。 下面是一个简单的例子展示了如何利用上述机制销毁带有所谓 "pick up" 标签的目标实体[^2]: ```csharp private void OnTriggerEnter(Collider collision) { if (collision.CompareTag("PickUp")) { // 注意这里修正了原代码中的拼写错误 Destroy(collision.gameObject); } } ``` 请注意,以上示例假设目标对象确实拥有名为 `"PickUp"` 的标签;如果没有预先设定好这样的分类标识符,那么条件判断将永远不会成立。 另外值得注意的是,如果遇到某些外部导入的模型比如 FBX 文件无法正常工作的情况,可能是因为缺少必要的几何数据支持。确保 Project 窗口中对应的资源项已开启 **Generate Colliders** 选项可以帮助解决这类问题[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值