UNITY物理系统简介

UNITY_物理系统简单介绍

要有说服力的物理行为,游戏中的物体必须正确地加速,受到碰撞,引力和其他力量的影响。
Unity中实际上有两个独立的物理引擎:一个用于3D物理,另一个用于2D物理。两个引擎的主要概念是相同的(除了3D中的额外维度),但是它们是使用不同的组件实现的。例如,Rigidbody和Rigidbody2D。
笔者推荐阅读UNITY官方手册

物理概述

Rigidbody(刚体)

概述

在使用Unity中如果想要GO拥有重力,可以发生碰撞反馈等,那就必不可少需要添加一个组件Rigidbody。由于该组件代替了它本身的运动,所有不应该通过Transform来改变位置,旋转;相反应该使用forces来推动GO并让物理引擎计算结果。
Rigidbody组件拥有一个Is Kinematic的属性,该属性可以将其从引擎的控制中移除,从而可以用脚本控制GO的运动。注意:尽量不要使用脚本控制该属性的开关。

Sleeping

当刚体的速度远低于一个设定的最小线性速度时,物理引擎就会认为它陷入睡眠状态。此时,GO不会再次移动,直到它收到一个讯号。这种模式意味着处理器不会花费时间更新刚体状态。
可以使用WakeUp函数来唤醒GameObject。

Colliders(碰撞器)

Colliders组件为物理碰撞定义了一个物体的形状。它不需要完全符合GO的网格形状;事实上,大致相似在游戏中更加有效率。
UNITY中最简单的几种碰撞器: Box Collider, Sphere Collider 和Capsule Collider;2D碰撞器:Collider 2D 和 Circle Collider 2D。
有时候需要以组合的形式附加到物体上,这种形式可以保持较低的处理器开销,也增加一定的灵活性;但它们应该只有一个Rigidbody组件在父物体上。
那组合的碰撞器也不能满足我们的需求,这就需要 Mesh Collider;它可以精确的匹配对象的网格形状。但不要经常使用,它对性能的要求挺高。需要碰撞检测的时候可以把它设置为Convex,它一般被使用在几何图形上。
物体可以被单独添加一个碰撞器(可以没有刚体),不过一般这个物体是静态的。

Physics materials(物理材质)

物体之间相互碰撞的时候,物体表面会模拟它身上材质的属性,比如冰块,篮球等;物体的摩擦系数,弹性系数可以用物理材质来配置。

Triggers(触发器)

通过脚本可以通过OnCollisionEnter启动检测什么时候发生的碰撞,也可以通过修改碰撞器上Is Trigger,来启动是否需要碰撞检测。启动之后会允许碰撞物体穿过,穿过的时候将调用物体脚本的OnTriggerEnter函数。

碰撞函数

Is Trigger = false
OnCollisionEnter  //碰撞第一次调用  
OnCollisionStay   //保持碰撞中调用  
OnColliosionExit  //退出碰撞时调用

Is Trigger = true
OnTriggerEnter  //进入触发器
OnTriggerStay   //停留触发器
OnTriggerExit   //离开触发器

碰撞相互作用

静态碰撞(没有刚体)

静态的物体且拥有碰撞器,没有刚体;不要轻易在游戏的过程中使用它们,会给你带来意想不到的效果(占用额外性能)。

刚体碰撞

有碰撞器和刚体的物体,可以对来自脚本的添加力做出反应;最常见。

运动学刚体碰撞

有碰撞器和刚体组件的物体,开启了IsKinematic;可以通过Transform来变换。它应该用于偶尔使用的物体,比如滑动门。
也可以实时切换IsKinematic属性在正常和运动行为之间切换;比如人物,一般使用动画来控制它,这时是要使用运动学的;而发生爆炸的时候,被炸碎的四肢,可以切换为非运动学来模拟出更好的效果。

Joints

可以使用各种Joint组件将两个物体进行链接,比如一个物体围绕另一个静态物体旋转。还可以做类似弹簧,绳子的效果。
特殊效果:
当施加的力大于这个值的时,可以设置一个关节断开。
关节之间可以产生驱动力,使其自动运动。

Character Controllers(角色控制器)

为第一人称或第三人称游戏中的角色做基于碰撞的物理特性。不能穿过静态碰撞物体;可以利用它设置物体的速度和方向等。

Physics Debug Visualization(可视化物理调试工具)

