Unity核心3——2D物理系统

news2024/11/26 11:32:50

一、刚体 Rigid Body 2D

​ 刚体是物理系统中用于帮助我们进行模拟物理碰撞中力的效果的

​ 2D 物理系统中的刚体和 3D 中的刚体基本是一样的,最大的区别是对象只会在 XY 平面中移动,并且只在垂直于该平面的轴上旋转

​ 不同于 3D 刚体,2D 刚体具有以下三种类型:

(一)Dynamic

​ 物体会受到力的影响移动和旋转

  1. Material:物理材质

    在刚体上设置了物理材质,若子物体有碰撞器但是没有设置材质,则会用刚体的物理材质

    如果不设置,则将使用在 Physics 2D 窗口中设置的默认材质

    物理材质使用的优先级:2D 碰撞器 > 2D 刚体 > Physics 2D 窗口

  2. Simulated:子物体模仿,默认开启即可

    如果希望 2D 刚体以及所有子对象 2D 碰撞器和 2D 关节都能模拟物理效果,则需要启用该选项

  3. Use Auto Mass:是否使用自动质量

  4. Mass:质量

  5. Linear Drag:影响位置移动的阻力系数

  6. Angular Drag:影响旋转移动的阻力系数

  7. Gravity Scale:受重力影响的程度

  8. Collision Detection:碰撞检测算法

    • Discrete:离散检测算法,只会用新位置进行计算,速度太快时会穿过而检测不到
    • Continuous:连续检测算法,计算量大,但不会发生穿过的现象
  9. Sleeping Mode:对象处于静止状态时进入睡眠模式

    • Never Sleep:从不休眠,会一直进行检测计算,性能消耗大
    • Start Awake:最初处于唤醒状态,静止一段时间后会睡眠
    • Start Asleep:最初处于睡眠状态,但是可以被碰撞唤醒
  10. Interpolate:物理更新间隔之间的插值运算

    • None:不应用移动平滑
    • Interpolate:根据前一帧进行平滑处理
    • Extrapolate:根据后一帧进行平滑处理
  11. Constrains:约束限制,可以让某一个轴不受力影响位移或者旋转

  12. Info:显示的物理信息,仅可查看不可修改

(二)Kinematic

​ 不受力的影响,只能通过代码让其动起来

​ 能和 Dynamic 2D 刚体产生碰撞,但是不会动,只会进入碰撞检测函数,因此没有质量、摩擦系数等属性

​ 性能消耗较低,主要是使用代码处理移动和旋转

  1. Material:物理材质

    在刚体上设置了物理材质,若子物体有碰撞器但是没有设置材质,则会用刚体的物理材质

    如果不设置,则将使用在 Physics 2D 窗口中设置的默认材质

    物理材质使用的优先级:2D 碰撞器 > 2D 刚体 > Physics 2D 窗口

  2. Simulated:子物体模仿,默认开启即可

    如果希望 2D 刚体以及所有子对象 2D 碰撞器和 2D 关节都能模拟物理效果,则需要启用该选项

    当启用时,会充当一个无限质量的不可移动的对象,可以和所有 2D 刚体产生碰撞

    若 Use Full Kinematic Contacts 被禁用,则只会和 Dynamic 2D 刚体碰撞

  3. Use Full Kinematic Contacts:充分使用运动学接触

    如果希望能和所有 2D 刚体碰撞,则启用该选项

    若不启用,则不会和 Kinematic 2D 和 Static 2D 刚体碰撞

  4. Collision Detection:碰撞检测算法

    • Discrete:离散检测算法,只会用新位置进行计算,速度太快时会穿过而检测不到
    • Continuous:连续检测算法,计算量大,但不会发生穿过的现象
  5. Sleeping Mode:对象处于静止状态时进入睡眠模式

    • Never Sleep:从不休眠,会一直进行检测计算,性能消耗大
    • Start Awake:最初处于唤醒状态,静止一段时间后会睡眠
    • Start Asleep:最初处于睡眠状态,但是可以被碰撞唤醒
  6. Interpolate:物理更新间隔之间的插值运算

    • None:不应用移动平滑
    • Interpolate:根据前一帧进行平滑处理
    • Extrapolate:根据后一帧进行平滑处理
  7. Constrains:约束限制,可以让某一个轴不受力影响位移或者旋转

  8. Info:显示的物理信息,仅可查看不可修改

