当前位置: 首页 > news >正文

Unity物理系统基本概念

前言:物理引擎仅仅是对现实物理的一种近似模拟。无论是从运算精度和时间连续性都不够准确。目的只是为了让游戏具备令人信服的物理表现,增强游戏的表现力和用户的沉浸感。


一、刚体Rigidbody

刚体是让物体产生物理行为的主要组件。一旦挂载了Rigidbody组件,它就纳入了物理引擎的控制之中,可以受到力的影响并做出反应。

已经被挂载刚体的组件,不建议再用脚本直接修改该物体的位置或者直接改变物体的朝向。如果要让物体运动,可以考虑对刚体施加作用力来推动物体,然后让物理引擎计算并产生想要的结果;或者直接修改物体的速度(velocity)和角速度(angular velocity),这样比施加作用力更直接。

一些情况下,只需要物体具有Rigidbody组件,但又不能让它的运动受到物理引擎的控制。例如,让角色完全受脚本直接控制,但同时又不让角色被触发器检测到,这种不直接受物理控制的、但用其他方式进行的刚体运动成为运动学(Kinematic)。这种刚体的运动方式虽然部分脱离了物理系统控制而不再受到力的影响,但在需要碰撞检测等情况下依旧会被物理系统处理。

可以在脚本中随时开启或关闭物体的Is Kinematic选项,但这样以来会带来一些性能开销,不应频繁使用

二、休眠

当一个刚体的移动速度和旋转速度已经低于某个事先定义的阈值,并保持一定事件,那么物理引擎就可以假定它暂时稳定了。这种情况下,直到其再次收到力的影响之前,物理引擎都不再需要反复计算该物体的运动,这是就可以说该物体进入了"休眠"。

这是一种优化性能的方案。

大多数情况下,刚体的休眠和唤醒都是自动进行的,也就是说我们不用关心这个细节。但是,总有一些情况下,物体无法自动唤醒。例如,一个稳定放在地面上且带有Rigidbody组件的物体,在地面被移除后其仍然悬挂在空中。如果遇到类似的情况,可以在脚本中主动调用WakeUp方法

三、碰撞体Collider

碰撞体组件定义的物体的物理形状。碰撞体本身是隐身的,不一定要和物体的外观完全一致

实际制作时,更多的时候会用物体的近似形状,而不是准确形状,这样可以提升游戏的运行效率。

最节约资源的是一系列基本碰撞体,包括:

  • 盒子碰撞体(Box Collider)   
  • 球体碰撞体(Sphere Collider)  //⚠️:不会因为物体伸缩变成椭球体
  • 胶囊碰撞体(Capsule Collider)

一个物体上可以同时挂载多个碰撞体组件,这样就形成了组合碰撞体

组合碰撞体是一个Unity术语,不是一个组件。指的是一个物体挂载了多个碰撞体组件或该物体具有多个碰撞体的子物体。子物体所挂载的碰撞体组件,也会成为父物体物理外形的一部分。

在模拟外形复杂的物体时,建议多添加几个子物体来表示物理外形,因为用子物体方便单独控制偏移和旋转。但要注意,只在父物体上挂载一个刚体组件,子物体上不要挂载刚体组件。

四、物理材质Physics Materials

必须模拟碰撞体表面材质的特性,这样碰撞体之间发生交互时才能正确模拟实际的物理效果

可以设置摩擦系数、弹性等表面特性

五、触发器Trigger

碰撞体会默认阻挡刚体运动。如果想要检测两个物体是否接触,又不引起物理上的实际碰撞,就需要勾选碰撞体组件的Is Trigger属性,使其变成一个触发器

当一个碰撞体进入了触发器的范围,就会调用脚本的OnTriggerEnter()方法。但要注意,两个物体中至少有一个带有刚体组件(可以是动力学刚体),否则无法触发脚本。

六、碰撞体的分类

对于包含了碰撞体组件的物体来说,物体上是否具有刚体,以及刚体组件上动力学设置的不同,都会使物体的物理碰撞特性发生变化。根据这些特性,对碰撞体进行分类。