可视化物理调试允许您快速检查场景中的碰撞几何,并分析常见的物理场景。它提供了哪些GameObjects应该和不应该相互碰撞的可视化。当场景中有许多Colliders,或者Render和Collision Meshes不同步时,这是特别有用的。

打开方式:
Windows -->  Physics Visualization

属性 功能
Reset 单击此按钮将“物理调试”窗口重置为默认设置。
Hide Layers 使用下拉菜单确定是否从所选图层显示Colliders
Hide Static Colliders 选中此复选框以从可视化文件中移除静态碰撞图(不带有刚体组件的碰撞图)。
Hide Triggers 选中此复选框以从可视化文件中删除也是触发器的Colliders。
Hide Rigidbodies 选中此复选框以从可视化文件中移除Rigidbody组件。
Hide Kinematic Bodies 选中此复选框可从可视化文件中删除具有运动学刚体组件(不受物理引擎控制)的碰撞体。
Hide Sleeping Bodies 选中此复选框可从可视化文件中删除带有Sleeping Rigidbody组件(目前不与物理引擎相关)的Colliders 。
Collider Types 使用这些选项从物理可视化中移除特定的碰撞器类型。
Hide BoxColliders 选中此复选框可从可视化文件中删除Box Colliders。
Hide SphereColliders 选中此复选框可从可视化中删除“ Sphere Colliders ”。
Hide CapsuleColliders 选中此复选框可从可视化文件中移除Capsule Colliders。
Hide MeshColliders (convex) 选中此复选框可从可视化中删除凸面 网格碰撞器。
Hide MeshColliders (concave) 选中此复选框可从可视化中删除凹面 网格碰撞体。
Hide TerrainColliders 选中此复选框可从可视化文件中删除Terrain Colliders。
Hide None 单击隐藏无清除所有过滤标准并显示可视化中的所有对撞机类型。
Hide All 点击全部隐藏以启用所有过滤器,并从可视化文件中删除所有的碰撞器类型。
Colors 使用这些设置来定义Unity如何在可视化中显示物理组件。
Static Colliders 使用此颜色选择器可以定义哪种颜色指示可视化中的静态碰撞体(不带刚体组分的碰撞体)。
Triggers 使用此颜色选择器可以定义哪种颜色表示可视化中的“Trigger”的“Collision”。
Rigidbodies 使用此颜色选择器来定义哪种颜色表示可视化中的Rigidbody组件
Kinematic Bodies 使用此颜色选择器来定义哪种颜色表示可视化中的运动学刚体组件(不受物理引擎控制)。
Sleeping Bodies 使用此颜色选择器来定义哪种颜色表示可视化中的Sleeping Rigidbody组件(目前不与物理引擎相关)。
Variation 使用滑块设置0到1之间的值。这将定义您选择的颜色与随机颜色的混合程度。使用它可以通过颜色在视觉上分离Colliders,并查看GameObjects的结构
Rendering 使用这些设置来定义Unity如何呈现和显示物理可视化。
Transparency 使用滑块将值设置为0和1.这将定义可视化中绘制的碰撞几何的透明度。
Force Overdraw 普通的渲染几何图形有时可以遮挡Colliders(例如,地板下面的Mesh Collider平面)。选中Force Overdraw复选框,使可视化渲染器在渲染几何图形上绘制Collider几何图形。
View Distance 使用此设置可视化的视图距离。
Terrain Tiles Max 使用此设置可视化中最大的地形图块数量

属性 功能
Collision Geometry 选中此复选框以启用碰撞几何可视化。
Mouse Select 选中此复选框以启用鼠标悬停突出显示和鼠标选择。如果在Scene中有大的GameObjects互相阻塞,这可能很有用。

总结

可视化物理调试工具主要用来分析和排除游戏中物理活动的故障。最推荐使用:

  • To see active Rigidbody components only:要仅查看处于活动状态并因此使用CPU / GPU资源的Rigidbody组件,请勾选隐藏静态碰撞物体并隐藏睡眠模式的物体。
  • To see non-convex Mesh Colliders only:非凸(基于三角形)的Mesh Collider在其附着的刚体组件非常接近与另一个刚体或碰撞物体碰撞时倾向于产生最多的接触。要只显示非凸网格物体碰撞体,将窗口设置为显示选定物体模式,点击Select None按钮,然后勾选Show MeshColliders(凹面)复选框。

知识共享许可协议
作品繁星陨辰采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

posted @ 2017-11-27 17:45  繁星陨辰  阅读(4703)  评论(0编辑  收藏  举报