unity物理系统

物理引擎即描述真实世界中物理现象的算法,如刚体物理,软体物理和流体物理,unity本身支持的主要为刚体物理,我们也可以自己编写一些其它的模拟效果。

unity内置Nvidia开发的Physx引擎(3D)和一个开源引擎Box2D,它们是共存的但不能作用在同一个物体身上。

引擎的功能主要是1.碰撞检测 2.刚体动力学模拟

在unity中每一次物理更新会发生:

1.调用FixedUpdate

2.唤醒所以yield WaitForFixedUpdate的协程

3.执行物理事件:OnTriggerEnter等等

 一般来说物理引擎会以一个固定的时间步长来对物理组件进行更新模拟。(FixedUpdate)

所以在高帧率下这可能会引起一些卡顿或不协调,于是unity会在每一渲染帧对物理行为进行插值来保证两次物理更新之间平滑过渡。

离散碰撞检测 Discrete Collision Detection

DCD是一种最基本的碰撞检测方式

DCD原理:

1.获取上一帧位置,速度等信息,并据此计算出新的位置与速度。

2.对于这些新位置,DCD会检测是否与其它物体重叠。

3.若有重叠,则进入碰撞物理计算并得出最后的速度与位置。

但是DCD有一个很大的问题就是快速移动会穿过其它物体,从而逃过碰撞检测,因为我们始终以固定时间步长来更新物理,所以有可能两个物体在前后两帧之间穿过了彼此,但物理引擎并不知情。

连续碰撞检测 Continuous Collision Detection

Sweep-base CCD:

原理:

1.记录下物体上一帧与当前帧的位置与线速度

2.利用这两帧的数据计算出一个移动范围

3.对该移动范围内的物体进行碰撞检测并进行相关的位置/速度更新

Sweep-base CCD是依赖线速度的一种算法,它并不能处理角速度较大时物体的碰撞,其次它极其消耗性能,尤其是扫过范围内物体较多时。

在unity中我们可以把Rigidbody组件的Collision Detection设为“Continuous”或者“Continuous Dynamic”来开启Sweep-base CCD。

Speculative CCD:

Speculative CCD会根据上一帧的数据来预测并扩大物体的矩形包围盒,在上图中引擎通过扩大包围盒来找到了n1和n2两个碰撞点的法线。于是引擎重新规划了小球即将到达的位置(t2)。

Speculative CCD对快速旋转的物体而言处理的比Sweep-base CCD要好,同样的我们也可以在unity中选择“Continuous Speculative”来开启Speculative CCD。

 

 

连接关节组件:Fixed Joint

Fixed Joint组件允许我们把一个刚体“粘”到另一个刚体上,也允许它们在一定力下断裂。

 Hinge Joint

与Fixed Joint类似,不同的是Hinge Joint的行为是像门一样转动。

 

 

2D作用器(Effector2D)

给2D物体增加一些更复杂的行为。必须搭配Collider2D使用。

 

盒状射线检测 BoxCast:

BoxCast函数以origin为起点生成一个长宽为size,旋转角度为angle的矩形方块,并将其向direction方向投出distance的距离。接着BoxCast会返回接触到的物体信息。

 

更多的射线检测:

圆形:

 

胶囊:

 

 射线检测可视化:

对于基本的RayCast可视化函数:

 对于盒装射线,可以通过计算4个顶点的位置,再利用Debug.DrawLine来连起来即可。

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

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

相关文章

【转换】编码转换工具笔记

应用场景 应用场景是程序整合第三方库多平台运行,第三方库window平台编译,代码移植到linux出现bom问题 思考解决 windows使用utf-8编码,linux使用utf-8无bom编码 工具主要针对utf-8编码文件,能够批量添加删除BOM,无…

vector [] 赋值出现的报错问题

下面这段代码的作用是创建了一个整数类型的vector&#xff08;std::vector<int>&#xff09;并对其进行操作。以下是代码的详细说明&#xff1a; 使用reserve(10)方法为向量分配至少10个元素的存储空间。reserve() 预留了额外的存储空间&#xff0c;以避免后续添加元素时…

