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

server/2025/1/16 14:04:32/

目录

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上的碰撞器组件中,边完成了

七、效果展示

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开销。
    • 在设置球体碰撞器时,可以调整中心和半径以优化性能。

http://www.ppmy.cn/server/158834.html

相关文章

辅助云运维

为客户提供运维支持,保障业务连续性。 文章目录 一、服务范围二、服务内容三、服务流程四、 服务交付件五、责任分工六、 完成标志 一、服务范围 覆盖范围 云产品使用咨询、问题处理、配置指导等; 云产品相关操作的技术指导; 云相关资源日常…

Kafka权威指南(第2版)读书笔记

目录 Kafka生产者——向Kafka写入数据生产者概览创建Kafka生产者bootstrap.serverskey.serializervalue.serializer 发送消息到Kafka同步发送消息异步发送消息 生产者配置client.idacks消息传递时间max.block.msdelivery.timeout.msrequest.timeout.msretries 和retry.backoff.…

如何修复Android上未安装的应用程序

在Android设备上安装应用程序通常是一个简单的过程。然而,“ Android上未安装应用程序”是一种常见的智能手机错误消息,由于一个或多个原因而经常遇到。发现由于即将出现故障而无法充分利用手机,这当然会非常令人沮丧,但幸运的是&…

结合night compute分析 利用tensor core 优化K值较大的矩阵乘(超过cublas50%)

一 night compute分析 将cublas作为base line和现有的代码分析 图1.1 可以发现计算吞吐量明显偏低,能想到的就是计算单元处于空闲的概率较大,是访存密集型算子,因此可以增大数据的吞吐量,多给计算单元提供数据 二 代码 #include "common.h"//mma计算的基本尺…

JavaScript基础(1)

一.输入与输出 9行:alert页面弹窗 10:页面显示 11:控制台输出,页面不显示 12:页面弹出输入框

RDP、VNC、SSH 三种登陆方式的差异解析

一、引言 在计算机系统管理和远程访问的领域中,RDP(Remote Desktop Protocol,远程桌面协议)、VNC(Virtual Network Computing,虚拟网络计算)和 SSH(Secure Shell)是三种广…

对象数组按照指定rule对数据进行切割分层形成树形结构并支持搜索功能

根据提供的对象数组,按照rule: 5-3-3’的规则对数据进行分层,形成树形结构并支持搜索功能 数据: dataList: [ { id: ‘10000’, name: ‘a’ }, { id: ‘10000001’, name: ‘a1’ }, { id: ‘10000001001’, name: ‘a1c’ }, { id: ‘20000…

分布式缓存redis

分布式缓存redis 1 redis单机(单节点)部署缺点 (1)数据丢失问题:redis是内存存储,服务重启可能会丢失数据 (2)并发能力问题:redis单节点(单机)部…