草庐IT

Unity物理组件之刚体Rigidbody

@夜魅 2023-04-11 原文

一、刚体组件简介

1、刚体简介

刚体:Rigidbody,属于物理类组件

作用:添加了刚体组件的游戏物体,可以在物体系统的控制下来运动,刚体可接受外力和扭矩力用来保证游戏对象像在真实世界中那样进行运动。任何游戏对象只有添加了刚体组件才能受到重力的影响,通过脚本为游戏对象添加的作用力以及通过NVIDIA物体引擎与其他的游戏对象发生互动的运算都需要游戏对象添加了刚体组件。没有刚体(RigidBody)组件,游戏对象之间可以相互穿透,不会产生碰撞。

2、给物体添加刚体组件

选中游戏物体-->菜单Component-->Physics-->Rigidbody

二、刚体组件属性

Mass: 质量

定义:该项用于设置游戏对象的质量,也就是重量。质量单位是KG(建议在同一个游戏场景中,游戏对象之间的质量差值不要大于100倍)

Drag: 阻力

定义:当对象受力运动时受到的空气阻力。0表示没有空气阻力,阻力极大时游戏对象会立即停止运动

Angular Drag: 角阻力

定义:当对象受扭矩力旋转时受到的空气阻力。0表示没有空气阻力,阻力极大时游戏对象会立即停止运动

Use Gravity: 使用重力

定义:若开启此项,游戏对象会受到重力的影响

Is Kinematic: 是否开启动力学

定义:若开启此项,游戏对象将不再受物体引擎的影响从而只能通过Transform(几何变换组件)属性来对其操作。该方式适用于模拟平台的移动或带有铰链关节链接刚体的动画

Interpolate: 插值

定义:该项用于控制刚体运动的抖动情况,有3项可供选择。

None:没有插值

Interpolate:内插值。基于前一帧的Transform来平滑此次的Transform

Extrapolate:外插值。基于下一帧的Transform来平滑此次的Transform

Collision Detection: 碰撞检测

定义:该属性用于控制避免高速运动的游戏对象穿过其他的对象而未发生碰撞,有3项可供选择。

Discrete: 离散碰撞检测。该模式与场景中其他的所有碰撞体进行碰撞检测。该项为默认值。

Continuous:连续碰撞检测。该模式用于检测与动态碰撞体(带有Rigidbody)的碰撞,使用连续碰撞检测模式来检测与网络碰撞体的(不带Rigidbody)碰撞。其他的刚体会采用离散碰撞模式。此模式适用于那些需要与采用连续动态碰撞检测的对象相碰撞的对象。这对物理性能会有很大的影响,如果不需要对快速运动的对象进行碰撞检测,就使用离散碰撞检测模式。

Continuous Dynamic:连续动态碰撞检测模式。该模式用于检测与采用连续碰撞模式或连续动态碰撞模式对象的碰撞,也可用于检测没有Rigidbody的静态网格碰撞体。对于与之碰撞的其他对象可采用离散碰撞检测,动态连续碰撞检测模式也可用于检测快速运动的游戏对象。

Constrains: 约束

定义:该项用于控制对于刚体运动的约束。

Freeze Position:冻结位置。刚体对象在世界坐标系中的X、Y、Z轴方向上(勾选状态)的移动将无效。

Freeze Rotation:冻结旋转。刚体对象在世界坐标系中的X、Y、Z轴方向上(勾选状态)的旋转将无效。

 三、使用刚体移动物体

1.相关方法

Rigidbody.MovePosition(Vector3):使用刚体移动物体的位置。

使用刚体移动物体,物体是根据世界坐标系的方向移动的。 使用刚体移动物体,物体会触发物理相关的事件。

2.参数

MovePosition 中的 Vector3 要使用“当前位置”+ 方向 的方式。

Transform.Position:属性 当前物体的位置。

3.特点

使用刚体移动物体,特点如下:

①会于场景中的模型物体发生碰撞;

②会受重力影响(到达场景边缘外,会下落)

四、应用

1)创建游戏对象

创建 Cube 和 Plane 游戏对象,如下:

2)给 Cube 游戏对象添加刚体组件

选中 Cube 游戏对象,点击 Add Component 按钮,搜索 Rigidbody,添加刚体组件。

