草庐IT

Unity3D学习笔记——物理引擎

聪 ~smart 2023-08-14 原文

Unity3d学习笔记——物理引擎

一、物理引擎

1、刚体 Rigidbody

1>简介

  • 刚体可以为游戏对象赋予物理特性,是游戏对象在物理系统的控制下接受推力和扭力,从而实现现实世界的物理学现象。

2>属性


2、碰撞体 Collider

1>简介

  • 碰撞器是物理组件的一类,他与刚体一起促使碰撞发生
  • 碰撞体是简单形状,如方块、球形或者胶囊形,在 Unity 3D 中每当一个 GameObjects 被创建时,它会自动分配一个合适的碰撞器。一个立方体会得到一个 Box Collider(立方体碰撞体),一个球体会得到一个 Sphere Collider(球体碰撞体),一个胶囊体会得到一个 Capsule Collider(胶囊体碰撞体)等。

2>分类

  • 当游戏对象中的Rigidbody碰撞组件被添加后,其属性面板中会显示相应的属性设置选项,每种碰撞体的资源类型稍有不同。

3>属性

a) Box Collider 盒型碰撞体

  • Box Collider 是最基本的碰撞体,Box Collider 是一个立方体外形的基本碰撞体
  • 一般游戏对象往往具有 Box Collider 属性,如墙壁、门、墙以及平台等,也可以用于布娃娃的角色躯干或者汽车等交通工具的外壳,当然最适合用在盒子或是箱子上。

  • 如果 Is Trigger 选项被勾选,该对象一旦发生碰撞动作,则会产生 3 个碰撞信息并发送给脚本参数,分别是 OnTriggerEnter、OnTriggerExit、OnTriggerStay
  • Physics Material 定义了物理材质,包括冰、金属、塑料、木头等

b) Sphere Collider 球形碰撞体

  • Sphere Collider 是球体形状的碰撞体
  • Sphere Collider 是一个基于球体的基本碰撞体,Sphere Collider 的三维大小可以按同一比例调节,但不能单独调节某个坐标轴方向的大小
  • 当游戏对象的物理形状是球体时,则使用球体碰撞体,如落石、乒乓球等游戏对象

c) Capsule Collider 胶囊碰撞体

  • Capsule Collider 由一个圆柱体盒两个半球组合而成,Capsule Collider 的半径和高度都可以单独调节,可用在角色控制器或与其他不规则形状的碰撞结合来使用
  • 通常添加至 Character 或 NPC 等对象的碰撞属性

d) Mesh Collider 网格碰撞体

  • Mesh Collider(网格碰撞体)根据 Mesh 形状产生碰撞体,比起 Box Collider、Sphere Collider 和 Capsule Collider,Mesh Collider 更加精确,但会占用更多的系统资源
  • 专门用于复杂网格所生成的模型

e) Wheel Collider 车轮碰撞体

  • Wheel Collider(车轮碰撞体)是一种针对地面车辆的特殊碰撞体,自带碰撞侦测、轮胎物理现象和轮胎模型,专门用于处理轮胎

f) Terrain Collider 地形碰撞体

  • 地形碰撞体 (Terrain Collider) 实现了一个碰撞表面,其形状与其所附加到的 Terrain 对象相同

4>物理材质

  • 用于调整碰撞对象的摩擦力和反弹效果
  • 属性

5>碰撞条件

  • 在unity3D中要实现碰撞检测,需要满足以下条件:
    1、两个物体都具有碰撞组件
    2、至少有一个物体拥有Rigidbody组件
    3、Collider都不勾选Is Trigger

6>碰撞三阶段

  • MonoBehaviour.OnCollisionEnter:当进入碰撞时触发
  • MonoBehaviour.OnCollisionExit:当退出碰撞时时触发
  • MonoBehaviour.OnCollisionStay:当逗留在碰撞中触发

3、触发器 Trigger

1>简介

  • 在Unity3D中,检测碰撞发生的方式有两种
    1、利用碰撞体
    2、利用触发器
  • 在很多游戏引擎或工具中都有触发器,他被用来触发事件
  • 碰撞体与触发器的区别在于:
    1、碰撞体是触发器的载体
    2、触发器只是碰撞体的一个属性
  • 如果既想要检测到物理的接触,又不想让碰撞检测影响物体的移动,或者要检测一个物体是否经过控件中的某个区域,这是就可以用到触发器
  • 例如:碰撞体适合模拟汽车被撞飞、皮球掉在地上又反弹的效果,而触发器适合模拟人站在靠近门的位置时门自动打开的效果

2>触发条件

  • 在unity3D中要实现触发检测,需要满足以下条件:
    1、两个物体都具有Collider组件
    2、至少有一个物体拥有Rigidbody组件
    3、至少有一个物体的Collider组件勾选了Is Trigger

3>触发三阶段

  • MonoBehaviour.OnTriggerEnter:当进入触发器时触发
  • MonoBehaviour.OnTriggerExit:当退出触发器时触发
  • MonoBehaviour.OnTriggerStay:当逗留在触发器中触发

4、恒定力 Constant Force