1、静态碰撞体Static Trigger

没有挂载刚体的碰撞体。静态碰撞体通常用于制作关卡中固定的部分,例如地形、障碍物等。

2、刚体碰撞体Rigidbody Collider

挂载了普通刚体组件的碰撞体。物理引擎会一直模拟计算刚体碰撞体的物理状态,因此刚体碰撞体会对碰撞以及脚本施加的力做出反应

3、动力学刚体碰撞体Kinematic Rigidbody Collider

挂载了刚体组件且刚体组件设置为动力学刚体的碰撞体。可以在脚本中直接修改动力学刚体碰撞体的位置来移动它,不会对碰撞、力和速度的变化做出反应。

触发器的分类与碰撞体类似,不再说明

七、碰撞事件表

                                                                                                         碰撞事件表

 

静态碰撞体

刚体碰撞体

动力学刚体碰撞体

静态碰撞体

 

✔️

 

刚体碰撞体

✔️

✔️

✔️

动力学刚体碰撞体

 

✔️

 

                                                                                                        触发事件表

 

静态碰撞体

刚体碰撞体

动力学刚体碰撞体

静态触发器

刚体触发器

动力学刚体触发器

静态碰撞体

 

 

 

 

✔️

✔️

刚体碰撞体

 

 

 

✔️

✔️

✔️

动力学刚体碰撞体

 

 

 

✔️

✔️

✔️

静态触发器

 

✔️

✔️

 

✔️

✔️

刚体触发器

✔️

✔️

✔️

✔️

✔️

✔️

动力学刚体触发器

✔️

✔️

✔️

✔️

✔️

✔️

小结:

  • 有刚体碰撞体才会碰撞
  • 只有两个都是静态的才不会触发。

八、层Layer

与标签(Tag)类似,每个物体也可以属于一个"层"。将不同物体安排在不同的层上,并指定哪些层之间不能碰撞,就可以巧妙地完成目的。

可在Unity主菜单的Edit->Project Settings->Physice中找到层碰撞矩阵。层碰撞矩阵左边和上边都是所有层的名称,勾选表示对应两层会发生碰撞。

九、物理关节

关节(Joints)特指一种物理上的连接关系。它总是限制一类运动的自由度,允许另外一类运动的自由度。

Unity提供了很多不同类型的关节。下表列了一些3D场景中的关节

物理关节

组件

简介

固定关节

Fixed Joint

用于固定连接两个物体,不可滑动或旋转。例如可以表现黏住、抓住物体

铰链关节

Hinge Joint

连接的两个物体可以以关节为中心循转,例如屋门

弹簧关节

Spring Joint

用弹簧连接两个物体,两者太近或太远都会受到弹簧的回复力。可以用弹性(Spring)和阻尼(Damper)调节弹簧的弹性

人物关节

Character Joint

专门用来制作任性角色的关节连接。一般用于表现游戏中无生命的人形角色随外力运动的效果。由于配置复杂,需要使用Ragdoll工具辅助制作

十、射线检测

"射线检测"十在游戏开发实践中不可或缺的一项技术。简单来说,它就是在游戏世界中发射一条虚拟的"射线",并观察该射线是否击中了某个物体,以及具体击中了该物体的哪个位置。虽然名字叫做"射线"(Ray),但实际发射的位置、方向和长度句可以根据实际需求来设置。不仅有直线的射线,还有球形射线、盒子射线等。所以射线检测中的"射线"可以看作有一定范围和oxide广义"射线"。

十一、角色控制器与物理系统

控制角色大体上有两种方法:

  • 用脚本直接控制物体的位置和朝向
  • 通过刚体施加力和改变速度来控制角色的行为

用刚体实现的优点在于工作量少,大部分处理都可以依赖物理系统完成。但缺点是角色可能被墙角卡住啊,因障碍物挤压被弹飞之类的,产生bug难以避免。

若不使用刚体,自己写脚本,有点事灵活性和可控性高,但缺点是工作量、难度较大。

 

 