3)添加 RigidbodyMove脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RigidbodyMove : MonoBehaviour
{
	private Rigidbody m_rigidbody;
	private Transform m_transform;

	//Use this for initialization
	void Start(){
		m_rigidbody = gameObject.GetComponent<Rigidbody>();
		m_transform = gameObject.GetComponent<Transform>();

	}
	
	//Update is called once per frame
	void Update()
	{
		if (Input.GetKey(KeyCode.W))
		{
			m_rigidbody.MovePosition(m_transform.position + Vector3.forward * 0.2f);
		}

		if (Input.GetKey(KeyCode.S))
		{
			m_rigidbody.MovePosition(m_transform.position + Vector3.back * 0.2f);
		}

		if (Input.GetKey(KeyCode.A))
		{
			m_rigidbody.MovePosition(m_transform.position + Vector3.left * 0.2f);
		}

		if (Input.GetKey(KeyCode.D))
		{
			m_rigidbody.MovePosition(m_transform.position + Vector3.right * 0.2f);
		}

	}
  
}

有关Unity物理组件之刚体Rigidbody的更多相关文章

  1. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  2. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  3. unity---接入Admob - 2

    目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里​编辑 3.解析依赖到项目中

  4. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  5. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板 - 2

    写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c

  6. 三分钟集成 TapTap 防沉迷 SDK(Unity 版) - 2

    三分钟集成Tap防沉迷SDK(Unity版)一、SDK介绍基于国家对上线所有游戏必须增加防沉迷功能的政策下,TapTap推出防沉迷SDK,供游戏开发者进行接入;允许未成年用户在周五、六、日以及法定节假日晚上8:00-9:00进行游戏,防沉谜时间段进入游戏会弹窗进行提示!开发环境要求:Unity2019.4或更高版本iOS10或更高版本Android5.0(APIlevel21)或更高版本🔗Unity集成Demo参考链接🔗UnityTapSDK功能体验APK下载链接二、集成前准备1.创建应用进入开发者后台,按照提示开始创建应用;2.开通服务在使用TDS实名认证和防沉迷服务之前,需要在上面创建的应

  7. 【Unity大气散射】GAMES104:3A中如何实现大气散射 - 2

    写在前面前两天学习并整理的大气散射基础知识:【Unity大气渲染】关于单次大气散射的理论知识,收获了很多,但不得不承认的是,这其实已经是最早的、90年代的非常古老的方法了,后来也出现了一些优化性的计算思路和方法。因此,我打算先不急着跟各种教程在Unity中实现大气散射,而是再花时间来看看最近的游戏是如何去实现大气渲染的:06.游戏中地形大气和云的渲染(下)|GAMES104-现代游戏引擎:从入门到实践接下来就跟着GAMES104讲地形大气和云渲染的部分学习并做简单的记录,涉及到之前没提到的Mie散射也只选择直接截图PPT的方式记录啦!毕竟对于做作品来说,之后实现出来才是重要的~当然,May佬的

  8. ruby - 使用 Ruby 编写 Unity 游戏 - 2

    所以我看到unity支持c#、JS和Boo。我可以学习其中一个,但我想制作一个“编译器”或类似的东西,让我可以编写ruby​​代码并输出JS代码或制作一个可以被Unity编译器读取的层。这有可能吗?我愿意在这方面投入很多时间并且有相当多的经验。 最佳答案 如果您的问题实际上是“我如何将Ruby编译为JavaScript”,那么这更容易回答:Opal:RubytoJavaScriptcompiler但是,学习其中一种受支持的语言会更好。当运行的是用另一种语言解释的代码时,很难调试“您的”代码。

  9. Unity常用文件夹 - 2

    1.Scenes游戏场景文件夹用于放置unity的场景文件 2.Plugins插件文件夹用于放置unity的依赖文件,例如dll 3.Scripts脚本文件夹用于放置unity的c#脚本文件 4.Resources游戏资源文件夹用于放置unity的各种游戏资源,比如images,prefabs,同时只有放到Resources文件夹的游戏资源才能使用Resource.load(资源路径不加后缀)加载到游戏内存中进行使用 5.EditorUnity编辑器扩展脚本文件夹usingUnityEditor;这个名称空间就是Unity编辑器的名称空间这个名称空间提供了扩展Unity编辑器的各种类 【你所有

  10. Unity数据可视化图表插件XCharts3.0发布 - 2

    Unity数据可视化图表插件XCharts3.0发布历时8个多月,业余时间,断断续续,XCharts3.0总算发布了。如果要打个满意度,我给3.0版本来个80分。对于代码框架结构设计的调整改动,基本符合预期,甚是满意。相比之前的1.0和2.0版本,我认为3.0才是一个拿得出手给广大开发者使用的版本。1.0发布的时候,很兴奋,从0.1到1.0,也磨了一年,真的等不及想给大家试用了,还特地写过一篇文章以示庆祝。那个时候,1.0虽然还还不够完善,功能也不够丰富,但它是XCharts的开始,没有1.0,也就没有后面的2.0和3.0。后面的2.0发布,做了很多改进和优化,随着版本迭代,慢慢的发现有不少硬

随机推荐