unity物理引擎介绍 |
您所在的位置:网站首页 › unity3d功能介绍 › unity物理引擎介绍 |
早期的游戏并没有强调物理引擎的应用,当时无论是哪一种游戏,都是用极为简单的计算方式做出相应的运算就算完成物理表现,如超级玛丽和音速小子等游戏。 较为常见的物理处理是在跳跃之后再次落到地上,并没有特别注重物理表现效果。 当游戏进入三维时代后,物理表现效果的技术演变开始加速,三维呈现方式拓宽了游戏的种类与可能性,越来越好的物理表现效果需求在短时间内大幅提升。 如何制作出逼真的物理互动效果,而又不需要花费大量时间去撰写物理公式,是物理引擎重点要解决的问题。 在 Unity 3D 内的 Physics Engine 引擎设计中,使用硬件加速的物理处理器 PhysX 专门负责物理方面的运算。 因此,Unity 3D 的物理引擎速度较快,还可以减轻 CPU 的负担,现在很多游戏及开发引擎都选择 Physics Engine 来处理物理部分。 在 Unity 3D 中,物理引擎是游戏设计中最为重要的步骤,主要包含刚体、碰撞、物理材质以及关节运动等。 游戏中物理引擎的作用是模拟当有外力作用到对象上时对象间的相互影响,比如赛车游戏中,驾驶员驾驶赛车和墙体发生碰撞,进而出现被反弹的效果。 物理引擎在这里用来模拟真实的碰撞后效果。通过物理引擎,实现这些物体之间相互影响的效果是相当简单的。 1. Unity 3D刚体(Rigidbody)Unity 3D 中的 Rigidbody(刚体)可以为游戏对象赋予物理属性,使游戏对象在物理系统的控制下接受推力与扭力,从而实现现实世界中的运动效果。 在游戏制作过程中,只有为游戏对象添加了刚体组件,才能使其受到重力影响。 刚体是物理引擎中最基本的组件。在物理学中,刚体是一个理想模型。 通常把在外力作用下,物体的形状和大小(尺寸)保持不变,而且内部各部分相对位置保持恒定(没有形变)的理想物理模型称为刚体。 在一个物理引擎中,刚体是非常重要的组件,通过刚体组件可以给物体添加一些常见的物理属性,如质量、摩擦力、碰撞参数等。 通过这些属性可以模拟该物体在 3D 世界内的一切虚拟行为,当物体添加了刚体组件后,它将感应物理引擎中的一切物理效果。 Unity 3D 提供了多个实现接口,开发者可以通过更改这些参数来控制物体的各种物理状态。 刚体在各种物理状态影响下运动,刚体的属性包含 Mass(质量)、Drag(阻力)、Angular Drag(角阻力)、Use Gravity(是否使用重力)、Is Kinematic(是否受物理影响)、Collision Detection(碰撞检测)等。 刚体添加方法如下图所示,在 Unity 3D 中创建并选择一个游戏对象,执行菜单栏中的 Component→Physics→Rigidbody 命令为游戏对象添加刚体组件。 如下图所示,游戏对象一旦被赋予刚体属性后,其 Inspector 属性面板会显示相应的属性参数与功能选项,具体内容如下表所示。 在游戏制作过程中,游戏对象要根据游戏的需要进行物理属性的交互。 因此,Unity 3D 的物理组件为游戏开发者提供了碰撞体组件。碰撞体是物理组件的一类,它与刚体一起促使碰撞发生。 碰撞体是简单形状,如方块、球形或者胶囊形,在 Unity 3D 中每当一个 GameObjects 被创建时,它会自动分配一个合适的碰撞器。 一个立方体会得到一个 Box Collider(立方体碰撞体),一个球体会得到一个 Sphere Collider(球体碰撞体),一个胶囊体会得到一个 Capsule Collider(胶囊体碰撞体)等。 添加碰撞体在 Unity 3D 的物理组件使用过程中,碰撞体需要与刚体一起添加到游戏对象上才能触发碰撞。 值得注意的是,刚体一定要绑定在被碰撞的对象上才能产生碰撞效果,而碰撞体则不一定要绑定刚体。 碰撞体的添加方法是:首先选中游戏对象,执行菜单栏中的 Component→Physics 命令,此时可以为游戏对象添加不同类型的碰撞体,如下图所示。 Unity 3D 为游戏开发者提供了多种类型的碰撞体资源,如下图所示。当游戏对象中的 Rigidbody 碰撞体组件被添加后,其属性面板中会显示相应的属性设置选项,每种碰撞体的资源类型稍有不同,具体如下。 1) Box Collider Box Collider 是最基本的碰撞体,Box Collider 是一个立方体外形的基本碰撞体。 一般游戏对象往往具有 Box Collider 属性,如墙壁、门、墙以及平台等,也可以用于布娃娃的角色躯干或者汽车等交通工具的外壳,当然最适合用在盒子或是箱子上。 下图所示是 Box Collider,游戏对象一旦添加了 Box Collider 属性,则在 Inspector 面板中就会出现对应的 Box Collider 属性参数设置,具体参数如下表所示。 如果 Is Trigger 选项被勾选,该对象一旦发生碰撞动作,则会产生 3 个碰撞信息并发送给脚本参数,分别是 OnTriggerEnter、OnTriggerExit、OnTriggerStay。 Physics Material 定义了物理材质,包括冰、金属、塑料、木头等。 2) Sphere Collider Sphere Collider 是球体形状的碰撞体,如下图所示。 Sphere Collider 是一个基于球体的基本碰撞体,Sphere Collider 的三维大小可以按同一比例调节,但不能单独调节某个坐标轴方向的大小,具体参数如下表所示。 当游戏对象的物理形状是球体时,则使用球体碰撞体,如落石、乒乓球等游戏对象。 参 数含 义功 能Is Trigger触发器勾选该项,则该碰撞体可用于触发事件,并将被物理引擎所忽略Material材质用于为碰撞体设置不同的材质Center中心设置碰撞体在对象局部坐标中的位置Radius半径设置球形碰撞体的大小3) Capsule Collider Capsule Collider 由一个圆柱体盒两个半球组合而成,Capsule Collider 的半径和高度都可以单独调节,可用在角色控制器或与其他不规则形状的碰撞结合来使用。 通常添加至 Character 或 NPC 等对象的碰撞属性,如下图所示,具体参数如下表所示。 4) Mesh Collider Mesh Collider(网格碰撞体)根据 Mesh 形状产生碰撞体,比起 Box Collider、Sphere Collider 和 Capsule Collider,Mesh Collider 更加精确,但会占用更多的系统资源。 专门用于复杂网格所生成的模型,如下图所示,具体参数如下表所示。 在 Unity 3D 中,检测碰撞发生的方式有两种,一种是利用碰撞体,另一种则是利用触发器(Trigger)。 触发器用来触发事件。在很多游戏引擎或工具中都有触发器。 例如,在角色扮演游戏里,玩家走到一个地方会发生出现 Boss 的事件,就可以用触发器来实现。 当绑定了碰撞体的游戏对象进入触发器区域时,会运行触发器对象上的 OnTriggerEnter 函数,同时需要在检视面板中的碰撞体组件中勾选 IsTrigger 复选框,如下图所示。 触发信息检测使用以下 3 个函数: MonoBehaviour.OnTriggerExit(Collider collider),当退出触发器时触发。MonoBehaviour.OnTriggerStay(Collider collider),当逗留在触发器中时触发。Unity 3D 中的碰撞体和触发器的区别在于:碰撞体是触发器的载体,而触发器只是碰撞体的一个属性。如果既要检测到物体的接触又不想让碰撞检测影响物体移动,或者要检测一个物体是否经过空间中的某个区域,这时就可以用到触发器。例如,碰撞体适合模拟汽车被撞飞、皮球掉在地上又弹起的效果,而触发器适合模拟人站在靠近门的位置时门自动打开的效果。 4. Unity 3D物理材质Unity 3D 物理材质是指物体表面材质,用于调整碰撞之后的物理效果。 Unity 3D 提供了一些物理材质资源,通过资源添加方法可以添加到当前项目中。 标准资源包提供了 5 种物理材质:弹性材质(Bouncy)、冰材质(Ice)、金属材质(Metal)、橡胶材质(Rubber)和木头材质(Wood)。 在菜单中执行 Assets→Create→Physics Material 便可将物理材质应用在需要的地方,如下图所示。 执行创建物理材质的命令后,在对应的 Inspector 面板上的物理材质设置界面如下图所示,物理材质属性如下表所示。 力一般是在物体之间的作用过程中表现出来的,在物理学中力是非常重要的元素。 力的种类有很多,刚体组件因为受到力的作用而进行加速或抛物线运动。 先找到刚体组件,然后再使用AddForce()方法。 Unity 3D 中通过 rigidbody.AddForce(x,y,z)方法添加力的作用,该方法的参数是施加力的方向,参数大小代表了力的大小。 6. Unity 3D角色控制器在 Unity 3D 中,游戏开发者可以通过角色控制器来控制角色的移动,角色控制器允许游戏开发者在受制于碰撞的情况下发生移动,而不用处理刚体。 角色控制器不会受到力的影响,在游戏制作过程中,游戏开发者通常在任务模型上添加角色控制器组件进行模型的模拟运动。 添加角色控制器Unity 3D 中的角色控制器用于第一人称以及第三人称游戏主角的控制操作,角色控制器的添加方法如下图所示。 选择要实现控制的游戏对象,执行菜单栏中的 Component→Physics→Character Controller 命令,即可为该游戏对象添加角色控制器组件。 Unity 3D 中的角色控制器组件被添加到角色上之后,其属性面板会显示相应的属性参数,如下图所示,其参数如下表所示。 在 Unity 3D 中,物理引擎内置的关节组件能够使游戏对象模拟具有关节形式的连带运动。 关节对象可以添加至多个游戏对象中,添加了关节的游戏对象将通过关节连接在一起并具有连带的物理效果。 需要注意的是,关节组件的使用必须依赖刚体组件。 铰链关节Unity 3D 中的两个刚体能够组成一个铰链关节,并且铰链关节能够对刚体进行约束。 具体使用时,首先执行菜单栏中的 Component→Physics→Hinge Joint 命令,为指定的游戏对象添加铰链关节组件,如下图所示。 然后,在相应的 Inspector 属性面板中设置属性,如下表所示。 在 Unity 3D 中,用于约束指定游戏对象对另一个游戏对象运动的组件叫作固定关节组件,其类似于父子级的关系。 具体使用时,首先执行菜单栏中的 Component→Physics→Fixed Joint 命令,为指定游戏对象添加固定关节组件。 当固定关节组件被添加到游戏对象后,在相应的Inspector属性面板中设置相关属性,如下表所示。 参 数含 义功 能Connected Body连接刚体为指定关节设定要连接的刚体Break Force断开力设置断开固定关节所需的力Break Torque断开力矩设置断开固定关节所需的转矩 弹簧关节在 Unity 3D 中,将两个刚体连接在一起并使其如同弹簧一般运动的关节组件叫弹簧关节。 具体使用时,首先执行菜单栏中的 Component→Physics→Spring Joint 命令,为指定的游戏对象添加弹簧关节组件。 然后,在相应的 Inspector 属性面板中设置相关属性,如下表所示。 参 数含 义功 能Connected Body连接刚体为指定关节设定要连接的刚体Anchor错点设置应用于局部坐标的刚体所围绕的摆动点Spring弹簧设置弹簧的强度Damper阻尼设置弹簧的阻尼值Min Distance最小距离设置弹簧启用的最小距离数值Max Distance最大距离设置弹簧启用的最大距离数值Break Force断开力设置断开弹簧关节所需的力度Break Torque断开转矩设置断开弹簧关节所需的转矩 角色关节在 Unity 3D 中,主要用于表现布偶效果的关节组件叫作角色关节。 具体使用时,首先执行菜单栏中的 Component→Physics→Character Joint 命令,为指定的游戏对象添加角色关节组件。 然后,在相应的 Inspector 属性面板中设置相关属性,如下表所示。 参 数含 义功 能Connected Body连接刚体为指定关节设定要连接的刚体Anchor锚点设置应用于局部坐标的刚体所围绕的摆动点Axis扭动轴角色关节的扭动轴Swing Axis摆动轴角色关节的摆动轴Low Twist Limit扭曲下限设置角色关节扭曲的下限High Twist Limit扭曲上限设置角色关节扭曲的上限Swing 1 Limit摆动限制1设置摆动限制Swing 2 Limit摆动限制2设置摆动限制Break Force断开力设置断开角色关节所需的力Break Torque断开转矩设置断开角色关节所需的转矩 可配置关节Unity 3D 为游戏开发者提供了一种用户自定义的关节形式,其使用方法较其他关节组件烦琐和复杂,可调节的参数很多。 具体使用时,首先执行菜单栏中的 Component→Physics→Configurable Joint 命令,为指定游戏对象添加可配置关节组件。 然后,在相应的 Inspector 属性面板中设置相关属性,如下表所示。 参 数含 义功 能Connected Body连接刚体为指定关节设定要连接的刚体Anchor锚点设置关节的中心点Axis主轴设置关节的局部旋转轴Secondary Axis副轴设置角色关节的摆动轴X MotionX 轴移动设置游戏对象基于 X 轴的移动方式Y MotionY 轴移动设置游戏对象基于 Y 轴的移动方式Z MotionZ 轴移动设置游戏对象基于 Z 轴的移动方式Angular X MotionX 轴旋转设置游戏对象基于 X 轴的旋转方式Angular Y MotionY 轴旋转设置游戏对象基于 Y 轴的旋转方式Angular Z MotionZ 轴旋转设置游戏对象基于 Z 轴的旋转方式Linear Limit线性限制以其关节原点为起点的距离对齐运动边界进行限制的 设置Low Angular X LimitX 轴旋转下限设置基于 X 轴关节初始旋转差值的旋转约束下限High Angular X LimitX 轴旋转上限设置基于 X 轴关节初始旋转差值的旋转约束上限Angular Y LimitY 轴旋转限制设置基于 Y 轴关节初始旋转差值的旋转约束Angular Z LimitZ 轴旋转限制设置基于 Z 轴关节初始旋转差值的旋转约束Target Position目标位置设置关节应达到的目标位置Target Velocity目标速度设置关节应达到的目标速度X DriveX 轴驱动设置对象沿局部坐标系 X 轴的运动形式Y DriveY 轴驱动设置对象沿局部坐标系 Y 轴的运动形式Z DriveZ 轴驱动设置对象沿局部坐标系 Z 轴的运动形式Target Rotation目标旋转设置关节旋转到目标的角度值Target Angular Velocity目标旋转角速度设置关节旋转到目标的角速度值Rotation Drive Mode X&YZ旋转驱动模式通过 X&YZ 轴驱动或插值驱动对对象自身的旋转进 行控制Angular X DriveX 轴角驱动设置关节围绕 X 轴进行旋转的方式Angular YZ DriveYZ 轴角驱动设置关节绕 Y、Z 轴进行旋转的方式Slerp Drive球面线性插值驱动设定关节围绕局部所有的坐标轴进行旋转的方式Projection Mode投影模式设置对象远离其限制位置时使其返回的模式Projection Distance投影距离在对象与其刚体链接的角度差超过投影距离时使其回 到适当的位置Projection Angle投影角度在对象与其刚体链接的角度差超过投影角度时使其回 到适当的位置Configured In World Space在世界坐标系中 配置将目标相关数值都置于世界坐标中进行计算Swap Bodies交换刚体功能将两个刚体进行交换Break Force断开力设置断开关节所需的作用力Break Torque断开转矩设置断开关节所需的转矩Enable Collision激活碰撞激活碰撞属性 8. Unity 3D布料布料是 Unity 3D 中的一种特殊组件,它可以随意变换成各种形状,例如桌布、旗帜、窗帘等。 布料系统包括交互布料与蒙皮布料两种形式。 添加布料系统Unity 3D 中的布料系统为游戏开发者提供了强大的交互功能。 在 Unity 5.x 中,布料系统为游戏开发者提供了一个更快、更稳定的角色布料解决方法。 具体使用时,执行菜单栏中的 Component→Physics→Cloth 命令,为指定游戏对象添加布料组件,如下图所示。 当布料组件被添加到游戏对象后,在相应的 Inspector 属性面板中设置相关属性,如下表所示。 射线是三维世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射。 射线应用范围比较广,广泛应用于路径搜寻、AI逻辑和命令判断中。 例如,自动巡逻的敌人在视野前方发现玩家的时候会向玩家发起攻击,这时候就需要使用射线了。 接下来我们通过一个案例来了解射线在游戏开发中的应用。 实践案例:拾取物体案例构思 本案例旨在通过在场景中拾取 Cube 对象,实现射线功能。 案例设计 本案例在 Unity 3D 内创建一个简单的三维场景,场景内放有 Cube 和 Plane,Plane 用于充当地面,Cube 用于做拾取物体测试。 当单击 Cube 时,它会发出一条射线,同时在 Console 面板中出现pick up字样。 案例实施 步骤 1):创建一个平面(0,0,0)和一个物体(0,1,0),使小球置于平面上方,如下图所示。 步骤 2):创建 C# 脚本,将其命名为 RayTest,输入如下代码。 using UnityEngine; using System.Collections; public class RayTest:MonoBehaviour{ void Update(){ if(Input.GetMouseButton(0)){ //从摄像机到单击处发出射线 Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; if(Physics.Raycast(ray, out hitInfo)){ //画出射线, 只有在Scene视图中才能看到 Debug.DrawLine(ray.origin, hitInfo.point); GameObject gameObj=hitInfo.collider.gameObject; Debug.Log("click object name is"+gameObj.name); //当射线碰撞目标的标签是Pickup时, 执行拾取操作 if(gameObj.tag=="Pickup"){ Debug.Log("pick up!"); } } } } }上述代码中,首先创建一个 Ray 对象,从摄像机发出到单击处的射线。 Debug.DrawLine 函数将射线可视化。接下来进行判断,如果鼠标单击的物体标签是 Pickup,则在控制面板中输出 pick up 字样。 步骤 3):将脚本链接到主摄像机上。 步骤 4):为 Cube 添加 Pickup 标签。 步骤 5):运行测试,效果如下图所示。 Unity 3D 集成开发环境作为一个优秀的游戏开发平台,提供了出色的管理模式,即物理管理器(Physics Manager)。 物理管理器管理项目中物理效果的参数,如物体的重力、反弹力、速度和角速度等。 在 Unity 3D 中执行 Edit→Project Settings→Physics 命令可以打开物理管理器,如下图所示。 可以根据需要通过调整物理管理器中的参数来改变游戏中的物理效果,具体参数如下表所示。 参 数含 义功 能Gravity重力应用于所有刚体,一般仅在 Y 轴起作用Default Material默认物理材质如果一个碰撞体没有设置物理材质,将采用默认材质Bounce Threshold反弹阈值如果两个碰撞体的相对速度低于该值,则不会反弹Sleep Velocity休眠速度低于该速度的物体将进人休眠Sleep Angular Velocity休眠角速度低于该角速度的物体将进人休眠Max Angular Velocity最大角速度用于限制刚体角速度,避免旋转时数值不稳定Min Penetration For Penalty最小穿透力设置在碰撞检测器将两个物体分开前,它们可以穿透 多少距离Solver Iteration Count迭代次数决定了关节和连接的计算精度Raycasts Hit Triggers射线检测命中 触发器如果启用此功能,在射线检测时命中碰撞体会返回一 个命中消息;如果关闭此功能,则不返回命中消息Layer Collision Matrix层碰撞矩阵定义层碰撞检测系统的行为 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |