Collider 详解

    • 一Mesh Collider
      • 1 属性
      • 2 触发器 Trigger
      • 3 摩擦力和弹力
      • 4 Hints
    • 二Box Collider
      • 1 属性
    • 三Capsule Collider
      • 1 属性
    • 四Wheel Collider
    • 五高级
      • 1 碰撞体组合
      • 2 碰撞动作矩阵
    • 参考

一、Mesh Collider

网格碰撞器利用 网格资源 并在其上构建碰撞器。对于复杂网状模型上的碰撞检测,它要比 基元碰撞器(boxCollider、capsuleCollider等)精确的多。标记为 Convex 的网格碰撞器才能够和其他网格碰撞器发生碰撞。

Collider 详解_第1张图片

1.1 属性

  • Material 材质
    引用何种物理材质,决定了他和其他对象如何作用。

  • Is Trigger 是否触发器
    如激活,此碰撞器用于触发事件,并且被物理引擎忽略。

  • Mesh 网格
    用于碰撞所引用的网格。

  • Smooth Sphere Collisions 平滑性状碰撞
    当被激活,碰撞网格法线是平滑的。用于平滑表面比如由没有棱角的平滑起伏组成的起伏地标时应该激活。

  • Convex 凸起的
    如激活,该网格碰撞器将会和其他网格碰撞器碰撞。凸起的网格碰撞器限制在 255 个三角形面内。


网格碰撞器通过附加在游戏对象上的 网格 构建碰撞效果,并严格按照所附加对象的 Transform 属性来设定碰撞器位置和大小比例。

使用 Mesh Collider 时有一些限制。通常,两个 Mesh Collider 不能相互碰撞,所有 Mesh Collider 都可以与任何基元 Collider 碰撞。如果某个 Mesh Collider 标记为凸体 (Convex),则它可以与其他 Mesh Collider 碰撞,即两个网格碰撞体中只有一个标记了 Convex 时。

碰撞体 (Collider) 与刚体 (Rigidbody) 结合使用可使 Unity 中的物理变得生动。刚体 (Rigidbody) 使对象可以受物理控制,而碰撞体 (Collider) 使对象可以相互碰撞。碰撞体 (Collider) 必须独立于刚体 (Rigidbody) 添加到对象。碰撞体 (Collider) 并不一定需要附加刚体 (Rigidbody),但是必须添加刚体 (Rigidbody) 才能使对象由于碰撞而移动。

当两个碰撞体 (Collider) 之间发生碰撞时,并且如果其中至少一个附加了刚体 (Rigidbody),会将三条碰撞消息(OnCollisionEnter、OnCollisionEnter、OnCollisionStay)向外发送给附加到它们的对象。这些事件可以在脚本中进行处理,使您可以在使用或不使用内置 NVIDIA PhysX 引擎的情况下创建独特行为。


1.2 触发器 (Trigger)

碰撞体还可以作为触发器 (Trigger),只需在检视视图 (Inspector) 中选中“为触发器”(IsTrigger) 属性复选框即可。触发器 (Trigger) 实际上会被物理引擎忽略,并具有一组独有的三条触发器消息(OnTriggerEnter、OnTriggerExit、OnTriggerStay),这些消息会在与触发器 (Trigger) 发生碰撞时向外发送。触发器 (Trigger) 可用于触发游戏中的其他事件,如剧情画面、自动门打开、显示辅导消息等。请充分发挥您的想象力!

请注意,要使两个触发器 (Trigger) 在碰撞时向外发送触发器 (Trigger) 事件,其中之一必须还包括刚体 (Rigidbody)。要使触发器 (Trigger) 与普通碰撞体 (Collider) 碰撞,则其中之一必须附加刚体 (Rigidbody)。有关不同类型碰撞的详细图表,请参阅下面“高级”部分中的碰撞动作矩阵。


1.3 摩擦力和弹力

摩擦力、弹力和柔软度在物理材质 (Physisc Material) 中定义


1.4 Hints

  • Mesh Collider 不能相互碰撞,除非而且两者之一标记为凸体 (Convex)。因此,它们对背景对象(如环境几何结构)最有用。
  • 标记为 Convex 的 Mesh Collider 必须少于 255 个三角形。
  • 对于处于物理控制下的对象,基元碰撞体 (Collider)成本较低。
  • 要为对象添加多个碰撞体(Collider),可创建子游戏对象 (GameObject) 并向每个子游戏对象 (GameObject) 附加碰撞体(Collider)。这样便可以独立处理每个碰撞体(Collider)。
  • 可以在场景视图 (Scene View) 中查看小图示以了解在对象上计算碰撞体(Collider) 的方式。
  • 碰撞体(Collider) 会尽量匹配对象的缩放。如果您具有不均匀缩放(在各个方向上不同的缩放),则只有网格碰撞体(Mesh Collider) 才能完全匹配。
  • 如果需要通过 Transform 移动某个对象,但是希望接收碰撞体(Collider)/触发器 (Trigger) 消息,则必须将刚体 (Rigidbody) 附加到移动的对象。


