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

目录

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.mzph.cn/diannao/66370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[微服务]redis主从集群搭建与优化

搭建主从集群 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。 1. 主从集群结构 下图就是一个简单的Redis主从集群结构: 如图所示,集群中有一个master节点、两个s…

自动化立体仓库堆垛机SRM控制系统自动控制功能块开发

1、堆垛机SRM控制系统硬件组态如下图 2、堆垛机SRM控制系统HMI屏幕页面如下图 驱动状态显示、堆垛机状态 3、堆垛机SRM控制系统中相关变量定义如下图 其中包含系统控制相关变量:系统急停、系统手动、复位、货叉左极限、货叉左居中 货叉右极限 货叉右居中 货叉编码器位置反…

【数据结构】栈与队列(FIFO)

在阅读该篇文章之前&#xff0c;可以先了解一下堆栈寄存器和栈帧的运作原理&#xff1a;<【操作系统】堆栈寄存器sp详解以及栈帧>。 栈(FILO) 特性: 栈区的存储遵循着先进后出的原则。 例子: 枪的弹夹&#xff0c;最先装进去的子弹最后射出来&#xff0c;最后装入的子弹…

黑马JavaWeb开发跟学(十五).Maven高级

黑马JavaWeb开发跟学.十五.Maven高级 Maven高级1. 分模块设计与开发1.1 介绍1.2 实践1.2.1 分析1.2.2 实现 1.3 总结 2. 继承与聚合2.1 继承2.1.1 继承关系2.1.1.1 思路分析2.1.1.2 实现 2.1.2 版本锁定2.1.2.1 场景2.1.2.2 介绍2.1.2.3 实现2.1.2.4 属性配置 2.2 聚合2.2.1 介…

入门级容器技术解析:Docker和K8s的区别与关系

目录 &#x1f3af;学习小目标&#xff1a; 关于容器 传统物理机&#x1f5a5;️ 虚拟机&#x1f4bb; 为什么使用容器技术呢&#xff1f;&#x1f914; 容器技术&#x1f943; Docker—容器化平台 K8s(Kubernetes)—容器编排系统​ Docker和K8s有什么关系和区别&#…

凌鸥电机开发学习记录

文章目录 9、凌鸥库函数软件过流点设定值BUG8、系统初始化7、ADC触发周期设定6、电机参数测量5、有感HALL相序问题4、电机参数问题3、PWM频率设置2、IO口对应问题1、供电问题 9、凌鸥库函数软件过流点设定值BUG 在软件过流点的判断中&#xff0c;是以当前三相电流和经过了内部…

怎样修改el-table主题样式

起因&#xff1a;el-table有主题样式&#xff0c;部分需要单独设置 环境&#xff1a;ideanodejs插件谷歌浏览器 第一步&#xff1a;找到scss文件&#xff1a; 谷歌浏览器打开表格页面&#xff0c;ctrlshifti打开开发者工具&#xff0c;点击后鼠标移动到表格单元格上单击一下…

Flink operator实现自动扩缩容

官网文档位置&#xff1a; 1.Autoscaler | Apache Flink Kubernetes Operator 2.Configuration | Apache Flink Kubernetes Operator 1.部署K8S集群 可参照我之前的文章k8s集群搭建 2.Helm安装Flink-Operator helm repo add flink-operator-repo https://downloads.apach…

从入门到精通:Ansible Shell 模块的应用与最佳实践

Ansible是一款强大的自动化运维工具&#xff0c;通过其模块化的设计&#xff0c;可以方便地管理和配置远程主机。作为Ansible的一个常用模块&#xff0c;shell 模块使得我们可以在目标主机上执行复杂的命令或脚本。无论是单一的命令&#xff0c;还是复杂的Shell脚本&#xff0c…

Linux应用软件编程--网络通信(传输层:udp协议,tcp协议,应用层:http协议)

网络通信&#xff1a;不同主机&#xff0c;进程间通信&#xff0c;分为广域网和局域网 OSI 七层模型&#xff1a;是一种理论模型 应用层&#xff1a;通信传输的数据内容 http、FTP、TFTP、MQTT 表述层&#xff1a;数据加密&#xff0c;解密操作&#xff0c;压缩&#xff…

