Unity【Colliders碰撞器】和【Rigibody刚体】的应用——小球反弹效果

举报
黄_huawei云 发表于 2024/10/23 13:08:49 2024/10/23
【摘要】 Collider 2D是一个组件,它为游戏对象提供了一个物理边界,允许与其他具有相同或不同类型的Collider 2D进行碰撞检测。可以选择“Is Trigger”选项来决定该碰撞器是否具有实际物理存在。如果设置为true,则该碰撞器仅用于检测碰撞事件,而不影响物理模拟。

目录


Collider 2D

定义:

类型:

Rigidbody 2D

定义:

属性和行为:

运动控制:

碰撞检测:

结合使用

实用检测 

延伸拓展 

1、在Unity中优化Collider 2D和Rigidbody 2D的性能

2、Unity中Collider 2D的高级使用技巧

3、Rigidbody 2D与其他物理组件(如Collider 2D)结合使用的最佳实践

4、在Unity中实现复杂物理效果(如水体、火光等)时,有效地使用Collider 2D和Rigidbody 2D

5、针对不同类型的碰撞器(Box, Circle, Polygon, Edge),Unity提供的特定优化或调整建议

Box Collider:

Circle Collider:

Polygon Collider:

Sphere Collider:


Collider 2D

  1. 定义

    Collider 2D是一个组件,它为游戏对象提供了一个物理边界,允许与其他具有相同或不同类型的Collider 2D进行碰撞检测。可以选择“Is Trigger”选项来决定该碰撞器是否具有实际物理存在。如果设置为true,则该碰撞器仅用于检测碰撞事件,而不影响物理模拟。

  2. 类型:

        Unity提供了多种类型的Collider 2D,包括: 

  • Box Collider 2D:矩形形状的碰撞器,非常高效且适用于可交互的形状。
  • Circle Collider 2D:圆形碰撞器,适用于简单的圆形物体。
  • Polygon Collider 2D:多边形碰撞器,可以自定义任何多边形形状,但计算较慢。
  • Edge Collider 2D:边缘碰撞器,没有面积,适用于静态、非交互的凹形形状。

Rigidbody 2D

  1. 定义

    Rigidbody 2D是一个组件,它将游戏对象置于物理引擎的控制之下,使其能够响应重力、摩擦力、碰撞等物理现象。

  2. 属性和行为

    • Rigidbody 2D与标准的Rigidbody类似,但专为二维开发进行了优化。例如,带有Rigidbody 2D的游戏对象只能在XY平面内移动,并且只能围绕垂直于该平面的轴旋转。
    • 它可以设置不同的质量(Mass),并根据需要调整其他物理参数如阻力(Drag)和角阻力(Angular Drag)。
  3. 运动控制

    • 使用API如Rigidbody2D.MovePositionRigidbody2D.MoveRotation来直接移动或旋转游戏对象。
    • 可以通过脚本编写逻辑来决定物体如何移动和反应于各种物理事件。
  4. 碰撞检测

    当一个带有Rigidbody 2D的游戏对象与另一个带有碰撞器的游戏对象发生碰撞时,Unity会自动处理这些碰撞事件,并更新物体的位置和速度。

结合使用

  • 在大多数情况下,为了实现逼真的物理效果,建议将Rigidbody 2D附加到具有相应碰撞器的游戏对象上。这样,Unity的物理引擎就能准确地模拟出重力、碰撞和其他物理力对物体的影响。
  • 对于需要特殊处理的场景,如跳跃平台或水体效果,可以使用特定的效应器(Effectors),如Platformer Effector 2D、Buoyancy Effector 2D等。

实用检测 

一、给地板floor添加碰撞器,这里我们不添加刚体Rigibody,因为会使地板因为重力而下落。

编辑

 二、再给小球加上刚体rigibody 2d 组件和碰撞器circle colliders 2d 组件

编辑 三、在资源asset栏点击鼠标右键创建,点击2D创建

编辑

四、 进行物理材料创建,点击Physics materrial 2d

编辑

 五、调整弹力大小,拉到合适位置 

编辑

 六、拖拽物理材料到小球ball上的碰撞器组件中,边完成了

编辑

七、效果展示

2b6931d8a37fa3e2ba418b4572d9ca3a.jpeg

Unity简单实现小球弹跳效果

延伸拓展 

1、在Unity中优化Collider 2DRigidbody 2D的性能

在Unity中优化Collider 2DRigidbody 2D的性能可以通过以下几种方法实现:

  1. 避免直接操作Transform:当操作附加了Rigidbody 2D的物体时,不要直接通过操作Transform来移动、旋转它。这是因为Rigidbody 2D组件会覆盖Transform,并更新其位置和旋转以反映物理引擎计算的结果。如果尝试手动修改Transform,可能会导致游戏对象相互穿插或出现不可预测的运动。

  2. 使用复合碰撞器(Composite Collider 2D) :复合碰撞器可以将多个碰撞器合并为单个碰撞器,这在大型地图等情况下尤其有效,因为它可以减少碰撞检测的计算量,从而提高性能。

  3. 调整密度设置:通过更改密度值,可以更改游戏对象关联的Rigidbody 2D的质量计算。例如,将密度设置为0可以忽略该物体在所有质量计算中的影响,包括质心计算。

  4. 合理分组物理层级:根据物体的重要性和优先级将碰撞检测分组,只对需要的碰撞进行计算,从而减少不必要的碰撞检测计算,提高性能。

  5. 启用或禁用Simulated属性:使用Simulated属性可以更高效地启用或禁用Rigidbody 2D及其附带的Collider 2DJoint 2D组件与物理模拟的交互。这种方法比单独启用或禁用各个组件更为节省内存和处理器资源。

  6. 选择合适的碰撞器类型:可以选择多边形碰撞器(Polygon Collider)或盒形碰撞器(Box Collider),以提供更准确的边界框信息,特别是在将2D角色放入3D场景中时,可以使用物理引擎使角色与3D平面发生碰撞。