(三)Static

​ 完全不动的需要检测碰撞的对象,相当于时无限质量不可移动的对象,性能消耗最小,只能和 Dynamic 2D 刚体碰撞

​ 和它类似的有只加碰撞器而不加刚体的物体,它们会和刚体物体产生碰撞,但是自己不会动

​ 总结:

  • Dynamic 动态刚体:受力的作用,要动要碰撞的对象

  • Kinematic 运动学刚体:通过刚体 API 移动的对象,不受力的作用,但是想要进行碰撞检测

  • Static 静态刚体:不动不受力作用的静态物体,但是想要进行碰撞检测

​ 代码示例:

// 加力
Rigidbody2D rigid = this.GetComponent<Rigidbody2D>();
rigid.AddForce(new Vector2(0, 100));

// 速度
rigid.velocity = new Vector2(1, 0);

二、碰撞器 Collider 2D

​ 碰撞器是用于在物理系统中表示物体体积的的(形状或范围),刚体通过得到碰撞器的范围信息进行计算,判断两个物体的范围是否接触,如果接触刚体就会模拟力的效果产生速度和旋转

(一)圆形碰撞器

  1. Editor Collider:碰撞器编辑器
  2. Material:一种物理材质,用于确定碰撞的属性,控制摩擦和弹性
  3. Is Trigger:是否为触发器
  4. Used By Effector:是否被附加到 2D 效应器使用
  5. Offset:圆心偏移位置
  6. Radius:圆形半径

(二)盒状碰撞器

  1. Editor Collider:碰撞器编辑器

  2. Material:一种物理材质,用于确定碰撞的属性,控制摩擦和弹性

  3. Is Trigger:是否为触发器

  4. Used By Effector:是否被附加到 2D 效应器使用

  5. Used By Composite:是否被附加到 2D 复合碰撞器中使用

    勾选后,将会消失一些属性,这些属性将在复合碰撞器中设置

  6. Auto Tilling:如果精灵渲染器组件中的 Draw Mode 设置为 Tiled,勾选该选项后,当改变精灵大小时将自动更新碰撞器的尺寸

  7. Offset:中心偏移位置

  8. Size:矩形宽高

  9. Edge Radius:使四个顶点为圆角

(三)多边形碰撞器

  1. Editor Collider:碰撞器编辑器

  2. Material:一种物理材质,用于确定碰撞的属性,控制摩擦和弹性

  3. Is Trigger:是否为触发器

  4. Used By Effector:是否被附加到 2D 效应器使用

  5. Used By Composite:是否被附加到 2D 复合碰撞器中使用

    勾选后,将会消失一些属性,这些属性将在复合碰撞器中设置

  6. Auto Tilling:如果精灵渲染器组件中的 Draw Mode 设置为 Tiled,勾选该选项后,当改变精灵大小时将自动更新碰撞器的尺寸

  7. Offset:中心偏移位置

  8. Points:多边形顶点

(四)边界碰撞器

​ 边界碰撞器一般不会手动通过数值加点,主要还是通过 Edit Collider

  1. Editor Collider:碰撞器编辑器
  2. Material:一种物理材质,用于确定碰撞的属性,控制摩擦和弹性
  3. Is Trigger:是否为触发器
  4. Used By Effector:是否被附加到 2D 效应器使用
  5. Offset:中心偏移位置
  6. Edge Radius:使四个顶点为圆角
  7. Points:顶点

(五)胶囊碰撞器

  1. Editor Collider:碰撞器编辑器
  2. Material:一种物理材质,用于确定碰撞的属性,控制摩擦和弹性
  3. Is Trigger:是否为触发器
  4. Used By Effector:是否被附加到 2D 效应器使用
  5. Offset:中心偏移位置
  6. Size:胶囊的宽高
  7. Direction:胶囊方向
    • Horizontal:水平方向
    • Vertical:竖直方向