1> 简介

  • 恒定力 (Constant Force) 可用于快速向刚体添加恒定力。如果不希望某些一次性对象以较大的速度开始而是逐渐加速(比如火箭),则很适合使用恒定力

2> 属性


  • 要使对象向上运动,请添加具有正 Y 值 Force 属性的恒定力。
  • 要使对象向前飞行,请添加具有正 Z 值 Relative Force 属性的恒定力。

5、角色控制器 Character Controller

1>简介

  • 在 Unity 3D 中,游戏开发者可以通过角色控制器来控制角色的移动。
  • 角色控制器允许游戏开发者在受制于碰撞的情况下发生移动,而不用处理刚体
  • 角色控制器不会受到力的影响,在游戏制作过程中,游戏开发者通常在任务模型上添加角色控制器组件进行模型的模拟运动

2> 属性


6、关节 Joint

1> 简介

  • 在 Unity 3D 中,物理引擎内置的关节组件能够使游戏对象模拟具有关节形式的连带运动
  • 关节对象可以添加至多个游戏对象中,添加了关节的游戏对象将通过关节连接在一起并具有连带的物理效果
  • 需要注意的是,关节组件的使用必须依赖刚体组件

2> 分类

  • Hinge Joint 铰链关节
    1、铰链关节 (Hinge Joint) 将两个刚体组合在一起,对刚体进行约束,让它们就像通过铰链连接一样移动。
    2、铰链关节非常适合用于门,但也可用于模拟链条、钟摆等对象
  • Fixed Joint 固定关节
    1、 固定关节 (Fixed Joint) 将对象的移动限制为依赖于另一个对象。这有点类似于管控 (Parenting),但是实现的方式是通过物理系统而不是变换 (Transform) 层级视图。
    2、使用固定关节的最佳场合是在希望对象可以轻松相互分离时,或者在没有管控情况下连接两个对象的移动。
  • Spring Joint 弹簧关节
    1、弹簧关节 (Spring Joint) 将两个刚体连接在一起,但允许两者之间的距离改变,就好像它们通过弹簧连接一样
  • Character Joint 角色关节
    1、角色关节 (Character Joint) 主要用于布娃娃效果。此类关节是延长的球窝关节,可在每个轴上限制该关节
  • Configurable Joint 可配置关节
    1、可配置关节 (Configurable Joint) 包含其他关节类型的所有功能,并提供更强大的角色移动控制。
    2、当您想要自定义布娃娃的运动并对角色强制实施某些姿势时,这种关节特别有用。
    3、使用可配置关节还可以将关节修改为您自行设计的高度专业化关节

3> 属性

a) Hinge Joint 铰链关节


b) Fixed Joint 固定关节


c) Spring Joint 弹簧关节


d) Character Joint 角色关节




  • 示例
  • 扭转轴(用辅助图标上的橙色椎体可视化)可在很大程度上控制上限和下限,允许按照度数指定上限和下限(限制角度是相对于开始位置进行测量的)。Low Twist Limit > Limit 中的值 –30 和 High Twist Limit > Limit 中的值 60 可将围绕扭转轴(橙色辅助图标)的旋转范围限制在 –30 度到 60 度之间。
  • Swing 1 Limit 可限制摆动轴的旋转范围(用辅助图标上的绿色轴可视化)。限制角度是对称的。因此,值 30 会将旋转限制在 –30 到 30 之间。
  • Swing 2 Limit 轴未显示在辅助图标上,但该轴垂直于其他两个轴(即辅助图标上用橙色可视化的扭转轴和辅助图标上用绿色可视化的 Swing 1 Limit 轴)。 角度是对称的,因此值 40 可将围绕该轴的旋转范围限制在 –40 度到 40 度之间。

e) Configurable Joint 可配置关节











有关Unity3D学习笔记——物理引擎的更多相关文章

  1. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  2. ruby-on-rails - Rails 中的推荐引擎 - 2

    我想为我的Rails网络应用程序提供推荐功能。特别是,我想向新注册的用户推荐他可能想要关注的其他用户。Rails中是否有用于此目的的引擎/gem?如果没有,我应该从哪里开始构建它?谢谢。 最佳答案 有Coletivogemhttps://github.com/diogenes/coletivo我试了一下。在MySQL上运行。Neo4jhttp://neo4j.org真的很容易实现一个“跟随谁”。事实上,大多数展示其能力的样本都涉及“跟随谁”。快速提示-只有在JRuby上运行时,Neo4j.rb才会很酷。如果不是-使用Neograph

  3. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  4. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  5. UE4 源码阅读:从引擎启动到Receive Begin Play - 2

    一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame

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

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

  7. 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

  8. unity---接入Admob - 2

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

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

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

  10. [Vuforia]二.3D物体识别 - 2

    之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网,在下载成UnityPackage类型让Unity能够使用这个扫描程序可以从高通官网上进行下载,是一个安卓程序。点到Tools往下滑,找到VuforiaObjectScanner下载后解压数据线连接手机,将apk文件拷入手机安装然后刚才解压文件中的Media文件夹打开,两个PDF图打印第一张A4-ObjectScanningTarget.pdf,主要是用来辅助扫描的。好了,接下来就是扫描三维物体。将瓶

随机推荐