相关文章:

Unity物理系统基本概念

前言:物理引擎仅仅是对现实物理的一种近似模拟。无论是从运算精度和时间连续性都不够准确。目的只是为了让游戏具备令人信服的物理表现,增强游戏的表现力和用户的沉浸感。 一、刚体Rigidbody 刚体是让物体产生物理行为的主要组件。一旦挂载了Rigidbody组…...

防止表单重复提交的几种方式,演示一个自定义注解方式的实现

防止表单重复提交的几种方式,演示一个自定义注解方式的实现 一、防止表单重复提交的几种方式方式一:Token 机制方式二:去重表(主要是利用 MySQL 的唯一索引机制来实现的)方式三:Redis 的 setnx方式四&#…...

《基于智能手机采集的PPG信号预测血管老化》阅读笔记

目录 一、论文摘要 二、论文十问 Q1: Q1论文试图解决什么问题? Q2: 这是否是一个新的问题? Q3: 这篇文章要验证一个什么科学假设? Q4: 有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员&#xff1f…...

【大数据-调度工具】dolphinscheduler安装和遇到的问题

1.安装 安装步骤按照官网安装即可 官网:DolphinScheduler | 文档中心 (apache.org) 版本:3.1.5 2.踩坑记录 Q1.大文件无法上传 问题描述: 在资源中心中上传文件选择完大文件夹之后,选择确认之后确认按钮转了几圈圈之后就没…...

滑动轨迹生成的思路和代码分享-测试可过极验 90%机率