(六)复合碰撞器

​ 复合碰撞器会将其子物体所有的碰撞器合并在一起,得到一个新的碰撞器

​ 复合碰撞器必须配合刚体使用

  1. Material:一种物理材质,用于确定碰撞的属性,控制摩擦和弹性
  2. Is Trigger:是否为触发器
  3. Used By Effector:是否被附加到 2D 效应器使用
  4. Offset:中心偏移位置
  5. Geometry Type:几何学类型,合并碰撞体时,顶点将组合为两种不同的几何体类型
    • Outlines:空心轮廓,类似边界碰撞器
    • Polygons:实心多边形,类似多边形碰撞器
  6. Generation Type:生成类型,复合碰撞器在何时生成新的几何体
    • Synchronous:对 2D 复合碰撞器或使用的其他碰撞器修改时,Unity 立即生成新几何体
    • Manual:手动生成新的几何体,通过代码生成或者点击下方的 Regenerate Collider 按钮
  7. Vertex Distance:从复合碰撞器手机顶点时允许的最小间距值
  8. Offset Distance:合并顶点时的偏移位置,可以理解为生成几何体的圆润程度
  9. Edge Radius:使顶点为圆角

​ 碰撞检测函数:

private void OnCollisionEnter2D(Collision2D collision) { }

private void OnCollisionExit2D(Collision2D collision) { }

private void OnCollisionStay2D(Collision2D collision) { }

private void OnTriggerEnter2D(Collider2D collision) { }

private void OnTriggerExit2D(Collider2D collision) { }

private void OnTriggerStay2D(Collider2D collision) { }

三、物理材质 Material 2D

​ 物理材质是用于决定在物体产生碰撞时这些物体之间的摩擦和弹性表现的

​ 通过物理材质我们可以做出类似斜坡不滑落,小球反弹等效果

  1. Friction:摩擦系数,0 表示没有摩擦力
  2. Bounciness:反弹程度,0 表示没有弹力,1 表示没有能量损失一直反弹

四、恒定力 Constant Force 2D

​ 恒定力是一个特殊的脚本,它可以给一个 2D 刚体持续添加一个力

​ 在做一些随着时间推移而加速的对象时很适用,比如类似火箭发射等效果

​ 恒定力脚本会线性的为对象添加力和扭矩力,让其移动和旋转

  1. Force:物理更新时施加于 2D 刚体上的线性力
  2. Relative Force:物理更新时施加的线性力(相对刚体对象的坐标系)
  3. Torque:物理更新时施加于 2D 刚体的扭矩力

五、2D 效应器 Effector 2D

​ 2D 效应器是配合 2D 碰撞器一起使用的,可以让游戏对象在相互接触时产生一些特殊的物理作用力

​ 可以通过 2D 效应器快捷地实现一些传送带、互斥、吸引、漂浮、单向碰撞等等效果

​ 使用效应器需要同时添加 Effector 2D 和 Collider 2D 组件,并且把 Used By Effector 和 Is Trigger 都勾选上

(一)区域效应器 Area

​ 主要作用:在一个区域内让游戏对象受到力和扭矩力的作用

  1. Use Collier Mask:是否启用碰撞器遮罩,如果开启才会出现 Collider Mask

    可以通过选择层,决定改效应器只会作用于哪些层的对象,区分对待不同物体

  2. Collider Mask:碰撞器遮罩层

  3. Use Global Angle:勾选将使用世界坐标系的角度,如果不勾选,角度为局部角度

  4. Force Angle:施加力的角度

  5. Force Magnitude:施加力的大小

  6. Force Variation:施加力的随机大小变化,会在 Force Magnitude 基础上根据该值进行随机变化

  7. Force Target:效应器在目标对象上施加力的作用点

    • Collider:以碰撞器当前的位置施加力,如果碰撞器有偏移,没有位于质心,则会产生扭矩力,带来旋转
    • Rigidbody:以刚体当前的质心施加力,不会产生扭矩力
  8. Drag:阻力

  9. Angular Drag:扭矩阻力

