UnityAPI的学习——Rigidbody类

Rigidbody类的功能是用来模拟GameObject对象在现实世界中的物体特性,包括重力、阻力、质量、速度等

Rigidbody类实例属性

在Rigidbody类中,涉及的实例属性有collisionDetectionMode、drag、inertiaTensor、mass和velocity。

collisionDetectionMode属性:碰撞检测模式

基本语法

public CollisionDetectionMode collisionDetectionMode{ get; set; }

功能说明
此属性用于设置刚体的碰撞检测模式。刚体的碰撞检测模式有三种,即枚举类型CollisionDetectionMode
功能说明
1、Discrete :静态离散检测模式,为系统的默认设置。在此模式下,只有在某一帧中两物体的碰撞器发生重叠时才能被检测到,这样就有可能导致某物体的前一帧在另一个刚体的上方,而下一帧移动到了另一个刚体的下方,这样就会发生穿越现象。
2、Continuous:静态连续检测模式,一般用在高速运动刚体的目标碰撞体上,防止被穿越,检测强度比Discreet强。
总之,无论哪种检测模式都有可能被穿越,为了防止穿越现象的发生,除了设置其碰撞检测模式外,还要适当增加两物体碰撞器的厚度,一般不要小于0.1,,同时尽量降低两物体碰撞时的相对速度。

drag属性:刚体阻力

基本语法

public float drag { get; set; }

功能说明
此属性用于给刚体添加一个阻力。drag值越大刚体速度减慢得越快,当drag>0时,刚体在增加到一定速度后会均速移动
注意:刚体在自由落体运动中的最大速度值只与Gravity和drag值有关,与质量Mass无关。

inertiaTensor属性:惯性张量

功能说明
此属性用于设置刚体的惯性张量。在距离重心同等的条件下,刚体会向张量值大的一遍倾斜。

msaa属性:刚体质量

基本语法

public float mass{	get;	set;}

功能说明
此属性用于设置或返回刚体的质量。一般刚体质量取值在0.1附近模拟最佳,最大不要超过10,否则容易出现模拟不稳定的情况
mass的主要作用是在物体发生碰撞时计算碰撞后物体的速度。当一个物体分别去撞击mass大的物体和mass小的物体时,根据动量守恒定律,较重的物体被撞后的速度要慢于较轻的物体

velocity属性:刚体速度

基本语法

public Vector3 velocity{ get; set; }

功能说明
此属性用于设置或返回刚体的速度值
1、在脚本中无论是给刚体赋予一个Vector3类型的速度向量v,还是获取当前刚体的速度v,v的方向都是相对世界坐标系而言的。
2、velocity的单位是米每秒,而不是帧每秒,其中米是Unity中默认的长度单位。

Rigidbody类实例

在Rigidbody类中涉及的实例方法:AddExplosionForce方法、AddForceAtPosition方法、AddToque方法、ClosestPointOnBounds方法、GetPointVelocity方法、MovePosition方法、Sleep方法、SweepTest方法、SweepTestAll方法和WakeUp方法。

AddExplosionForce方法:模拟爆炸力

基本语法

1public void AddExplosionForce(float explosionForce ,Vector3 explosionPosition , float explosionRadius);
2public void AddExplosionForce(float explosionForce ,Vector3 explosionPosition ,float explosionRadius,float upwardsModifier);
3public void AddExplosionForce(float explosionForce ,Vector3 explosionPosition ,float explosionRadius,float upwardsModifier,ForceMode mode);
其中参数explosionForce为爆炸点施加的力的大小,参数explosionPosition为爆炸点坐标(相对世界坐标系),参数explosionRadius为爆炸作用力有效半径,参数upwardsModifier为爆炸力作用点在y轴方向上的偏移,参数mode为爆炸力的作用模式,默认为ForceMode.Force。

功能说明
此方法用于对刚体添加一个模拟爆炸效果的作用力。

AddForceAtPosition方法:增加刚体点作用力

基本语法

1public void AddForceAtPosition(Vector3 force ,Vector3 position);
2public void AddForceAtPosition(Vector3 force ,Vector3 position ,ForceMode mode);

功能说明
从方法用于为参数position点增加一个力force,其参考坐标系为世界坐标系,作用方式为mode,默认值为ForceMode.Force。

1、当力的作用点在刚体重心时,刚体不发生旋转
2、当力的作用点不在刚体重心时,由于作用点的扭矩会使刚体发生旋转,但是,当作用力的方向经过刚体的重心坐标时不发生旋转。

AddTorque方法:刚体添加扭矩

基本语法

1public void AddTorque(Vector3 torque);
2public void AddTorque(Vector3 torque ,ForceMode mode);
3public void AddTorque(float x , float y ,float z);
4public void AddTorque(float x , float y ,float z,ForceMode mode);
其中参数torque为扭矩向量,参数mode为力的作用方式。

功能说明
此方法用于给刚体添加一个扭矩torque,扭矩的作用力方式由mode决定,默认为ForceMode.Force。

ClosestPointOnBounds方法:爆炸点到刚体最短距离

基本语法

public Vector3 ClosestPointOnBounds(Vector3 position);
其中参数position为爆炸点坐标

功能说明
此方法用于求爆炸点到刚体Collider表面的作用点。

GetPointVelocity方法:刚体点速度

基本语法

public Vector3 GetPointVelocity(Vector3 worldPoint);
其中参数worldPoint为世界坐标系中的点坐标

功能说明
此方法用于获取世界坐标系中worldPoint点在刚体局部坐标系中的速度。

GetRelativePointVelocity方法:刚体点相对速度

基本语法

public Vector3 GetRelativePointVelocity(Vector3 relativePoint);
其中参数relativePoint为刚体自身坐标系中的点坐标。

功能说明
此方法用于获取刚体自身坐标系中relativePoint点的速度,速度的计算会受刚体角速度的影响。

MovePosition方法:刚体位置移动

基本语法

public void MovePosition(Vector3 position);
其中参数position为刚体组件要移动到的位置坐标

功能说明
此方法用于对刚体的位置进行移动,通常用在刚体失去动力学模拟的情况下,即isKinematic为true时。

Sleep方法:刚体休眠

基本语法

public void Sleep()

功能说明
此方法可使刚体进行休眠状态,且至少休眠一帧

SweepTest方法:检测碰撞器

基本语法

1public bool SweepTest(Vector3 direction ,out RaycastHit hitInfo);
2public bool SweepTest(Vector3 direction ,out RaycastHit hitInfo ,float distance);

功能说明
此方法用于检测在刚体的direction方向是否有碰撞器对象,且对象的有效探测距离不大于distance。

SweepTestAll方法:探测碰测器

基本语法

public RaycastHit[] SweepTestAll(Vector3 direction);
public RaycastHit[] SweepTestAll(Vector3 direction ,float distance);
其中参数direction为探测方向,参数distance为有效探测距离

功能说明
此方法用于探测刚体的direction放心的distance距离内是否含有碰撞器,并返回所有探测到的物体的RaycastHit。

WakeUp方法:唤醒刚体

基本语法

public void WakeUp();

功能说明
此方法用于将刚体从休眠状态唤醒。
1、其他刚体与休眠中的刚体发生了碰撞;
2、使用关节连接的其他刚体发生了移动;
3、刚体的属性发生了改变;
4、给休眠中的刚体施加了一个外力

关于useGravity、isKinematic和velocity的使用

功能区别
1、useGravity属性用来确定刚体是否接受重力加速度的感应
2、isKinematic属性用来确定刚体是否接受动力学模拟,此影响不仅包括重力感应,还包括速度、阻力、质量等的物理模拟

关于Rigidbody中mass、density及scale之间的关系

在Rigidbody类中,mass、density和scale这3个API之间有着较为紧密的联系
1、若在脚本中未使用Rigidbody.SetDensity(density :float)方法设置刚体的密度,则刚体的质量mass值为在Inspector面板中Mass的大小,此时mass与Transform中的scale大小无关。
2、若在脚本中使用Rigidbody.SetDensity(density : float)方法设置了刚体的密度。
3、若在脚本中既设置了密度Density,又设置了质量mass,则刚体实际质量要看脚本中代码执行的
4、当两物体发生碰撞时遵循动量守护定理

关于作用力方式ForceMode的功能

ForceMode为枚举类型,用来控制力的作用方式
1、ForceMode.Force:默认方式,使用刚体的质量计算,以每帧间隔时间为单位计算动量。
2、ForceMode.Acceleration:在此中作用方式下,会忽略刚体的实际质量而采用默认值1.0f,时间间隔以系统帧频间隔计算
3、ForceMode.Impulse:此方式采用瞬间力作用方式,即把t的值默认为1,不再采用系统的帧频间隔
4、ForceMode.VelocityChange:此种作用方式下将忽略刚体的实际质量,采用默认质量1.0,同时也忽略系统的实际帧频间隔,采用默认间隔1.0