鸿蒙的APP真机调试以及发布

目录&#xff1a; 1、创建好鸿蒙项目2、创建AGC项目3、实现自动签名3.1、手动方式创建签名文件和密码 4、运行项目5、无线真机调试 1、创建好鸿蒙项目 2、创建AGC项目 &#xff08;1&#xff09;在File->Project Structure->Project->Signing Configs中进行登录。(未…

n8n - AI自动化工作流

文章目录 一、关于 n8n关键能力n8n 是什么意思 二、快速上手 一、关于 n8n n8n是一个具有原生AI功能的工作流自动化平台&#xff0c;它为技术团队提供了代码的灵活性和无代码的速度。凭借400多种集成、原生人工智能功能和公平代码许可证&#xff0c;n8n可让您构建强大的自动化…

【Shell脚本】Docker构建Java项目,并自动停止原镜像容器,发布新版本

本文简述 经常使用docker部署SpringBoot 项目&#xff0c;因为自己的服务器小且项目简单&#xff0c;因此没有使用自动化部署。每次将jar包传到服务器后&#xff0c;需要手动构建&#xff0c;然后停止原有容器&#xff0c;并使用新的镜像启动&#xff0c;介于AI时代越来越懒的…

jmeter 中 BeanShell 预处理程序、JSR223后置处理程序使用示例

1. 各个组件如何新建的&#xff1f; 2. "http请求" 组件内容样例&#xff1a; "消息体数据" 源码&#xff1a; {"task_tag": "face_detect","image_type": "base64","extra_args": [{"model"…

K8s高可用集群之Kubernetes集群管理平台、命令补全工具、资源监控工具部署及常用命令

K8s高可用集群之Kubernetes管理平台、补全命令工具、资源监控工具部署及常用命令 1.Kuboard可视化管理平台2.kubectl命令tab补全工具3.MetricsServer资源监控工具4.Kubernetes常用命令 1.Kuboard可视化管理平台 可以选择安装k8s官网的管理平台&#xff1b;我这里是安装的其他开…

Centos源码安装MariaDB 基于GTID主从部署(一遍过)

MariaDB安装 安装依赖 yum install cmake ncurses ncurses-devel bison 下载源码 // 下载源码 wget https://downloads.mariadb.org/interstitial/mariadb-10.6.20/source/mariadb-10.6.20.tar.gz // 解压源码 tar xzvf mariadb-10.5.9.tar.gz 编译安装 cmake -DCMAKE_INSTA…

github gitbook写书

github创建新的仓库 在仓库中添加目录 ‘SUMMARY.md # Summary * [简介](README.md)gitbook 新建一个site https://www.gitbook.com/ 注册账号 取名字 一路 next&#xff0c;注意选免费版 最后 gitbook同步到github 你在主页可以看到 刚刚的test网站 点击右上角圈出来…

colnames看似简单,却能优化数据处理流程

引言 在数据处理和分析中&#xff0c;变量名称是至关重要的&#xff0c;它们决定了数据的可读性和操作的简便性。在R语言中&#xff0c;colnames 函数以其简单的语法设计&#xff0c;提供了高效管理数据框列名的能力&#xff0c;尤其是在复杂的爬虫任务中显得尤为重要。本篇文…

2025新春烟花代码(一)HTML5夜景放烟花绽放动画效果

标题预览效果 标题HTML代码 <!DOCTYPE html> <html lang"en"> <script>var _hmt _hmt || [];(function () {var hm document.createElement("script");hm.src "https://hm.baidu.com/hm.js?45f95f1bfde85c7777c3d1157e8c2d34&…

软件项目体系建设文档,项目开发实施运维,审计,安全体系建设,验收交付,售前资料(word原件)

软件系统实施标准化流程设计至关重要&#xff0c;因为它能确保开发、测试、部署及维护等各阶段高效有序进行。标准化流程能减少人为错误&#xff0c;提升代码质量和系统稳定性。同时&#xff0c;它促进了团队成员间的沟通与协作&#xff0c;确保项目按时交付。此外&#xff0c;…