unity物理系统

news2024/11/16 13:38:33

物理引擎即描述真实世界中物理现象的算法,如刚体物理,软体物理和流体物理,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.coloradmin.cn/o/730774.html

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

相关文章

【运维知识进阶篇】Zabbix5.0稳定版详解10(Zabbix自动注册+Ansible自动部署,实现一条命令监控任意主机)

当我们的Zabbix自动注册Ansible自动部署在一起时,会碰出什么样的火花,答案就是可以实现执行ansible的一条命令,监控任意一台或多台主机。 目录 一、配置好自动注册规则 二、编写Ansible playbook 三、运行Ansible,查看监控效果…

从零开始 Spring Boot 64:Hibernate 标识符

从零开始 Spring Boot 64:Hibernate 标识符 图源:简书 (jianshu.com) Hibernate 中的实体,由标识符(Identitifier)确定了其实体实例的唯一性,这对应于表中的主键。 Id 对于单一属性作为标识符的情况&…

Web3与AI:数字时代安全隐私交易的未来

AI+web3=下一个热门赛道? 在数字时代的浪潮中,Web3和人工智能(AI)成为了两个备受关注的前沿技术。Web3代表着下一代互联网,强调去中心化、透明和用户控制的特点。而人工智能作为一种智能化的技…

【LeetCode】503. 下一个更大元素 II

503. 下一个更大元素 II(中等) 方法:单调栈 「 对于找最近一个比当前值大/小」的问题,都可以使用单调栈来解决。栈可以很好的保存原始位置,最近影射栈顶。题目要求更大,因此更大即解–出栈,更小…

【leetcode】15.三数之和(python+转为两数之和+去重)

class Solution(object):def threeSum(self, nums):""":type nums: List[int]:rtype: List[List[int]]"""# 思路:转为两数之和# for循环遍历先固定一个数字a,寻找另外两个数字之和-a(双指针)# 难点…

【高并发内存池】

🎉项目:高并发内存池 博主主页:桑榆非晚ᴷ 博主能力有限,如果有出错的地方希望大家不吝赐教 给自己打气:成功没有快车道,幸福没有高速路。所有的成功,都来自不倦地努力和奔跑,所有…

自动化测试工具——Fitnesse

1 介绍 是一个完全集成的独立wiki和验收测试框架。 1.1、协作工具 由于FitNesse是一个wiki web服务器,它的入门和学习曲线非常低,这使得它成为一个优秀的工具,可以与业务涉众进行协作。 1.2、测试工具 FitNesse中创建的wiki页面作为测试…

地球万物皆可计算!星图地球智脑引擎重磅发布

人类文明的每一次阶跃,都起源于计算。 1800多年前,在清脆的珠算声中,算盘拨出人类最古老的计算程序,带来农耕文明的繁盛;200多年前,在齿轮的转动间,机械计算机勾勒出第一次工业革命的袅袅蒸汽&…

Leetcode:167. 两数之和 II - 输入有序数组(2023.7.8 每日一题C++)

目录 167. 两数之和 II - 输入有序数组 题目描述: 实现代码与解析: 暴力(超时) 双指针 原理思路: 二分 原理思路: 167. 两数之和 II - 输入有序数组 题目描述: 给你一个下标从 1 开始的…

【Python编程系列】2、Python解释器

Python解释器 自带IDLE 当我们使用"Install Now"的默认安装方式时,会自动安装一个纯Python下使用Tkinter编写的相当基本的IDE。 什么是IDE?Integrated Development Environment,集成开发环境。 有多基础呢?可以打开看看它的界面就知道了! 编写代码后,点击回车…

Python——— 分支结构循环结构

(一)语句底层逻辑思维 控制语句:把语句组合成能完成一定功能的小逻辑模块。 分为三类:顺序、选择和循环。 其中: “ 顺序结构 ” 代表 “先执行a,再执行b” 的逻辑。比如,先找个女朋友&…

实验室信息化LIMS如何采集实验室仪器设备数据?

1. 简述 数据采集功能,数据采集工具将以客户端的形式运行在与设备连接的工作站电脑上,主要负责将设备产生的完整的可输出的原始结果提取到LIMS系统,供实验室人员进行报告生成,汇总等操作。 2. 实现方式 仪器数据采集采用LIMS系统…

单摆模型仿真(SMART PLC梯形图实现)

单摆模型详细介绍这里不再赘述,大家可以参看下面文章链接,单摆模型的仿真有助于大家理解分析力学的有关知识,同时模型的实现可以帮助大家更好的理解和运用微分和积分这2个强有力的工具。 单摆模型(博途PLC和Simulink仿真对比)_RXXW_Dor的博客-CSDN博客单摆模型的详细推导公…

深入分析Spring的IoC容器:从底层源码探索

前言: 博主在最近的几次面试中,大中小厂都问到了Spring的ioc容器相关问题,这块知识确实是面试中的重点内容,因此结合所看的书籍,在这篇文章中总结下。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读&#xff0…

Graalvm编译spring boot 3 + jpa 的原生镜像

编译spring boot 3 native jpa的原生镜像 其中涉及版本: maven: 3.5.4 jdk: 17 graalvm: 22.3 springboot jpa: 3.0.8 一、Windows 1、graalvm安装 GraalVM22.3.0安装地址 解压到任意目录后添加JAVA_HOME环境变量 新增path:%JAVA_HOME%与%JAVA_H…

开发日记-凌鲨中微应用的安全性

凌鲨在框架上使用了特别注重安全性的tauri框架,里面所有的权限都需要明确给出。 微应用本质上是静态web页面加上注入的额外能力。额外能力通过tauri的ipc注入和访问http服务。为了保证主服务的稳定性,一些能力我们是以外挂可执行文件的方式,…

Redis过期策略和持久化机制全面揭秘,教你如何合理配置

Redis过期策略 Redis过期策略就是指Redis如何处理设置了过期时间的键值对。Redis的过期策略有两种:定期删除和惰性删除。 定期删除 定期删除,指的是Redis默认每隔100ms就随机抽取一些设置了过期时间的key,检查是否过期,如果过期…

谈谈mysql——主从模式下的同步方式及半同步、MGR的部署方式

MySQL的复制模式 异步复制 MySQL的复制方式默认是异步的,主从复制涉及三个线程 master I/O master I/O线程负责写入Binlog,并将执行结果返给客户端,至于Binlog有没有被IO线程读取,读取后有没有重放,重放有没有成功&…

Linux系统:OpenSSH7.4p升级到9.0p

目录 一、理论 1.ssh 2.OpenSSH 二、实验 1.OpenSSH升级 三、问题 1.远程SSH服务器拒绝X11转发请求 2.sshd服务重启报错 四、总结 一、理论 1.ssh (1)概念 ssh 是协议,基于22端口的安全协议。 ssh中文解释是安全的shell&#xff…

使用高斯计需要注意哪些事项

高斯计(特斯拉计)是检测磁体磁感应强度的专用仪器,可以测量永磁材料的表磁,磁路间隙磁场以及磁场发生装置产生的空间磁场测量。高斯计(特斯拉计)作为一种比较精密的仪器,在使用过程中应注意以下…