游戏开发中使用的物理概念 (UNITY)
物理在游戏开发(包括 Unity)中起着至关重要的作用。物理的几个关键概念用于创建逼真且引人入胜的游戏体验。以下是 Unity 游戏开发中常用的一些基本物理概念:
1.物理引擎:
简单来说,物理引擎就像一个计算机程序,可以使视频游戏或模拟中的对象表现得更加真实。它负责模拟虚拟世界中物体如何移动、碰撞、弹跳和交互。
想象一下,您有一个需要跳跃的游戏角色,并且有一个应该从山上滚下来的球。物理引擎计算角色跳的高度、球滚动的距离,以及他们在互相碰撞或撞到障碍物时的反应。它本质上模仿物理定律,使游戏世界感觉可信且有趣。
Unity 使用自己的物理引擎进行 2D 和 3D 物理模拟。它使用不同的物理引擎进行 2D 和 3D 模拟:
2D 物理引擎:
Unity 的 2D 物理引擎基于开源 Box2D 引擎。它使用 Rigidbody2D 和 Collider2D 等组件来处理 2D 物理模拟。
3D 物理引擎:
Unity 使用 NVIDIA PhysX 进行 3D 物理模拟,其中包括用于 3D 对象的 Rigidbody 和 Collider 等组件。它常用于 AAA 游戏。
2. Rigidbodies 刚体:
刚体是允许游戏对象受到重力、速度和碰撞等物理力影响的组件。它们用于模拟真实的运动和交互。在 Unity 中,Rigidbody 是一个组件,您可以将其附加到游戏对象以赋予其真实的物理行为。刚体有两种类型:2D 和 3D。
在 2D 游戏中,您使用 Rigidbody2D 组件。这允许对象在 2D 平面中移动,这意味着它可以向上、向下、向左、向右移动,但不能进出屏幕。
在 3D 游戏中,您可以使用 Rigidbody成分。这允许对象在三个维度上自由移动:上/下、左/右、前/后。
在 Unity 的物理系统中,您通常使用三种类型的刚体:
Dynamic Rigidbodies 动态刚体:
它们受到力的影响并对碰撞做出反应。具有动态刚体的物体在重力、力和其他物理相互作用的影响下移动。
Kinematic Rigidbodies 运动刚体:
运动刚体不会像动态刚体那样受到外力或碰撞的影响。您可以更直接地控制他们的动作。这些通常用于您想要手动移动的角色或对象,例如玩家角色。
Static Rigidbodies 静态刚体:
静态刚体根本不移动。它们固定在适当的位置,通常用于关卡几何体或不应受物理影响的对象。
3. 力和运动:
牛顿运动定律是游戏物理学的基础。加速度、速度和动量等概念用于模拟游戏中物体的运动。在 Unity 中,您可以向 Rigidbody 组件施加力和冲量,以使对象移动、跳跃或响应各种动作。您可以控制这些力量的强度和持续时间以达到特定的效果。
加速度:
它是关于物体速度变化的速度,无论这种变化是速度的增加还是减少。
velocity速度:
物体在特定方向上的速度。它告诉您物体移动的速度以及移动的方式。速度是一个矢量,这意味着它具有大小(数值)和方向。
speed 速度:
它是衡量物体移动速度的指标。它告诉您物体从一个地方移动到另一个地方的速率,而不指示方向。速度是一个标量,这意味着它有大小(数值)但没有方向。
动量:
它是描述对象“运动”程度的属性。它结合了物体的质量和速度。 (P = M.V)。关于动量的重要一点是,除非有外力作用在物体上,否则系统的总动量保持不变。
力:
对物体施加推力或拉力。它是导致物体改变其运动状态或形状的原因。力既有大小(其强度)又有方向(施加的位置),这意味着它是矢量。它以牛顿 (N) 为单位进行测量。
运动:
它只是意味着对象位置随时间的变化。它可能涉及改变位置、速度或方向,或这些的组合。
4. Gravity 重力:
重力是一种使物体相互吸引的力。在地球上,重力主要将物体拉向地球中心,这就是为什么我们经常说重力将物体“向下拉”。在 Unity 中,您可以使用 Rigidbody 组件将重力应用于游戏对象。其值为 9.81 m/s²。
5.Friction 摩擦力:
摩擦力决定了物体与表面的相互作用。它影响物体运动时减速的速度以及移动物体所需的力。
摩擦力在我们的日常生活中很重要。它使我们能够行走而不会打滑、驾驶汽车、停止行驶中的自行车以及用手捡起物体。
摩擦力的大小取决于表面的性质以及将它们压在一起的力。粗糙的表面比光滑的表面产生更多的摩擦。
摩擦力的类型:摩擦力通常分为三种类型:
Static Friction静态摩擦:
这使物体保持静止状态,防止它们在受力时开始移动。
Dynamic Friction 动态摩擦:
当物体已经在运动时就会发生这种情况,并且它会阻碍它们的运动。
Rolling Friction 滚动摩擦力:
这是物体在表面上滚动时遇到的摩擦力,例如地面上的轮子。
6. 质量和惯性:
这些概念对于确定物体如何响应力非常重要。质量影响物体对加速度的阻力,而惯性则是物体保持当前运动状态的趋势。
Mass 质量:
它是物体中物质含量的度量。质量告诉你一个物体是由多少“东西”或材料制成的。例如,重的物体比较轻的物体具有更大的质量。
质量与重力无关。无论是在地球、月球还是太空中测量,都是一样的。质量经常与重量混淆,但它们并不相同。
重量取决于作用在物体上的重力,而质量则不然。它通常以千克 (kg) 或克 (g) 等单位进行测量。
Inertia 惯性:
惯性是物体抵抗其运动状态变化的倾向。简单来说:静止的物体倾向于保持静止,运动的物体倾向于保持运动,以恒定的速度沿直线运动,除非受到外力作用。物体的惯性大小取决于其质量。质量越大的物体惯性越大,这意味着它们更难移动或停止。
7. 碰撞检测:
这是确定游戏中的两个或多个对象何时进行物理交互的过程。
在 Unity 中,这是由物理引擎管理的,该引擎会检测游戏对象上的碰撞器何时重叠。 Unity 提供内置碰撞检测系统来处理碰撞器之间的交互。这可以在两个对象碰撞时触发事件,使您可以响应这些事件,例如得分、造成损坏或触发动画。
当对象进入、停留在碰撞体中或退出碰撞体时,您可以使用特定的方法来响应碰撞和触发事件。这些方法对于处理游戏中的交互特别有用。以下是与碰撞事件相关的主要方法:
对于 3D 物理:
OnCollisionEnter(Collision Collision):
当碰撞开始时,即两个碰撞体第一次接触时,调用此方法。它通过 Collision 参数提供有关碰撞的信息。
OnCollisionStay(Collision collision):
当碰撞正在进行时,每帧(连续)调用此方法。
OnCollisionExit(Collision collision):
当碰撞结束时调用此方法,这意味着碰撞体不再接触。
对于 2D 物理:
OnCollisionEnter2D(Collision2D collision):
与 OnCollisionEnter 类似,但适用于 2D 物理。
OnCollisionStay2D(Collision2D collision):
与 OnCollisionStay 类似,但适用于 2D 物理。
OnCollisionExit2D(Collision2D collision):
与 OnCollisionExit 类似,但适用于 2D 物理。
8. Colliders碰撞器:
碰撞器是用于定义对象形状以进行碰撞检测的组件。如果没有碰撞器,Unity 中的对象将无法检测到它们何时相互接触或碰撞。它用于定义对象的形状。
在 Unity 中,碰撞器有 2D 和 3D 两种类型,它们对于各自维度的碰撞检测至关重要:
2D Colliders:
这些用于 2D 游戏,包括 BoxCollider2D、CircleCollider2D 和 PolygonCollider2D 等组件。它们定义 2D 对象的碰撞边界。
3D Colliders:
3D 游戏使用 BoxCollider、SphereCollider、CapsuleCollider 和 MeshCollider 等碰撞器。这些组件定义 3D 对象的碰撞边界,确保它们在 3D 环境中真实地相互交互。
9. Raycasting光线投射:
它是一种用于确定哪些物体被从特定点沿指定方向投射的假想射线击中的技术。
光线投射就像从起点向游戏世界中的某个方向投射一条不可见的线(“光线”)。
它对于各种应用都很有用,例如确定角色是否可以看到物体或检测射弹击中的位置,包括检测碰撞、查找物体或表面的位置、瞄准等。
在Unity中,您可以使用Physics.Raycast等函数进行3D光线投射或使用Physics2D.Raycast进行2D光线投射。这些函数返回有关光线击中对象的信息,例如击中的对象、接触点以及击中表面的法线方向。
10. Joints 关节:
关节是允许您连接和控制游戏中游戏对象运动的组件。
关节用于连接两个或多个游戏对象,使它们能够一起移动或响应特定条件。
Unity提供了不同类型的关节,如 HingeJoint 、Fixed Joint 、SpringJoint 等来连接和约束对象。关节对于创建复杂的结构和模拟物理相互作用(例如打开的门、弹簧或复杂的机械)至关重要。
11.Kinematics运动学:
运动体是不受力或碰撞影响而移动的物体。它们通常用于受控动画序列或不应受物理影响的对象。
12. Triggers 触发器:
触发器是特殊的碰撞器,不与其他对象进行物理交互,但可用于检测其他对象何时进入或退出特定区域。
Unity 提供了处理这些触发交互的函数,包括用于 3D 物理的 OnTriggerEnter、OnTriggerStay 和 OnTriggerExit,以及用于 2D 物理的 OnTriggerEnter2D、OnTriggerStay2D 和 OnTriggerExit2D。您可以在这些函数中编写自定义代码来响应触发事件。
触发器可用于各种目的,例如检测玩家何时收集物品、角色何时进入特定区域、射弹何时击中目标,或者物体何时穿过某些区域,而无需详细的物理计算。
一个典型的例子是使用“硬币收集”机制的触发器,其中触发器碰撞器放置在可收藏的硬币周围。当玩家的角色进入此触发器时,您可以编写一个事件来增加玩家的分数并使硬币消失,而不需要物理碰撞响应。
13. Particle Systems粒子系统:
虽然粒子系统不是严格基于物理的,但它通常使用各种参数和算法来模拟火、烟和水滴等物理现象。
14.Physics Materials:
物理材质是一个可编写脚本的对象,可让您控制游戏中碰撞器的物理属性。这包括摩擦力、弹力和密度等影响碰撞行为的属性。
物理材料用于定义碰撞器如何在摩擦和弹力方面相互作用。它们可以应用于碰撞器来调整对象在接触时的行为方式。
15.Ragdoll Physics:
布娃娃物理是一种用于游戏开发和计算机图形学的技术,用于模拟角色或物体受到外力影响时的真实运动和行为。布娃娃物理特别专注于为角色或生物创建逼真且灵活的动画,当他们跌倒、被击中或受到基于物理的事件影响时。
在 Unity 中,您可以通过创建由刚体和关节层次结构组成的布娃娃系统来实现角色动画的布娃娃物理
16.Cloth 布料和Soft软体模拟:
Unity 支持布料和软体模拟,这对于在游戏中创建逼真的织物和软体非常有用。这些模拟基于
弹性和质量等物理原理。
17. Physics Layers物理层和Layer Masks层遮罩:
这些用于将对象分类为不同的层,并有选择地控制哪些对象可以通过碰撞检测相互交互。这对于优化性能和控制复杂游戏场景中的交互尤其重要。
18. Constraints 限制:
Unity 的约束允许您以各种方式限制对象的移动。您可以冻结或限制沿特定轴的移动,这对于创建具有特定行为的角色或对象非常有用。
19. 导航网格:
虽然与物理无关,但 Unity 的 NavMesh 系统对于游戏中的 AI 寻路至关重要。它生成一个导航网格,使人工智能控制的角色能够智能地导航游戏世界。
希望你学到了新东西。