(二)浮力效应器 Buoyancy

​ 主要作用:模拟流体行为,浮动和阻力相关设置,让玩家在该区域看起来像在水里移动

  1. Use Collier Mask:是否启用碰撞器遮罩,如果开启才会出现 Collider Mask

    可以通过选择层,决定改效应器只会作用于哪些层的对象,区分对待不同物体

  2. Collider Mask:碰撞器遮罩层

  3. Density:流体密度

    碰撞体密度大,则碰撞体会下沉;密度小,则碰撞体会上浮

    密度和流体相同的碰撞体会浮在流体中

  4. Surface Level:定义浮力流体的表面位置

    对象高于此线时,不会对其施加浮力;低于或相交此线时,会施加浮力,沿世界坐标的 Y 轴偏移

  5. Linear Drag:阻力

  6. Angular Drag:扭矩阻力

  7. Flow Angle:流体流动方向相对世界空间的角度,将会沿指定方向施加浮力

  8. Flow Magnitude:与 Flow Angle 结合使用,该值决定浮力的大小

  9. Flow Variation:随即改变流体的力的大小值

(三)点效应器 Point

​ 主要作用:模拟类似磁铁吸引或排斥的效果

  1. Use Collier Mask:是否启用碰撞器遮罩,如果开启才会出现 Collider Mask

    可以通过选择层,决定改效应器只会作用于哪些层的对象,区分对待不同物体

  2. Collider Mask:碰撞器遮罩层

  3. Force Magnitude:施加力的大小

  4. Force Variation:施加力的随机大小变化,会在 Force Magnitude 基础上根据该值进行随机变化

  5. Distance Scale:效应器和目标之间距离的缩放,计算距离时,会按照该比值对距离进行缩放

    • Collider:碰撞器当前的位置
    • Rigidbody:刚体当前的质心位置
  6. Force Target:效应器在目标对象上施加力的作用点

    • Collider:以碰撞器当前的位置施加力,如果碰撞器有偏移,没有位于质心,则会产生扭矩力,带来旋转
    • Rigidbody:以刚体当前的质心施加力,不会产生扭矩力
  7. Force Mode:计算力的模式

    • Constant:忽略和源与目标之间的距离
    • Inverse Linear:反线性距离计算,距离越远,力的大小呈线性减小
    • Inverse Squared:反平方距离计算,力的大小呈指数减小,类似现实世界的重力
  8. Drag:阻力

  9. Angular Drag:扭矩阻力

(四)平台效应器

​ 主要作用:2D 游戏当中的平台或可往上跳跃的墙壁

​ 这里的 Collider 不需要勾选 Is Triiger,因为是平台

  1. Use Collier Mask:是否启用碰撞器遮罩,如果开启才会出现 Collider Mask

    可以通过选择层,决定改效应器只会作用于哪些层的对象,区分对待不同物体

  2. Collider Mask:碰撞器遮罩层

  3. Rotational Offset:旋转偏移量,控制平台角度偏移

  4. Use One Way:是否使用单向碰撞行为

  5. Use One Way Grouping:当平台是有多个碰撞器组合时,可以通过它将所有碰撞器设置为单向碰撞行为

  6. Surface Arc:以局部坐标系从下向上的方向为中心,填写一个角度值,定义不允许通过的表面,该角度外的其他地方视为单向碰撞

  7. Use Side Friction:是否在平台两侧使用摩擦

  8. Use Side Bounce:是否在平台两侧使用弹性

  9. Side Arc:用于定义左右两侧平台的相应弧度

(五)表面效应器

​ 主要作用:模拟传送带

​ 这里的 Collider 不需要勾选 Is Triiger,因为是表面

  1. Use Collier Mask:是否启用碰撞器遮罩,如果开启才会出现 Collider Mask

    可以通过选择层,决定改效应器只会作用于哪些层的对象,区分对待不同物体

  2. Collider Mask:碰撞器遮罩层

  3. Speed:表面保持的速度

  4. Speed Variation:速度的随机增加值

  5. Force Scale:缩放沿表面移动时施加的力

    0 表示不施加力,相当于禁用,值越低越慢,值越高越快

    不建议设置为 1,因为这可能会抵消施加在物体的其他里,比如跳跃起来的力

  6. Use Contact Force:是否对接触物体表面的接触点施加力

    如果选择则会让物体旋转,如果不选择则不会旋转

  7. Use Friction:是否使用摩擦

  8. Use Bounce:是否使用弹力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/662694.html

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