如有技术侵权、可联系本人下架 由于极验采用人工智能的方式对滑动的轨迹进行的验证,因此如果我们比较随意的生成鼠标滑动轨迹基本是肯定被封的,因此我们要详细分析一下鼠标轨迹的规律, 通之前介绍的调试手段,手工滑动滑块,获取到鼠标滑动轨迹的集合数组如下: [[-37,-41…...

【Linux】项目自动化构建工具make/makefile

🏖️作者:malloc不出对象 ⛺专栏:Linux的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录 前言一、make/makefile的背景二、…...

【系分范文】论软件需求获取技术以及应用

目录 论题论题介绍论文要点理论素材准备范文摘要正文论题 论软件需求获取技术以及应用 论题介绍 软件需求是指用户对新系统在功能、行为、性能、设计约束等方面的期望。软件需求获取是一个确定和理解不同的项目干系人的需求和约束的过程。需求获取是否科学、准备充分,对获取…...

vue2.0中post请求

vue2.0中post请求 三种格式:在vue中axois的用法:1、 multipart/form-data类型2、 x-www-form-urlencoded类型3、 application/json类型 三种格式: ○ Content-Type:x-www-form-urlencoded ○ Content-Type:multipart/form-data ○ Content…...

MySQL双写缓冲区(Doublewrite Buffer)

本文已收录至Github,推荐阅读 👉 Java随想录 文章目录 摘要为什么需要Doublewrite BufferDoublewrite Buffer原理Doublewrite Buffer相关参数总结 摘要 InnoDB是MySQL中一种常用的事务性存储引擎,它具有很多优秀的特性。其中,Dou…...

免费开源的Umi-OCR 文字识别工具

大家好,我是小寻,欢迎关注公众号:工具优选,免费领取优质项目源码和常用工具,还可以加入我的交流群! 如今,在日常生活和工作中,我们经常需要捕捉屏幕截图并识别其中的文本信息。比如别人给你发资料时直接发…...

如何让微信小程序弹窗滚动条设置在最上面

最近发现一个事情搞得很烦&#xff0c;微信小程序的弹窗内容可以滚动的时候&#xff0c;要保证每一次打开都在最上面&#xff0c;研究了一下终于发现了怎么解决 第一步 首先得把你的弹窗里面的内容用scroll-view标签包起来&#xff0c;像这样 <scroll-view style"hei…...

c语言-指针

指针详解 ​ 这段时间在看 Linux内核&#xff0c;深觉C语言功底不扎实&#xff0c;很多代码都看不太懂&#xff0c;深入学习巩固C语言的知识很有必要。先从指针开始。 什么是指针 ​ C语言里&#xff0c;变量存放在内存中&#xff0c;而内存其实就是一组有序字节组成的数组&…...

Jenkins集成SonarQube实现代码质量检查

文章目录 一、前提配置1.1 安装及配置SonarQube Scanner插件1.2 配置SonarQube servers 二、非流水线集成SonarQube1.1 配置非流水线任务 三、流水线集成SonarQube 一、前提配置 1.1 安装及配置SonarQube Scanner插件 (1) 点击【系统管理】>【插件管理】>【可选插件】搜…...

2023 谷歌I/O发布会新AI,PALM 2模型要反超GPT-4,一雪前耻!

文章目录 1 前言2 Google I/O 发布者大会3 PaLM 2模型3 Bard项目4 其他AI工具4.1 AI 图片编辑 Magic Editor4.2 Duet AI 办公4.3 Universal Translator 翻译工具4.4 Google 沉浸式导航4.5 Google 搜索引擎 5 讨论 1 前言 每年必看两大会&#xff0c;苹果发布会和谷歌发布会&am…...

MySQL和Redis如何保证数据一致性?

前言 由于缓存的高并发和高性能已经在各种项目中被广泛使用&#xff0c;在读取缓存这方面基本都是一致的&#xff0c;大概都是按照下图的流程进行操作&#xff1a; 但是在更新缓存方面&#xff0c;是更新完数据库再更新缓存还是直接删除缓存呢&#xff1f;又或者是先删除缓存再…...

Markdown使用(超详细)

&#xff08;HBuilderX&#xff09; 掌握md及HBuilderX对md的强大支持。如果没有点右键设置自动换行&#xff0c;可按Alt滚轮横向滚动查看。 很多人只把markdown用于网络文章发表&#xff0c;这糟蹋了markdown。 markdown不止是HTML的简化版&#xff0c;更重要的是txt的升级版…...

yolov5实现扑克牌识别的产品化过程

文章目录 介绍项目下载硬件准备软件环境素材获取自行获取素材网盘获取图片标注模型训练窗口截图窗口截图(HWND)桌面截图wgc方法最终采用的方式WGC使用方法如何保存灰度图片python 如何加载dll库图片推理扑克牌逻辑ui编写模型加密软件授权软件加密软件打包安装包制作...

第07讲:Java High Level Client,读写 ES 利器

SkyWalking OAP 后端可以使用多种存储对数据进行持久化&#xff0c;例如 MySQL、TiDB 等&#xff0c;默认使用 ElasticSearch 作为持久化存储&#xff0c;在后面的源码分析过程中也将以 ElasticSearch 作为主要存储进行分析。 ElasticSearch 基本概念 本课时将快速介绍一下 E…...

dockerfile暴力处理配置文件外提

前言&#xff1a; 一般来说&#xff0c;springboot打成的jar运行时&#xff0c;同目录/config目录下放application.yml文件会被进行加载&#xff0c;然后通过设置docker映射出宿主机即可做到配置文件外配的效果&#xff0c;但很多时候别的配置文件做不到这种效果&#xff0c;说…...

如何快速给出解释——正交矩阵子矩阵的特征值的模必然不大于1

Memory 首先快速回忆一下正交矩阵的定义&#xff1a; A为n阶实矩阵&#xff0c;且满足A‘AE或是说AA’E&#xff0c;那么A为正交矩阵。 &#xff08;啊&#xff0c;多么简洁的定义&#xff09; 其次快速想到它的性质&#xff1a; ① 实特征值必然 或 其他复数…...

新手也能懂的SSRF漏洞实战:用iwebsec靶场复现文件读取与内网探测

从零开始掌握SSRF漏洞&#xff1a;iwebsec靶场实战指南1. 认识SSRF漏洞的本质想象一下&#xff0c;你正在一家高档餐厅点餐&#xff0c;服务员承诺可以帮你从任何地方获取食材——包括隔壁竞争对手的厨房。SSRF&#xff08;Server-Side Request Forgery&#xff09;漏洞就像这个…...

从入门到实践:EEG公开数据集分类与应用场景全解析

1. EEG公开数据集入门指南刚接触脑电信号分析的研究者&#xff0c;常常会被一个问题困扰&#xff1a;"我应该从哪里获取可靠的EEG数据&#xff1f;"作为一个在这个领域摸爬滚打多年的研究者&#xff0c;我完全理解这种困惑。记得我第一次接触EEG研究时&#xff0c;光…...

告别CAJ格式困扰:3分钟学会用开源工具将知网文献转为PDF

告别CAJ格式困扰&#xff1a;3分钟学会用开源工具将知网文献转为PDF 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换&#xff0c;成功与否&#xff0c;皆是玄学。 项目地址: https://gitcode.com/…...

【与我学 ClaudeCode】协作篇 之 Worktree + Task Isolation :目录隔离的并行执行通道

作者&#xff1a;逆境不可逃 技术永无止境 希望我的内容可以帮助到你&#xff01;&#xff01;&#xff01;&#xff01; 大家吼 ! 我是 逆境不可逃 今天给大家带来文章《【与我学 ClaudeCode】协作篇 之 Worktree Task Isolation &#xff1a;目录隔离的并行执行通道》. Le…...

量子纠错码VarQEC:原理、实现与硬件优化

1. 量子纠错码基础与实验背景量子纠错码&#xff08;Quantum Error Correction Codes, QEC&#xff09;是量子计算中保护量子信息免受噪声影响的核心技术。与经典纠错码不同&#xff0c;量子纠错需要应对量子态特有的退相干和纠缠特性。传统QEC如[[5,1,3]]完美码虽然理论完备&a…...

Unity3D深度纹理实战:手把手教你实现可交互的激光雷达扫描特效(附完整C#/Shader代码)

Unity3D深度纹理实战&#xff1a;手把手教你实现可交互的激光雷达扫描特效&#xff08;附完整C#/Shader代码&#xff09;在科幻题材的游戏开发中&#xff0c;激光雷达扫描特效是营造科技感的经典元素。从《赛博朋克2077》的战术目镜到《看门狗》的环境扫描&#xff0c;这种动态…...

总线式智能提示灯系统设计:从恒流驱动到模块化架构

1. 项目概述&#xff1a;从传统到智能的剧场提示灯系统革新在剧场、演播室或者大型活动现场的后台&#xff0c;如果你待过&#xff0c;一定对那套“红灯停&#xff0c;绿灯行”的提示灯系统不陌生。导演或舞台监督通过对讲机喊“Standby”&#xff08;准备&#xff09;&#xf…...

Keil µVision反汇编窗口内容导出方案与调试技巧

1. 问题背景与需求解析在嵌入式开发过程中&#xff0c;调试环节往往占据大量时间。Keil Vision作为业界广泛使用的集成开发环境(IDE)&#xff0c;其调试器功能强大但某些细节功能仍有提升空间。最近我在使用C251架构开发汽车电子控制单元时&#xff0c;就遇到了一个看似简单却影…...

【DeepSeek漏洞扫描辅助实战指南】:20年安全专家亲授3大避坑法则与5步提效流程

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek漏洞扫描辅助的核心价值与适用边界 DeepSeek漏洞扫描辅助并非通用型渗透测试引擎&#xff0c;而是一个聚焦于大语言模型&#xff08;LLM&#xff09;应用层安全的轻量级分析工具。其核心价值在…...

AI算法工程师如何进行模型部署?这2个工具+3个技巧,快速上线

对于软件测试从业者来说&#xff0c;模型部署并不是一个陌生的概念——随着AI功能逐渐渗透到各类应用软件中&#xff0c;测试工程师不仅需要验证模型输出的准确性&#xff0c;更需要理解部署流程对模型稳定性、响应速度和结果一致性的影响。很多测试同学会有这样的困惑&#xf…...