关于OnTriggerXXX和OnCollisionXXX的功能

OnTriggerXXX指的是OnTriggerEnter、OnTriggerExit和OnTriggerStay这3个消息。
它们都是用来处理不同物体在不同状态下消息的反馈,两个物体A与B,当A物体向B物体移动,B物体处于静止。
1、若A无Rigidbody组件,则B中无论含有Rigidbody组件,A物体都将穿越B物体,并且A和B脚本中的OnTrigger方法和OnCollision方法都不会被调用。

2、若A中含有Rigidbody组件,则B中无论是否还有Rigidbody组件,只要B中含有Collider类组件,A和B脚本中的OnTrigger方法或OnCollision方法就会被调用,到底调用哪一种静态方法要看A和B物体中Collider类组件中的IsTrigger是否被选中。

3、若A中含有Rigidbody组件,B中含有Collider类组件,当A和B物体中Collider类组件的IsTrigger都没有选中时,A和B脚本中OnCollision类的方法就会被调用,而OnTrigger静态方法则不会被调用。

4、若A中含有Rigidbody组件,B中含有Collider类组件,当A和B物体中的Collider类组件的IsTrigger至少有一个被选中时,A和B物体脚本中的OnTrigger静态方法会被调用,而OnCollision静态方法不会被调用

5、当符合OnCollision静态方法激活条件时,A不可穿越B物体,A会与B发生弹性碰撞

6、当符号OnTrigger静态方法激活条件时,A会穿越B物体,即A、B物体的运动行为互不影响,只是反馈了两个物体的接触状态:未接触、开始接触、接触中、互相分离。

7、OnTriggerEnter或OnCollisionEnter方法会在A刚开始接触B时被调用,且在A、B分离前只会调用一次

8、OnTriggerStay或OnCollisionStay方法会在A和B保持接触状态时被调用,且在A、B分离前每帧都会被调用

9、OnTriggerExit或OnCollisionExit方法会在A、B刚分离时被调用,且只被调用一次。

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

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

相关文章

【YOLO v5 v7 v8 v9小目标改进】新CNN架构 InceptionNeXt:怎么让大卷积核既好用又快

新CNN架构 InceptionNeXt:怎么让大卷积核既好用又快 提出背景问题: 如何提高大核心卷积的效率,同时保持或提升模型性能? 改进思路MetaNeXtInception深度卷积InceptionNeXt 小目标涨点YOLO v5 魔改YOLO v7 魔改YOLO v8 魔改YOLO v9 魔改 提出背…

进程之守护进程

目录 1、Linux进程的类型: 2、守护进程的特点: 3、守护进程的创建步骤 1、Linux进程的类型:</

RUUFFY、由利、希亦内衣洗衣机怎么样?测评对比谁更好?

我们传统的洗衣机其实并不可以用来清洗内衣裤&#xff0c;以及袜子这类小型的衣物&#xff0c;容易出现细菌的交叉感染&#xff0c;而且传统洗衣机单单清洗这些小件衣物并不划算&#xff0c;需要很多的水量&#xff0c;有些全自动的大型洗衣机需要更多的衣物同时清洗才能正常工…

110. 平衡二叉树【简单】

110. 平衡二叉树【简单】 题目描述&#xff1a; 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;r…

利用MiniZinc进行约束建模——以着色问题为例

文章目录 1. 什么是 MiniZinc ?2. 安装方法(Windows)3. 求解着色问题3.1 问题描述3.2 建立 MiniZinc 模型3.3 运行求解1. 什么是 MiniZinc ? 约束满足性问题(Constraint Satisfaction Problem,CSP)判断在有限变量与有限约束条件下,是否存在满足所有约束条件的变量赋值…

chmod+x 命令

将linux上旧的four_diag.sh文件删除&#xff0c;从本地重新上传后&#xff0c;不能执行&#xff0c;需要执行命令&#xff1a; chmod x four_diag.sh 才行 chmod x 的意思就是给执行权限 命令格式&#xff1a; chmod x 文件名 LINUX下不同的文件类型有不同的颜色&#xff1…

IDEA修改git提交者的信息

git提交后&#xff0c;idea会记录下提交人的信息&#xff0c;如果不修改提交人信息的话&#xff0c;会有一个默认值。避免每次提交都要填提交人信息&#xff0c;直接设置成自己想要的默认值&#xff0c;该怎么操作&#xff1f; 提交的时候在这里修改提交人信息 避免每次都去设置…

和鲸科技受邀参与湖南省气象信息中心开展人工智能研究型业务支撑平台学术交流

