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 国际许可协议进行许可。

时间: 2024-07-30 22:18:57

UNITY物理系统简介的相关文章

UNITY物理系统[Colliders]

UNITY_Colliders 照常推荐Unity官方文档 本篇文章是介绍在游戏开发过程中,常用的物理组件(Box Collider,Rigidbody等)介绍一些基本的作用,和一些需要规避的地方. Box Collider Box Collider形状类似于箱子,所以也经常使用在地板,墙壁,坡道上:也是组合碰撞器用的最多的一种. 属性 功能 Is Trigger 如果启用,此碰撞器用于触发事件,并被物理引擎忽略. Material 物理材料,确定与他们互动的方式 Center 碰撞器在物体空间

UNITY光照系统简介

UNITY_光照系统 光照系统又称照明系统: 从字面意思理解,光照系统的作用就是给我们的场景带来光源,用于照亮场景.一个五彩缤纷的游戏场景肯定要比一个漆黑一片的游戏场景更具吸引力,想让游戏场景变的更漂亮,光照系统是必不可缺的. 在 Unity5.x 中光照系统主要组成部分有两个: 灯光组件(4 个灯光组件,2 个特殊功能组件)以及 Lighting 面板. 两种类型: 实时光照:PC,主机端运行,照明效果好,但是消耗资源较大. 烘焙光照:移动端运行,照明效果也不错,消耗资源较少. 光照系统之实时

实时计算,流数据处理系统简介与简单分析

转自:http://www.csdn.net/article/2014-06-12/2820196-Storm 摘要:实时计算一般都是针对海量数据进行的,一般要求为秒级.实时计算主要分为两块:数据的实时入库.数据的实时计算.今天这篇文章详细介绍了实时计算,流数据处理系统简介与简单分析. 编者按:互联网领域的实时计算一般都是针对海量数据进行的,除了像非实时计算的需求(如计算结果准确)以外,实时计算最重要的一个需求是能够实时响应计算结果,一般要求为秒级.实时计算的今天,业界都没有一个准确的定义,什么

全面理解 Unity UI 系统

[狗刨学习网] 随着 Unity 4.6 发布,新 UI 系统终于与大家见面了. RectTransform Unity UI 系统使用 RectTransform 实现基本的布局和层次控制.RectTransform 继承于 Transform,所以 Transform 的所有特征 RectTransform 同样拥有.在 Transform 基础上,RectTransform 增加了 轴心(pivot).锚点(实际上是用 anchorMin.anchorMax 两个点定义的矩形区域).和 尺

如何做物理系统的同步

1.如果不需要防作弊,那么就信任所有的客户端数据,这样直接在客户端机器上运行物理系统即可,不需要服务器参与计算,直接就节省了服务器的负载.这样做的方法是,挑选一个客户端作为主机或者找一种方式来解决玩家之间运算不一致的情况.如果需要物理运算是基于多个玩家机器,那么就需要多对多的同步,涉及到更多的通信量. 2.如果需要服务器去做真实的校验,那么肯定就需要服务器去做真实的物理运算.最简单的方式是在服务器端跑一个unity客户端,服务器依赖这个客户端的运算结果.要不就在服务器端跑一个物理系统来做真实运算

Linux系统简介&分区&基础命令(ADMIN01-1)

讲师牛犇课程介绍:ADMIN 管理员技术7天Engineer 工程师技术6天Services 系统&服务进阶7天 ADMIN课程安排:1.Linux系统简介 安装RHEL7系统.RHEL7基本操作2.教学环境介绍.命令行基础.目录和文件管理3.配置网络.软件包管理.文本/文件查找4.NTP时间同步.tar备份与恢复.管理用户和组.cron计划任务5.权限和归属.使用LDAP认证.家目录漫游6.分区规划及使用.LVM逻辑卷.管理交换空间7.综合串讲.综合练习 一.基础知识 UNIX诞生时间1970

Unity 物理引擎实现匀速圆周运动

摘要 本文主要讲述如何利用Unity物理引擎实现匀速圆周运动. 前言 首先,我们可以利用Unity API,Transform.RotateAround来实现匀速圆周运动.但是这个实现,我觉得不过瘾,因为你只是了解一个API,并没有学到任何其他的知识.接下讲一点有意思东西. 物理知识 1.定义: 质点沿圆周运动,如果在任意相等的时间里通过的圆弧长度都相等,这种运动就叫做"匀速圆周运动",亦称"匀速率圆周运动".因为物体作圆周运动时速率不变,但速度方向随时发生变化.所

Android Touch系统简介(二):实例详解onInterceptTouchEvent与onTouchEvent的调用过程

上一篇文章主要讲述了Android的TouchEvent的分发过程,其中有两个重要的函数:onInterceptTouchEvent和onTouchEvent,这两个函数可被重装以完成特定的逻辑.onInterceptTouchEvent的定义为于ViewGroup中,默认返回值为false,表示不拦截TouchEvent.onTouchEvent的定义位于View中,当ViewGroup要调用onTouchEvent时,会利用super.onTouchEvent.ViewGroup调用onTo

【Unity编程】Unity动画系统(一)

Unity动画系统 Unity动画系统,也称为"Mecanim",提供了以下功能: 简单的工作流程,设置动画的所有元素,包括对象,角色和属性. 支持导入外部创建的动画片段和使用内置动画编辑器制作的动画片段. 人型动画重新定位,动画角色的运动控制可以被所有的角色模型共享,即角色的外观(SkinedMesh)和运动(Animator)是分离的,它们互相组合之后形成最终的动画. 用于编辑动画状态的的简化工作流程,即动画控制器. 方便预览动画片段,以及片段之间的插值过渡. 这使得动画师可以独立