二、Box Collider

盒碰撞器是一个基本的方形碰撞原型。

Collider 详解_第2张图片


2.1 属性

  • Size 大小
    在X、Y、Z三维上的碰撞器尺寸。

  • Center 中心
    碰撞器在对象本地坐标中的位置


可以将箱体碰撞体 (Box Collider) 大小调整为不同形状的矩形棱镜。它十分适用于门、墙壁、平台等。它还可有效地作为布娃娃中的人体躯干或车辆中的车体。

Collider 详解_第3张图片


三、Capsule Collider

胶囊碰撞体 (Capsule Collider) 由两个半球体与一个圆柱体相连接而构成。它与胶囊 (Capsule) 基元形状相同。

Collider 详解_第4张图片


3.1 属性

  • Center
    碰撞体 (Collider) 在对象局部坐标空间中的位置。

  • Radius
    碰撞体 (Collider) 局部坐标宽度的半径。

  • Height
    碰撞体 (Collider) 的总高度。

  • Direction
    对象局部坐标空间中胶囊纵向方向的轴。


可以相互独立地调整胶囊碰撞器 (Capsule Collider) 的半径 (Radius) 和高度 (Height) 。它在角色控制器 (Character Controller) 中使用,适用于柱状物,也可以与其他碰撞器 (Collider) 结合用于异常形状。

Collider 详解_第5张图片


四、Wheel Collider

http://docs.manew.com/Components/index.htm


五、高级

5.1 碰撞体组合

在 Unity 中可以进行不同的 Collider 组合。每个游戏都是独一无二的,不同组合可能更适合于不同类型的游戏。

  • 静态碰撞体 (Static Collider)
    附加了 Collider,但没有添加 Rigidbody 的 GameObject。这些对象应保持静态,或很少移动。这些十分适用于环境几何结构。它们在与 Rigidbody 碰撞时不会移动。

  • 刚体碰撞体 (Rigidbody Collider)
    同时包含 Rigidbody 和 Collider 的 GameObject。完全受物理引擎影响,可以与仅包含 Collider 的 GameObject 碰撞。

  • 运动学刚体碰撞体 (Kinematic Rigidbody Collider)

    包含 Collider 、Rigidbody 且标记有“为运动学”(IsKinematic) 的 GameObject。要移动此游戏对象 (GameObject),请修改其 Transform ,而不是应用力。它们类似于静态碰撞体 (Static Collider),但是更适合于要经常四处移动碰撞体 (Collider) 的情况。

    此对象可以用于通常希望静态碰撞体 (Static Collider) 发送触发器 (Trigger) 事件的情况。因为触发器 (Trigger) 必须附加刚体 (Rigidbody),所以应添加刚体 (Rigidbody),然后启用“为运动学”(IsKinematic)。这可防止对象脱离物理影响,并使您可以在需要时接收触发器 (Trigger) 事件。

    运动学刚体 (Kinematic Rigidbody) 可以方便地打开和关闭。这适合于在以下情况中创建布娃娃:通常希望角色跟随在动画之后,然后在发生碰撞时(通过爆炸或所选的任何其他事物进行提示)变为布娃娃。发生这种情况时,只需通过脚本将所有运动学刚体 (Kinematic Rigidbody) 转变为普通刚体 (Rigidbody)。

    如果让刚体 (Rigidbody) 静止下来以便在一段时间内不移动,它们会“入睡”。即,它们在物理更新过程中不会进行计算,因为它们不会前往任何位置。如果将运动学刚体 (Kinematic Rigidbody) 从休眠的普通刚体 (Rigidbody) 下边移走,则休眠的刚体 (Rigidbody) 将被唤醒并在物理更新中重新准确计算。因此如果您具有许多要四处移动的静态碰撞体 (Static Collider) 并且让不同对象正确落到其上,请使用运动学刚体碰撞体 (Kinematic Rigidbody Collider)。


5.2 碰撞动作矩阵

根据两个碰撞对象的配置,可能发生一些不同动作。下图概述了可以基于附加到其的组件 (Component) 对两个碰撞对象进行的预计。一些组合仅导致两个对象之一受碰撞影响,因此请记住标准规则 - 物理不会应用于未附加刚体 (Rigidbody) 的对象。

Collider 详解_第6张图片


参考:

[1].http://docs.manew.com/Components/class-MeshCollider.html

你可能感兴趣的:(Unity3D)