Unity(2022.3.41LTS) - 3D碰撞

目录

零. 简介

一、碰撞的基本概念

二、碰撞器组件

三、刚体组件与碰撞检测

四、碰撞检测的优化

五、应用场景举例

六.代码实例



零. 简介

在 Unity 中,3D 碰撞是实现物体之间交互和物理模拟的重要机制。

                                                              中间的立方体没有加碰撞.

一、碰撞的基本概念

  1. 定义:碰撞是指两个或多个物体在物理空间中相互接触的过程。在 Unity 中,碰撞检测用于确定物体是否与其他物体发生了接触,并触发相应的事件或行为。
  2. 作用:碰撞检测在游戏开发中具有重要作用,它可以实现以下功能:
    • 物体之间的交互:例如,角色与障碍物的碰撞可以阻止角色继续前进,球与墙壁的碰撞可以改变球的运动方向。
    • 物理模拟:碰撞检测可以模拟真实世界中的物理现象,如重力、摩擦力、弹性等。
    • 触发事件:当物体发生碰撞时,可以触发特定的事件,如播放音效、产生粒子效果、触发剧情等。

二、碰撞器组件

  1. 碰撞器类型:

    • Unity 提供了多种类型的碰撞器组件,用于定义物体的形状和大小。常见的碰撞器类型包括:
      • Box Collider(盒子碰撞器):用于模拟长方体形状的物体。
      • Sphere Collider(球体碰撞器):用于模拟球体形状的物体。
      • Capsule Collider(胶囊碰撞器):用于模拟胶囊形状的物体,通常用于角色控制器。
      • Mesh Collider(网格碰撞器):根据物体的网格形状生成碰撞器,可以实现更精确的碰撞检测,但计算成本较高。
    • 可以根据物体的实际形状选择合适的碰撞器类型,以提高碰撞检测的准确性和性能。
  2. 碰撞器属性:

    • 碰撞器组件具有一些属性,可以用于调整碰撞器的行为和外观:
      • Center:碰撞器在物体本地坐标系中的中心位置。
      • Size:碰撞器的大小,可以根据物体的实际尺寸进行调整。
      • Is Trigger:如果勾选该选项,碰撞器将变为触发器,不会产生物理碰撞效果,而是用于触发事件。
    • 可以根据需要调整这些属性,以满足不同的碰撞检测需求。

三、刚体组件与碰撞检测

  1. 刚体的作用:

    • 刚体(Rigidbody)组件用于模拟物体的物理特性,如质量、重力、速度等。在 Unity 中,刚体和碰撞器通常一起使用,实现物体的物理模拟和碰撞检测。
    • 刚体组件可以使物体受到重力、摩擦力、碰撞力等物理力的影响,并根据牛顿力学定律进行运动。
  2. 碰撞检测的触发方式:

    • 当两个具有刚体和碰撞器的物体发生碰撞时,Unity 会自动检测到碰撞事件,并触发相应的函数。可以在脚本中重写以下函数来处理碰撞事件:
      • OnCollisionEnter:当物体与其他物体发生碰撞时触发。
      • OnCollisionStay:当物体与其他物体保持碰撞状态时持续触发。
      • OnCollisionExit:当物体与其他物体结束碰撞时触发。
    • 可以在这些函数中编写代码,实现碰撞后的行为,如播放音效、减少生命值、改变物体的运动状态等。

四、碰撞检测的优化

  1. 碰撞层和碰撞矩阵:

    • Unity 允许将物体分配到不同的碰撞层(Layer)中,并通过碰撞矩阵(Physics Matrix)来控制不同层之间的碰撞检测。可以在项目设置中调整碰撞矩阵,以减少不必要的碰撞检测,提高性能。
    • 例如,可以将一些不应该发生碰撞的物体分配到不同的碰撞层,并在碰撞矩阵中禁用它们之间的碰撞检测。
  2. 碰撞检测模式:

    • Unity 提供了不同的碰撞检测模式,用于平衡碰撞检测的准确性和性能。可以在刚体组件的属性中选择以下碰撞检测模式:
      • Discrete:离散碰撞检测,适用于大多数情况,准确性较高,但性能开销较大。
      • Continuous:连续碰撞检测,适用于高速运动的物体,可以避免物体穿透其他物体,但性能开销较大。
      • Continuous Dynamic:连续动态碰撞检测,适用于高速运动的物体和动态物体,可以避免物体穿透其他物体,但性能开销最大。
    • 可以根据物体的运动速度和场景的需求选择合适的碰撞检测模式,以提高性能。
  3. 优化碰撞器形状:

    • 尽量使用简单的碰撞器形状,如盒子碰撞器、球体碰撞器等,避免使用复杂的网格碰撞器,以减少计算成本。
    • 可以根据物体的实际形状和运动方式,选择最合适的碰撞器类型,并调整碰撞器的大小和位置,以提高碰撞检测的准确性和性能。

五、应用场景举例

  1. 游戏角色与环境的交互:

    • 在游戏中,角色需要与环境中的物体进行碰撞检测,以实现行走、跳跃、攀爬等动作。可以使用盒子碰撞器或胶囊碰撞器来模拟角色的形状,并设置合适的碰撞层和碰撞矩阵,以确保角色与环境中的物体能够正确地发生碰撞。
    • 当角色与障碍物发生碰撞时,可以阻止角色继续前进,并根据碰撞的方向和力度调整角色的运动状态。
  2. 物理模拟游戏:

    • 在物理模拟游戏中,碰撞检测是实现物理效果的关键。例如,在台球游戏中,球与球之间的碰撞、球与桌面的碰撞都需要通过碰撞检测来实现。可以使用球体碰撞器来模拟球的形状,并设置合适的刚体属性和碰撞检测模式,以实现真实的物理效果。
    • 当球发生碰撞时,可以根据碰撞的方向和力度计算球的运动轨迹,并更新球的位置和速度。
  3. 触发器的应用:

    • 触发器是一种特殊的碰撞器,它不会产生物理碰撞效果,而是用于触发事件。可以使用触发器来实现一些特殊的功能,如检测角色进入某个区域、触发剧情、打开门等。
    • 当物体进入触发器区域时,可以触发相应的事件,并执行特定的代码逻辑。

六.代码实例

把这个物体的名字 改为地面,

然后加入碰撞检测

    private void OnCollisionEnter(Collision collision)
    {
        Debug.LogError(collision.transform.name);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一然明月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值