相关文章

【Vue2】PaginationSelect 带分页和搜索功能的下拉列表组件

1. 效果图 2. 组件完整代码 <template><div class"pagination-select"><el-selectv-model"selectedValue":style"{ width: width || 100% }"v-bind"attrs":remote-method"remoteMethod":loading"loadi…

【好书精读】网络是怎样连接的 向 DNS 服务器查询 Web 服务器的 IP 地址

&#xff08;该图由AI制作 学习AI绘图 联系我&#xff09; 目录 IP 地址的基本知识 实际的 IP 地址 域名和 IP 地址并用的理由 Socket 库提供查询 IP 地址的功能 通过解析器向 DNS 服务器发出查询 解析器的内部原理 IP 地址的基本知识 生成 HTTP 消息 根据域名查询 …

(嵌入式)TMS5700432BPZQQ1R、SPC58EC80E5QMC1X微控制器IC中文数据

TMS5700432BPZQQ1R 32位RISC闪存微控制器是设计用于安全系统的高性能汽车级微控制器。其采用的安全架构包括锁步中的双CPU、CPU和内存内置自检 (BIST) 逻辑、闪存和数据SRAM上的ECC、外设存储器上的奇偶校验以及外设I/O上的回路功能。TMS570LS0432/0332器件集成了ARM Cortex-R4…

孤立森林详解

基本概念 孤立森林&#xff08;Isolation Forest&#xff09;是一种基于异常检测的机器学习算法&#xff0c;用于识别数据集中的异常点。孤立森林算法在异常检测、网络入侵检测、金融欺诈检测等领域有广泛应用&#xff0c;并且在处理大规模数据和高维数据时表现出色。孤立森林…

了解不一样的Sui NFT标准

Sui的设计赋予非同质化Token&#xff08;NFT&#xff09;在灵活性、组合性和可交易性方面独特的属性&#xff0c;使NFT不仅仅代表指向图像的数字记录&#xff0c;还可以成为图像本身。这些NFT可以被修改或与其他NFT合并&#xff0c;以创造出可扩展的艺术作品。同时&#xff0c;…

分布式事务解决方案Seata谁建议你用的?

一、名词解释&#xff1a; TC (Transaction Coordinator) - 事务协调者 维护全局/分支事务的状态&#xff0c;驱动全局事务的提交与回滚 TM (Transaction Manager) - 事务管理器 定义全局事务的范围&#xff1a;开启、提交、回滚全局事务 RM (Resource Manager) - 资源管理…

云原生之深入解析如何使用Prometheus扩展Kubernetes调度器

一、kubernetes 调度配置 ① Scheduler Configuration kube-scheduler 提供了配置文件的资源&#xff0c;作为给 kube-scheduler 的配置文件&#xff0c;启动时通过 --config 来指定文件。目前各个 kubernetes 版本中使用的 KubeSchedulerConfiguration 为&#xff1a; 1.21 …

面试专题:spring

涉及到spring的问题都离不开IOC和AOP.AOP实现原理、动态代理和静态代理、Spring IOC的初始化过程、IOC原理、自己怎么实现一个IOC容器&#xff1f; 这些东西都是经常会被问到的。 IOC是什么&#xff1a; Ioc即控制反转&#xff0c;把原来的代码里需要实现的对象创建&#xff…

使用conda安装配置python环境

使用conda安装配置python环境 下载 我这里下载的是2-4.7.12.1&#xff0c;具体可以参考如下地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda2-4.7.12.1-Linux-x86_64.s…

d3dcompiler_47.dll缺失怎么修复?那个方法修复更简单