Ubuntu: scp命令使用及Permission denied错误解决方案

scp命令介绍 scp 命令用于 Linux 之间复制文件和目录。scp 是 secure copy 的缩写, scp 是 Ubuntu 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。 scp local_file remote_usernameremote_ip:remote_folder scp /Users/X.pem root192.168.1.247:/usr/local/ssl Permission…

『DotNetBrowser』.Net的浏览器嵌入组件,该选择DotNetBrowser 还是 CefSharp?

&#x1f4e3;读完这篇文章里你能收获到 全方位对比DotNetBrowser 和 CefSharp的优缺点 文章目录 一、引言二、引擎三、架构1. CefSharp架构2. DotNetBrowser架构 四、对比1. 稳定性和内存使用2. 应用程序域3. AnyCPU4. H.264, AAC5. 安全6. Visual Studio设计器7. 嵌入应用程…

Ubuntu 22.04.2 LTS 安装搜狗输入法后,修改区域格式Regional Format crash 崩溃 ,改用bash 指令修改

故障 系统已经升级到最新 基于Ubuntu 20.04 LTS apt upgrade升级而来。 yeqiangyeqiang-MS-7B23:~$ cat /etc/os-release PRETTY_NAME"Ubuntu 22.04.2 LTS" NAME"Ubuntu" VERSION_ID"22.04" VERSION"22.04.2 LTS (Jammy Jellyfish)"…

JavaWeb 笔记——5

JavaWeb 笔记——5 一、Filter1.1、概述1.2、Filter快速入门1.3、Filter执行流程1.4、Filter使用细节1.5、Filter-案例-登陆验证 二、Listener2.1、Listener概述与分类2.2、ServletContextListener使用 三、AJAX3.1、AJAX概述3.2、AJAX快速入门3.3、使用Ajax验证用户名是否存在…

DAY36:贪心算法(三)最大子数组和+买卖股票最佳时机

文章目录 53.最大子数组和枚举思路暴力解法贪心思路完整版时间复杂度 122.买卖股票的最佳时机Ⅱ&#xff08;解法比较巧妙&#xff09;思路完整版总结 53.最大子数组和 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元…

论文解读:PeSTo:用于精确预测蛋白质结合界面的无参数几何深度学习

Title:PeSTo: parameter-free geometric deep learning for accurate prediction of protein binding interfaces 期刊&#xff1a;nature communication 分区&#xff1a;一区 影响因子&#xff1a;16.6 webserver:t Pesto Github:GitHub - LBM-EPFL/PeSTo 摘要 蛋白质是…

Spring Boot 中的 CompletableFuture 类是什么,如何使用?

Spring Boot 中的 CompletableFuture 类是什么&#xff0c;如何使用&#xff1f; 介绍 在开发企业级应用程序时&#xff0c;我们经常需要异步执行任务。异步执行任务可以提高应用程序的性能和响应能力。在 Java 8 中&#xff0c;引入了 CompletableFuture 类&#xff0c;它提…

git no matching host key type found. Their offer: ssh-rsa

本地生成ssh&#xff0c;并配置了服务器SSH Public Keys 问题 拉去远程代码报错 git no matching host key type found. Their offer: ssh-rsa (base) tangsiqitangsiqideMacBook-Pro VDI % git clone "ssh://tangsiqireview.archeros.cn:29418/ArcherDT/vdi-server&…

Centos 7 下安装Redis

官网地址&#xff08;英文&#xff09;&#xff1a;Redis 官网地址&#xff08;中文&#xff09;&#xff1a;CRUG网站 or redis中文文档 Redis源码地址&#xff1a;GitHub - redis/redis: Redis is an in-memory database that persists on disk. The data model is key-v…

500万PV的网站需要多少台服务器?

1. 衡量业务量的指标 衡量业务量的指标项有很多&#xff0c;比如&#xff0c;常见Web类应用中的PV、UV、IP。而比较贴近业务的指标项就是大家通常所说的业务用户数。但这个用户数比较笼统&#xff0c;其实和真实访问量有比较大的差距&#xff0c;所以为了更贴近实际业务量及压力…