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.rhkb.cn/news/419407.html

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

相关文章

2024/9/8周报

文章目录 摘要Abstract数据挖掘数据挖掘的目标数据挖掘的过程数据挖掘的技术应用领域工具与平台代码示例 总结 摘要 智慧水务项目中,需要对采集的总氮、氨氮、化学需氧量、硝态氮、总磷、硝态氮等数据进行数据处理与挖掘,因此本周对数据挖掘相关内容进行…

CommonCollections1

CommonCollections1 poc展示 这是一段POC,运行后会弹出一个计算器。 import org.apache.commons.collections.*; import org.apache.commons.collections.functors.ChainedTransformer; import org.apache.commons.collections.functors.ConstantTransformer; im…

C#使用MQTT(二):MQTT客户端

上一篇我们初步设计了MQTT服务端 C#使用MQTT(一):MQTT服务端-CSDN博客 这里我们设计客户端MQTT Client,接上一篇 新建Windows窗体FormMqttClient 窗体FormMqttClient设计如图: 窗体FormMqttClient设计器相关代码如下 文件FormMqttClient.Designer.cs namespace…

uni-app--》打造个性化壁纸预览应用平台(四)完结篇

🏙️作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名前端工程师 🌄个人主页:亦世凡华、 🌆系列专栏:uni-app 🌇座右铭:人生亦可燃烧,亦可腐败&#xf…

论文写作神器!分享5款AI论文写作常用软件推荐

在当今学术研究和写作领域,AI论文写作工具的出现极大地提高了写作效率和质量。这些工具不仅能够帮助研究人员快速生成论文草稿,还能进行内容优化、查重和排版等操作。以下是五款目前最好用的AI论文写作软件推荐: 1. 千笔-AIPassPaper 千笔-…

SpringCache之本地缓存

针对不同的缓存技术,需要实现不同的cacheManager,Spring定义了如下的cacheManger实现。 CacheManger 描述 SimpleCacheManager 使用简单的Collection来存储缓存,主要用于测试 ConcurrentMapCacheManager 使用ConcurrentMap作为缓存技术&…

mac 安装redis

官网下载指定版本的redis https://redis.io/ 目前3.2.0 是最新最稳定的 版本 这里是历史版本下载 下载指定版本 安装 1.放到自定义目录下并解压 2.打开终端,执行命令 cd redis的安装目录下 make test -- 此命令的作用是将redis源代码编译成可执行文件&#xff0c…

java基础概念21-权限修饰符、代码块

一、权限修饰符 1-1、作用 权限修饰符,是用来控制一个成员能够被访问的范围的。 可以修饰:成员变量,方法,构造方法,内部类。 1-2、权限修饰符的分类 二、代码块 局部代码块构造代码块静态代码块 2-1、局部代码块 …

day1 QT

作业 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//设置窗口大小this->resize(1025,533);//固定窗口大小this->setFixedSize(1025,533);//设置窗口背景色,设置弧度//this->setStyleSheet("background-image:url(E:/…

肖扬老师好书《微权力下的项目管理(第3版)》读书笔记1

肖扬老师好书《微权力下的项目管理(第3版)》,的确不错,分别共读之。 第2章 精华 为了在项目过程中成为一名优秀的导演,项目经理要同时修炼领导和管理这两种不同的能 力,因为项目管理模式就是一种游走于领导…

计算机网络知识点复习——TCP协议的三次握手与四次挥手(连接与释放)

TCP协议的三次握手与四次挥手(连接与释放) 一、前言二、简单的知识准备1. TCP协议的主要特点2. TCP报文段 三、TCP连接的建立(三次握手)四、TCP连接的释放(四次挥手)五、TCP连接与释放的总结六、结束语 一、…

MySQL record 01 part

更改密码: alter user rootlocalhost identified with mysql_native_password by ‘123456’; 注意: 在命令行方式下,每条MySQL的命令都是以分号结尾的,如果不加分号,MySQL会继续等待用户输入命令,直到MyS…

vue2-elementUI-初始化启动项目-git

前置基础 资料下载-阿里云盘 vueaxioselement-uinpmvscode 初始化项目 1.创建vue2工程 1.1 vue create projectName1.2 选择 1.3 初始化 vue-cli 的核心步骤: Manually select features (*) Babel ( ) TypeScript ( ) Progressive Web App (PWA) Support …

【深度学习讲解笔记】前言

小编为AI专业的本科学生,最近入手了一本《深度学习讲解》的书,由于封面画了苹果🍎,所以也叫苹果书,这本书目前在全网的热度很高。 本书是根据李宏毅老师讲授的《机器学习》课程编写的,作者是来自DataWhale…

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击&#xf…

Uniapp基于uni拦截器+Promise的请求函数封装

最近在学Uniapp,到封装请求的时候本来还想用axios,但是看到一些教学视频有更简单的方法, 基于uni的拦截器和Promise封装的请求函数 但是他们是用TS写的,还没学到TS,我就把JS写了,最终也是请求成功 // src/…

电动机制造5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

电动机制造5G智能工厂工业物联数字孪生平台,推进制造业数字化转型。5G智能工厂与物联数字孪生平台的融合应用,为电动机制造业的数字化转型铺设了一条高速通道。这一创新模式不仅极大地提升了生产效率,还深刻改变了产品的设计、生产、管理及运…

EasyExcel模板导出与公式计算(下)

目录 环境要求 功能预览 需求分析 导入依赖 制作模板 编写代码 格式优化 最终效果 总结 在上一篇 EasyExcel模板导出与公式计算(上)-CSDN博客 文章中我们知道了在若依中使用自带的Excel注解来实现表格数据的导出,并且通过重写相关接…

【Python 千题 —— 算法篇】无重复字符最长子段

Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目背景 在编程过程中,处理字符串的任务时常遇到,其中一个经典问题是查找无重复字符的最长子串。这在很多应用场景中…

redisson中的分布式锁

我的博客大纲 我的后端学习大纲 a.redisson概述: 1.Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)2.redisson介绍官方文档地址:3.Redisson它不仅提供了一系列的分布式的Java常用对象,还…