为推进湖南省机器学习统一平台建设&#xff0c;2 月 29 日&#xff0c;湖南省气象信息中心开展学术讲座活动&#xff0c;活动由中心副主任冯冼主持&#xff0c;中心业务骨干、湖南省气象台、湖南分院等技术人员参加。 本次讲座邀请上海和今信息科技有限公司&#xff08;简称“…

【企业动态】欢迎法国客户来访东胜物联,深入探讨智能化合作

本周&#xff0c;来自法国的客户莅临我司工厂进行实地参观考察。客户是一家历史悠久的设备供应商&#xff0c;其产品涵盖冷链、餐饮、农业等多个行业应用领域&#xff0c;正致力于从传统设备向智能设备转型&#xff0c;希望将设备接入物联网。在此次访问中&#xff0c;他们参观…

fastapi_mail发送邮件,邮件附件文件重命名

当fastapi_mail发送邮件的时候&#xff0c;想对附件的名称进行重命名 以下是fastapi_mail下的schemas.py的源码 import os from enum import Enum from mimetypes import MimeTypes from typing import Dict, List, Optional, Unionfrom pydantic import BaseModel, EmailStr,…

HarmonyOS | UI开发 (一) | 基础组件(Text/Span,TextInput/TextArea,Button,Image)

文章目录 前言一、基础组件1.1.Text的概述1.2.Text的创建方式- string字符串创建- 引用Resource资源 1.3.Text自定义文本样式- 通过textAlign属性设置文本对齐样式- 通过textOverflow属性控制文本超长处理- 通过lineHeight属性设置文本行高- 通过copyOption属性设置文本是否可复…

python大数据分析游戏行业中的 Apache Kafka:用例 + 架构!

python大数据分析游戏行业中的 Apache Kafka&#xff1a;用例 架构&#xff01; 这篇博文探讨了使用 Apache Kafka 的事件流如何提供可扩展、可靠且高效的基础设施&#xff0c;让游戏玩家开心并让游戏公司取得成功。讨论了游戏行业中的各种用例和架构&#xff0c;包括在线和移…

C++初阶篇----类与对象中卷

目录 引言1. 构造函数1.1概念1.2 特性 2. 析构函数2.1 概念2.2 特性 3. 拷贝构造函数3.1 概念3.2特征 4. 赋值运算符重载4.1 运算符重载4.2 赋值运算符重载4.3 前置和后置重载 5.日期类的实现6.const成员7.取地址及const取地址操作符重载 引言 当一个类既没有成员变量又没有成…

汉诺塔问题(C语言)

一&#xff1a;问题 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从…

wordpress相册gallery的几种不同调用方式

常规方式调用 if ( $gallery get_post_gallery( get_the_ID() ) ) :echo $gallery; endif; 调用循环中的所有图片并可以自字义样式 if ( $gallery get_post_gallery( get_the_ID(), false ) ) :foreach ( $gallery[src] AS $src ) {echo <img src" . $src . "…

QVector和QString互相转换

我的画图项目需要读写自定义虚线样式 {...comboBox_penStyle new QComboBox;QStringList SL_penStyle;SL_penStyle << "______" << "----------" << ".........." << "-.-.-.-.-." << "-..-..-..…

【OJ】日期差值与日期累加

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. KY111 日期差值1.1 题目分析1.2 代码 2. KY258 日期累加2.1 题目分析2.2 代码 1. KY111 日期差值 1.1 题目分析 日期之间比较可能会出现给的两个年月日都不相同&#xff0c;这个就不好作差&#xff0c;每个月给的…

LeetCode每日一题 二叉树的最大深度(二叉树)

题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;root [1,nul…

VUE:key属性的作用

在 Vue.js 中&#xff0c;key属性的主要作用是帮助 Vue 在进行 DOM 更新时&#xff0c;能够更准确地识别哪些节点可以复用。 当key值发生变化时&#xff0c;Vue 会执行以下步骤&#xff1a; 1.查找旧节点&#xff1a;Vue 会查找虚拟 DOM 中具有旧key值的节点。 2.匹配新节点…

Kubernetes编排系统:实现云原生应用的自动化部署与管理

随着云计算和容器技术的日益普及,如何高效、自动化地部署和管理应用成为了企业面临的重要挑战。Kubernetes,作为一个开源的容器编排系统,凭借其强大的功能、灵活性和可扩展性,逐渐成为了业界的宠儿。本文将首先简要介绍Kubernetes编排系统的基本概念,然后详细阐述其核心组…