2、Unity中Collider 2D的高级使用技巧

在Unity中,Collider 2D的高级使用技巧包括以下几点:

  1. 使用Polygon Collider 2D:对于更复杂的形状,Unity会尝试创建一个既简单又复杂的碰撞器形状。为此,你需要使用Polygon Collider 2D。你可以通过点击编辑器中的“Edit Collider”按钮来调整碰撞器的形状。

  2. 添加和移动Box Collider 2D:在构建2D平台游戏时,可以通过在Hierarchy面板中选择Create Empty,然后在新对象上添加Physics 2D -> Box Collider 2D组件来创建碰撞器。此外,还可以通过按住Shift键并使用四向箭头控制来添加不可见的墙壁。

3、Rigidbody 2D与其他物理组件(如Collider 2D)结合使用的最佳实践

在Unity中,Rigidbody 2DCollider 2D结合使用是实现2D物理模拟的关键。以下是一些最佳实践:

        首先,在你的2D物体上添加Rigidbody 2DCollider 2D组件。这将为物体赋予基本的物理属性,使其能够受到重力影响、与其他物体碰撞,并实现更真实的物理效果。

        在Rigidbody 2D组件的属性面板中,确保勾选了“Is Kinematic”选项。如果禁用此选项,则物体将受到物理引擎的控制,包括运动和碰撞检测。

        如果需要对物体施加力或使其移动,建议在FixedUpdate方法中调用Rigidbody 2D组件的方法。这种方法比直接使用Translate方法更为高效,因为Unity会自动处理刚体引擎方面的细节。

        使用Collider 2D可以检测碰撞,但逐像素检测容易出错。因此,通常推荐使用复合碰撞器(Composite Collider)来简化碰撞检测过程。

        根据具体需求,可能还需要添加其他物理组件,如关节(Joints)或力( Forces)。这些组件可以帮助模拟复杂的物理交互,例如连接两个刚体或施加特定的力。

4、在Unity中实现复杂物理效果(如水体、火光等)时,如何有效地使用Collider 2DRigidbody 2D

在Unity中实现复杂物理效果(如水体、火光等)时,有效地使用Collider 2DRigidbody 2D需要理解它们的基本功能和相互作用:

  1. 理解Rigidbody 2D的作用Rigidbody 2D组件将对象置于物理引擎的控制之下,使其能够响应重力、质量、抗力和动量等物理属性。这意味着,当你为一个物体添加了Rigidbody 2D组件时,Unity的物理引擎会计算并模拟该物体在XY平面上的运动,包括旋转和移动。

  2. 理解Collider 2D的作用Collider 2D组件定义了物体的碰撞区域,使得Unity的物理引擎可以检测到物体之间的碰撞事件。这意味着,如果你希望两个物体之间发生物理交互,比如碰撞或接触,你需要为它们分别添加Collider 2D组件。

  3. 使用Rigidbody 2DCollider 2D进行物理交互:当一个物体具有Rigidbody 2D组件时,Unity的物理引擎会根据其位置、质量和所受力等因素计算其运动状态,并通过Collider 2D组件检测与其他物体的碰撞。例如,在实现水体效果时,你可以为水分子设置Rigidbody 2D组件,以模拟它们在流体中的运动;同时,使用Collider 2D来定义水分子的碰撞边界,确保它们不会穿过其他物体。

  4. 调整物理属性以优化性能:在使用Rigidbody 2DCollider 2D时,可以通过调整其属性来优化性能。例如,可以启用或禁用物理模拟,以节省资源。此外,还可以调整重力值、摩擦系数等参数,以更真实地模拟物理现象。

5、针对不同类型的碰撞器(Box, Circle, Polygon, Edge),Unity提供了哪些特定的优化或调整建议?

针对不同类型的碰撞器(Box, Circle, Polygon, Edge),Unity提供了以下特定的优化或调整建议:

  1. Box Collider
    • 使用盒子形状的碰撞器可以减少计算量,因为它们的形状简单且容易处理。
    • 对于简单的形状,Unity会检测碰撞器形状的最优拟合,前提是选择了正确的形状。
  2. Circle Collider
    • 圆形碰撞器在与圆形精灵匹配时,可以通过设置其半径来优化性能。
    • 建议使用圆形碰撞器以减少复杂度和提高效率。
  3. Polygon Collider
    • 多边形碰撞器可以通过插件如Polygon Collider Simplification进行自动优化,以减少碰撞体Shape Count数量,从而提升性能。
    • 在某些情况下,禁用额外的Delaunay三角剖分步骤可以提升碰撞器的碰撞性能,但可能会影响范围。
  4. Sphere Collider
    • 球体碰撞器在使用时应尽量保持简单,因为复杂的网格会增加CPU开销。
    • 在设置球体碰撞器时,可以调整中心和半径以优化性能。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。