再运行游戏或者ps等软件&#xff0c;计算机系统提示找不到d3dcompiler_47.dll是怎么回事&#xff1f;相信困扰着不少小伙伴&#xff0c;其实d3dcompiler_47.dll是Microsoft 的 DirectX 11核心组件之一&#xff0c;它主要用于编译和运行 Direct3D 11应用程序和游戏。如果文件丢失…

编译安装LAMP

一、Apache网站服务&#xff1a; 1. Apache的起源&#xff08;多系统兼容&#xff09;&#xff1a; Apache HTTPD Server 简称 Apache&#xff0c;是 Apache 软件基金会的一个开源的网页服务器&#xff0c; 可以在大多数计算机操作系统中运行&#xff0c;由于其多平台和安全性…

美国国家量子计划咨询委员会发布更新国家量子计划建议

​ &#xff08;图片来源&#xff1a;网络&#xff09; 耗资12亿美元的美国国家量子计划&#xff08;NQI&#xff09;于2018年12月颁布&#xff0c;该计划为期10年&#xff0c;现在将开展审查前五年的活动&#xff0c;并对今后五年的推进计划提出建议。为此&#xff0c;美国国…

[经验]PMP快速通过指南

我的备考经验&#xff1a; 1一阶段&#xff1a;铺底&#xff0c;花费时间1.5周左右 主要是熟悉考试框架和内容&#xff0c;通过看网盘资料里的章节重点解析视频课后习题。 先看框架你就很清楚的了解下来&#xff0c;PMP考试把项目管理的过程拆解成了5大过程组&#xff08;启…

压力测试-JMeter安装、入门、结果分析

目录 1.写在前面 2.常用压测工具 3.压测机环境准备&#xff1a;JMeter部署 3.1 JMeter下载安装&启动&配置 3.2 入门案例 3.2.3、压测结果解释 3.2.4、线程属性参数原理 1.写在前面 等到服务上线后&#xff0c;在业务压力的冲击下&#xff0c;会发现程序运行非常…

CATIA和SolidWorks孰强孰弱?对比一下就知

寻找合适的 CAD 程序可能会很棘手&#xff0c;因为它是一种您将投资并使用的工具&#xff0c;您需要确保做出正确的决定。这篇文章将用于帮助区分 CATIA 和SOLIDWORKS之间的差异&#xff0c;以帮助您确定两者中哪一个最适合您的业务。 谁使用 CATIA&#xff1f; CATIA 于 198…

Selenium教程__环境安装(1)

Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。 Selenium基本上支持主流的浏览器&#xff0c;包括IE&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google Chrome&#xff0c;Opera等。 …

请求与响应

设置映射路径 在不同的bean中可能会出现相同名字的路径&#xff0c;这样的情况会产生冲突&#xff0c;为了解决这个冲突我们可以设置模块名作为请求路径前缀 Controller RequestMapping("/book") public class BookController {//设置当前操作的访问路径RequestMa…

Rust语言从入门到入坑——(4)Rust语法(下)

文章目录 0 引入1、结构体1. 1 结构体1. 2 结构体方法1. 3 元组结构体 2、枚举类2.1 match2.2 Option 枚举类 3、集合3.1 向量&#xff08;Vector&#xff09;3.2 字符串&#xff08;String&#xff09;3.1 映射表&#xff08;Map&#xff09; 4、总结 0 引入 在这里我们需要介…

DOM4J解析web.xml文件,实例化Servlet

1、DOM4J解析web.xml文件实例化Servlet 原理分析&#xff1a;我们解析用户在地址栏中输入的地址信息如add.do,用这个地址去web.xml文件中通过DOM4J技术&#xff0c;解析判断add.do对应的是哪个url-pattern&#xff0c;找到后获取对应的servlet-name。在用这个servlet-name去找…

servlet规范过滤器

我们可以把servlet程序看作是一个最终要执行的目标。我们可以使用过滤器filter来添加过滤代码&#xff0c;这个过滤代码可以添加到servlet执行之前&#xff0c;也可以添加到servlet执行之后。Filter可以做到在servlet这个目标程序执行之前过滤&#xff0c;也可以在目标程序执行…