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: 有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?…...
【大数据-调度工具】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 文字识别工具
大家好,我是小寻,欢迎关注公众号:工具优选,免费领取优质项目源码和常用工具,还可以加入我的交流群! 如今,在日常生活和工作中,我们经常需要捕捉屏幕截图并识别其中的文本信息。比如别人给你发资料时直接发…...
如何让微信小程序弹窗滚动条设置在最上面
最近发现一个事情搞得很烦,微信小程序的弹窗内容可以滚动的时候,要保证每一次打开都在最上面,研究了一下终于发现了怎么解决 第一步 首先得把你的弹窗里面的内容用scroll-view标签包起来,像这样 <scroll-view style"hei…...
c语言-指针
指针详解 这段时间在看 Linux内核,深觉C语言功底不扎实,很多代码都看不太懂,深入学习巩固C语言的知识很有必要。先从指针开始。 什么是指针 C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组&…...
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 前言 每年必看两大会,苹果发布会和谷歌发布会&am…...
MySQL和Redis如何保证数据一致性?
前言 由于缓存的高并发和高性能已经在各种项目中被广泛使用,在读取缓存这方面基本都是一致的,大概都是按照下图的流程进行操作: 但是在更新缓存方面,是更新完数据库再更新缓存还是直接删除缓存呢?又或者是先删除缓存再…...
Markdown使用(超详细)
(HBuilderX) 掌握md及HBuilderX对md的强大支持。如果没有点右键设置自动换行,可按Alt滚轮横向滚动查看。 很多人只把markdown用于网络文章发表,这糟蹋了markdown。 markdown不止是HTML的简化版,更重要的是txt的升级版…...
yolov5实现扑克牌识别的产品化过程
文章目录 介绍项目下载硬件准备软件环境素材获取自行获取素材网盘获取图片标注模型训练窗口截图窗口截图(HWND)桌面截图wgc方法最终采用的方式WGC使用方法如何保存灰度图片python 如何加载dll库图片推理扑克牌逻辑ui编写模型加密软件授权软件加密软件打包安装包制作...
第07讲:Java High Level Client,读写 ES 利器
SkyWalking OAP 后端可以使用多种存储对数据进行持久化,例如 MySQL、TiDB 等,默认使用 ElasticSearch 作为持久化存储,在后面的源码分析过程中也将以 ElasticSearch 作为主要存储进行分析。 ElasticSearch 基本概念 本课时将快速介绍一下 E…...
dockerfile暴力处理配置文件外提
前言: 一般来说,springboot打成的jar运行时,同目录/config目录下放application.yml文件会被进行加载,然后通过设置docker映射出宿主机即可做到配置文件外配的效果,但很多时候别的配置文件做不到这种效果,说…...
如何快速给出解释——正交矩阵子矩阵的特征值的模必然不大于1
Memory 首先快速回忆一下正交矩阵的定义: A为n阶实矩阵,且满足A‘AE或是说AA’E,那么A为正交矩阵。 (啊,多么简洁的定义) 其次快速想到它的性质: ① 实特征值必然 或 其他复数…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
