UDN
Search public documentation:

CollisionReferenceCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 主页 > 静态网格物体 > 碰撞参考指南
UE3 主页 > 物理 > 碰撞参考指南
UE3主页 >环境美工人员 > 碰撞参考指南

碰撞参考指南


概述


当创建图形细节时,保证游戏中的碰撞简洁是非常重要的。其中有两个原因,计算碰撞比计算多边形来说速度要快很多,而且对玩家来说加了碰撞,游戏体验就会流畅很多,玩家也不会卡在细小的缝隙中。碰撞响应分为两个不同的部分:虚幻碰撞和Physx 这篇文档主要讲解虚幻碰撞,请参阅 click here 获取更多关于Physx的信息。要了解更多有关碰撞的技术性信息,请参阅碰撞技术指南页面。

创建骨架网格物体碰撞外壳

请参阅 PhAT 用户指南 学习如何使用骨架网格创建碰撞外壳。

创建静态网格物体碰撞外壳

使用构建画刷创建碰撞外壳

把您想添加碰撞外壳的网格物体放置到关卡中。然后在它的周围放置一个您想的碰撞外壳的形状的构建画刷。请尽量保持形状的简单性!

Collision_CreateCollisionHullWithBrush_0.jpg

然后选中静态网格物体,右击并从关联菜单中选择 Set Collision From Builder Brush(通过构建画刷设置碰撞)。这将会考虑您应用到静态网格物体上的任何缩放比例。

Collision_CreateCollisionHullWithBrush_1.jpg

注意到这个碰撞将会被添加到您已经选中的静态网格物体的所有实例上是很重要的。要看到保存画刷为碰撞的效果,您必须保存包含那个静态网格物体的包。

Collision_CreateCollisionHullWithBrush_2.jpg

使用 K-DOP 工具创建碰撞外壳

K-DOP 是静态网格物体编辑器中的一个工具,用于生成简单的碰撞。K-DOP 是一种包围盒体积类型,它代表 K discrete oriented polytope(K 离散定向多面体)(这里的 K 是按照坐标轴排列平面的数量)。一般它有 K 个按照坐标轴平行排列的平面,并且使它们和网格物体尽可能的近。最终得到的形状用做碰撞模型。在静态网格物体编辑器中,K 可以是:

  • 6 - 轴对齐长方体。
  • 10 - 有四个边进行倒角处理的长方体—您可以选择按照 X-Y 或 Z 平行排列的边。
  • 18 - 在所有边上进行倒角处理的长方体。
  • 26 - 在所有边和角上进行倒角处理的长方体。

请查看以下实例。这个工具对于包含很多管道、柱子及栏杆的包是非常便利的:

kdop_sizes.jpg

使用球体简化碰撞创建碰撞外壳

该工具会轻松地用一个球体将这个静态网格物体保卫,这样可以使这个静态网格物体的每个部分都在球体的内部。当然这种方法最适用于那种有点像球体的静态网格物体。

Collision_CreateCollisionHullWithSphere.jpg

使用自动凸面碰撞工具创建碰撞外壳

该工具会尝试为这个静态网格物体构建一组凸面碰撞外壳。通过调整这些参数,您可以调整凸面外壳的创建方式。

Collision_CreateCollisionHullWithAutoConvex_0.jpg

  • Depth - 可以确定进入到这个网格物体的深度。调整这个参数可以帮助确认与这个静态网格物体更靠近的碰撞外壳。
  • Max Hull Verts - 碰撞外壳顶点的最大数量。增加这个值会增加碰撞外壳的复杂程度。
  • Allow Splits - 允许分割的最大值。增加这个值会增加创建的碰撞外壳的数量。

Collision_CreateCollisionHullWithAutoConvex_1.jpg

正如你所看到的那样,自动凸面碰撞相当准确,而多边形数量持续降低。

Collision_CreateCollisionHullWithAutoConvex_2.jpg

使用您的 3D 内容创建包创建碰撞外壳

请参阅FBX 静态网格物体通道了解如何在 3D 内容创建包中创建静态网格物体碰撞外壳。

体积

这些是可以与游戏中的 actor 发生碰撞的不可见 BSP。下面的示例将会向您显示如何生成一个阻挡体积。Volumes can be both blocking collision and non blocking collision.

如何创建阻挡体积

首先使构建画刷的形状是正确的。

Collision_Volume_CreateBrush.jpg

在虚幻编辑器中右击 Volume(体积)按钮,然后从列表中选择 BlockingVolume。

Collision_Volume_RightClickMenu.jpg

这些通常用来阻挡 actor,使他们无法到达关卡中的某些特定区域。

Collision_Volume_CreatedVolume.jpg

示例


这里是一些如何为一般的碰撞情境设置各种碰撞标记的例子。我们的目标是为物理情景正确地设置碰撞检测及标记。

玩家移动和武器开火

对于适当的玩家运动,尤其是将碰撞柱应用于 Pawn 运动及和其它 Pawn 的碰撞,同时使用运动骨骼来精确地进行碰撞检测(比如射枪时的光线跟踪)的情况下,请考虑以下设置:

  • 虚幻物理(比如 PHYS_Walking)将会清除 CollisionComponent(碰撞分量)的按照坐标轴排列的包围盒。当应用 PHYS_Walking 时,使用 SkeletalMeshComponent 作为 CollisionComponent 是一个糟糕的主意,因为当人物进行动画时,它的形状改变了很多。
  • 如果您将 CollideActors 和 BlockZeroExtent 设置为 true(真),线性检测将会检测附加到 Actor 上的所有 PrimitiveComponents。
  • 您没有必要使 PhysicsAssetInstance 和运动骨骼对骨骼进行线性检测。简单地分配一个 PhysicsAsset(物力资源)并设置 CollideActors 和 BlockZeroExtent 为 true(真)将会是您获得线性检测的结果(假设附加了分量)。
  • RBChannel/RBCollideWithChannel 仅影响物理引擎碰撞。如果您的玩家使用 PHYS_Walking,那么它将不会产生效果。

基本上,您的 Pawn 需要一个 CylinderComponent 和一个 SkeletalMeshComponent。CollisionComponent 引用应该被分配给 CylinderComponent,并且 SkeletalMeshComponent 应该设置 CollideActors 和 BlockZeroExtent 为 true,您的 CylinderComponent 应该适当地设置 BlockZeroExtent 为 false,从而可以阻止它干扰武器踪迹。

在游戏中检查碰撞


在游戏中您可以使用几个控制台命令来检查碰撞设置。这里使其中的一些命令。输入它们并切换它们的开关状态。

  • show collision - 这将会在关卡中描画所有的碰撞模型及阻挡体积。
    Collision_ShowCollision.jpg
  • show zeroextent - 在关卡中显示碰撞,假设您是一个零粗细(线)跟踪。不可见对象没有碰撞。
    Collision_ZeroExtent.jpg
  • show nonzeroextent - 在关卡中显示碰撞,假设您是一个非零粗细(线)跟踪。
    Collision_NonZeroExtent.jpg
  • show rigidbody - 在关卡中显示碰撞,假设您是一个刚体(注意,它不会显示 RBCC 滤镜组,只显示 BlockRigidBody 和 UseSimpleRigidBodyCollision)。
    Collision_ShowRigidBody.jpg
  • nxvis collision - 这将显示关卡中的 PhysX 碰撞信息,所以您可以看到正在和哪个钢体进行碰撞。
    Collision_NxvisCollision.jpg
  • stat game - 这将为您显示各种不同碰撞类型所占用的时间的有用的统计数据。
    Collision_StatGame.jpg