Unity物理系统脚本编程(下)
一、修改物理材质
Unity对物体表面材料的性质做了件化处理,仅有5种常用属性:
- Dynamic Friction(动态摩擦系数)
- Static Friction(静态摩擦系数)
- Bounciness(弹性系数)
- Friction Combine(摩擦力系数算法)
- Bounce Combine(弹性系数算法)
物理材质是配合碰撞体使用的。碰撞体有一个Material属性,将创建好的物理材质拖拽到该属性上即可指定该属性。
不指定任何物理材质时,碰撞体具有默认的物理材质。
二、FixedUpdate
物理更新,保证稳定的时间间隔(默认0.02s,可以通过Edit->Project Settings->Time来修改)。
物理系统对于时间是非常敏感的。举一个例子:发射子弹,0.1秒后几种物体。假如更新频率不稳定,子弹接触物体时没有及时检测,再晚0.02秒,子弹已经穿过了物体。这样子弹就错过了碰撞的时机,导致后续结果完全不同。
按理说刷新频率应该是越高越好,但综合考虑机器负担和性能后,决定50帧是最合理的选择。
所有的物理系统处理都会在引擎循环中的一个专门环节上完成,从而保证更新频率的稳定。
特殊机制:
如果说设备卡了一下,物理更新还能保证更新频率吗?
答案是有办法间接保证这一点。简单来说,游戏世界的时间是一个虚拟的概念,一定程度上可以人为控制。如果在T时刻,卡了0.06秒,正好错过了三个周期,那么在下一次不卡的时候,FixedUpdate函数会补上之前错过的三次,连续执行4次,而且还会"假装"这4次的调用时间点分别是T+0.02,T+0.04,T+0.06T+0.08.通过这样的机制,就能保证无论硬件运行是否稳定,游戏都能保证"稳定"的物理更新,避免出现奇怪的结果。作为对比,Update就没有这个特性。
三、修改角速度
与修改刚体速度类似,代码如下
Rigid.angularVelocity=new Vector3(0,60,0);
刚体的angularVelocity属性的数据类型为Vector3,代表x、y、z轴的旋转速度,单位时弧度/s,也就是说3.14代表每秒半圈。
由于具有角阻尼(Angular Drag),因此即便没有接触其他物体,旋转也会慢慢停下来。
四、质心
拼接一个简单的模型,使用物理系统调整其重心就可以只做一个不倒翁。代码如下
Rigidbody rigid;
rigid=GetComponent<Rigidbody>();
//设置centerOfMass就可以指定重心了
rigid.centerOfMass=new Vector3(0,-1,0);
游戏物体的重心不受真实世界的限制,不但可以设置在物体的任意位置,而且还可以超出物体本身的范围。
对物体施加力时,力的位置不同,效果也就不同。严格来说,对一个不受任何力的物体(在Unity里就是去掉了中立,也不与其他物体接触的刚体),如果手里的方向通过了该物体的质心,物体就不会获得较速度。如果力的方向错过了质心,那么物体就会有旋转的趋势。质心到受力线的距离越远,旋转的趋势就越强
五、更多施加力的方式
力的位置很重要,但前文提到的AddForce却没有位置参数。可以猜想,AddForce函数施加力时,就是从物体的质心位置施加的。
如果要模拟更复杂的情况,可以使用以下函数:
void AddForceAtPosition(Vector3 force,Vector3 position);
void AddForceAtPosition(Vector3 force,Vector3 position,ForceMode mode);
第二个参数为施加力的位置,以世界坐标表示,因此使用时可能需要转换坐标。
第三个参数为力的模式,是一个枚举类型,定义如下:
public enum ForceMode
{
//默认方式为持续施加力
Force=0,
//设置为瞬间博发力,适合表现快速猛烈的力,如爆炸
//力的持续时间有区别
Impulse=1,
//瞬时改变刚体速度,不考虑质量
VelocityChange=2,
//直接改变加速度,不考虑质量
Acceleration=5
也就是说,施加力的时候,可以通过改变蚕食mode来让施加力的含义发生变化。前两种比较常用,第三种完全可以用直接修改刚体速度的velocity属性代替
六、刚体约束
在Rigidbody中,有一个Constraints,可以锁定xyz轴的移动与旋转。根据需要锁定一些自由度,可以让刚体的行为更加可控。
也可以用脚本控制冻结:
rigid.constraints=RigidbodyConstraints.FreezeAll;//冻结所有移动和旋转
rigid.constraints=RigidbodyConstraints.FreezePositionX;//冻结x轴的位移,取消所有其它约束
rigid.constraints=RigidbodyConstraints.FreezeRotation;//冻结所有旋转,取消位移约束
rigid.constraints=RigidbodyConstraints.FreezeRotationX|RigidbodyConstraints.FreezeRotationZ|RigidbodyConstraints.FreezePositionY;//冻结x和z轴旋转,冻结y轴位移
相关文章:
Unity物理系统脚本编程(下)
一、修改物理材质 Unity对物体表面材料的性质做了件化处理,仅有5种常用属性: Dynamic Friction(动态摩擦系数)Static Friction(静态摩擦系数)Bounciness(弹性系数)Friction Combine…...
容器技术的发展
容器技术的发展 近年来,随着计算机硬件、网络以及云计算等技术的迅速发展,云原生的概念也越来越受到业界人士的广泛关注,越来越多的应用场景开始拥抱云原生,其中容器技术的发展起着至关重要的作用。本章将介绍容器技术的基础知识…...
Python Flask request中常见存储参数的介绍
Python Flask request中常见存储参数的介绍 首先从flask模块中导入请求对象: from flask import requestrequest.form 通过method属性可以操作当前请求方法,通过使用form属性处理表单数据(本质也是得到一个字典,如果传输的是字…...
php+vue网盘系统的设计与实现
该网盘系统的开发和设计根据用户的实际情况出发,对系统的需求进行了详细的分析,然后进行系统的整体设计,最后通过测试使得系统设计的更加完整,可以实现系统中所有的功能,在开始编写论文之前亲自到图书馆借阅php书籍&am…...
[前端]深浅拷贝
一、回顾变量类型 基础类型 boolean(bool) number string null undefined 引用类型 object function array 基本类型与引用类型的存储 基本类型一般存储在 栈 (栈小) 栈一旦确认 大小就固定 可能会造成溢出栈一般是先进后出用于存储…...
文章纠错免费软件-文字校对软件免费下载
自动校对稿件的软件 自动校对稿件的软件是一种基于自然语言处理(Natural Language Processing, NLP)和机器学习(Machine Learning)技术的工具,可以较为准确地检测和纠正文本中出现的语法、拼写、标点符号以及其他笔误…...
【Redis】Redis缓存雪崩、缓存穿透、缓存击穿(热key问题)
目录 一、缓存穿透 1、概念 2、解决办法 1.缓存空对象 2.布隆过滤 二、缓存雪崩 1、概念 2、解决办法 1.给key设置随机的过期时间TTL 2.业务添加多级缓存 3.利用集群提供服务可用性 4.缓存业务添加降级限流 三、缓存击穿 1、概念 2、解决办法 1.互斥锁 2.逻辑…...
为什么很多程序员喜欢linux系统?
a> Linux哪些行业在运用? Linux系统运用极其广泛,不少用户只知道windows,是因为,Linux的运用主要是在企业端。现在科技极其发达,我们手机在手,就能干很多事情,只需点一点屏幕,轻松…...
Bean 作用域和生命周期
✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录 lombok的使用案例引入作用域定义singleton单例作用域prototype原型作用域(多例作用域)request请求作用域session会话作用域ap…...
PMP考试常见13个固定套路
一、变更批准之后 变更批准后要做三件事: 1、在变更日志中记录 2、通知相关干系人 3、更新项目管理计划 二、风险的情景题 1、先判断风险识别了,还是风险发生了。 2、若是风险识别,按风险管理程序走; 3、若是风险发生,则应采取应急措施…...
Leecode101 ——对称二叉树
对称二叉树:Leecode 101 leecode 101 对称二叉树 根据题目描述,首先想清楚,对称二叉树要比较的是哪两个节点。对于二叉树是否对称,要比较的是根节点的左子树与根节点的右子树是不是相互翻转的,其实也就是比较两个树,…...
JVM学习随笔03——Java堆中new一个对象的步骤
目录 一、进行类加载 二、堆中分配内存 1、怎么输出GC日志: 2、内存分配的两种方式: 3、内存分配过程中并发控制的两种方式: 三、内存空间初始化 四、对象头初始化(对象头包含哪些信息?) 五、执行构…...
虹科方案 | CEMEX 使用HK-Edgility 智能边缘计算平台简化其企业 WAN 管理和运营
一、应对价值 130 亿美元的跨国企业的网络挑战 “我们选择 Edgility 是因为其卓越的管理和协调功能,它为我们提供了一个端到端的工具集,可以经济高效地部署和管理我们边缘设备的生命周期。” —— Fernando Garcia -Villaraco Casero, CEMEX 全球IT 战略…...
rk3568 系统移植和编译
1。 硬件问题 尽量根据原版 evb 开发版 pcb 进行布线和移植,切记不可自行走线。 emmc 和 ddr4 选型都有要求的,按照硬件手册进行设计 2。软件问题 2.1 目前固件系统选用1.3.2 版本进行设计 解压后运行 .repo/repo/repo sync -c 更新代码 2.2 ubo…...
深度解析C++异常处理机制:分类、处理方式、常见错误及11新增功能
C 基础知识 八 异常处理 上篇 一、基础1. 异常的概念2. 异常的分类2.1 内置异常2.2 自定义异常 3. 异常的处理方式3.1 try-catch 语句3.2 throw 语句3.3 noexcept 修饰符3.4 finally 语句块 二、 异常处理机制1 try-catch 语句块2 异常处理流程3 标准异常类 三、 抛出异常1 thr…...
FPGA时序约束(四)主时钟、虚拟时钟和时钟特性的约束
系列文章目录 FPGA时序约束(一)基本概念入门及简单语法 FPGA时序约束(二)利用Quartus18对Altera进行时序约束 FPGA时序约束(三)时序约束基本路径的深入分析 文章目录 系列文章目录前言主时钟约束跨时钟域…...
JNI开发
文件结构(选中的为生成的) CMake构建不需要执行命令,会自动生成so文件打包进apk Android mk构建需要执行命令生成so文件,再打包进apk。命令如下。 # 在jni目录下执行 # 生成com_demo_cppproject_OtherNdkTest.h头文件 javac -h .…...
JAVA有哪些特点?
JAVA有以下特点: 综上所述,Java作为一种先进的面向对象编程语言,具有简单、可移植、健壮、高性能、多线程、动态性、跨平台、开放性和安全性等众多特点,已经成为广泛使用的编程语言之一。 简单易学:JAVA语言的语法与C语…...
使用读写锁提高并发
我们想要的是:允许多个线程同时读,但只要有一个线程在写,其他线程就必须等待。 ReadWriteLock ReadWriteLock的作用: 只允许一个线程写入(其他线程既不能写入也不能读取);没有写入时…...
使用@PropertySource加载配置文件
1.PropertySource和PropertySources注解 1.1.PropertySource注解概述 PropertySource注解是Spring 3.1开始引入的配置类注解。通过**PropertySource注解可以将properties配置文件中的key/value存储到Spring的Environment中,Environment接口提供了方法去读取配置文…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...
