UDN
Search public documentation:

CollisionTechnicalGuideCH
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的信息。请参照Collision Reference(碰撞参考指南)页面获取关于如何撞见碰撞数据的信息。

Unrealscript(虚幻脚本)


虚幻碰撞可以追溯到虚幻引擎1,碰撞响应的主体通过虚幻脚本进行处理。虚幻脚本也负责设置碰撞属性,这样虚幻碰撞引擎就知道如何模拟这些actor。

Actor属性

在碰撞选项里能找到很多actor属性。这些属性控制虚幻碰撞引擎如何处理碰撞响应以及这些actor的物理模拟。

  • *bCollideComplex(碰撞复杂度)= |在 Actor 移动过程中,忽略这个 Actor 上的简化碰撞外壳 ,并碰撞每个多边形。简化碰撞外壳在虚幻编辑器中或3D内容创建包中生成。碰撞每个多边形对非零粗细跟踪来说十分有用,这样子弹就能精确碰撞。碰撞每个多边形不推荐在actor移动中应用,这样对性能要求太高。
  • BlockRigidBody(屏蔽刚体) - actor是否使用PhysX应该同这个actor进行对碰。
  • bNoEncroachCheck(不进行侵占检查) - 当移动该actor时关闭encroachment checking(侵占检查)的一种优化处理。启用该项将会加速游戏的运行,但是 Actor 将不能触碰触发器、推动玩家,进入或走出体积。
  • bPathColliding(路径碰撞) - 在虚幻引擎中该actor是否能在路径构建中屏蔽路径。
  • CollisionComponent(碰撞组件) - 用于该actor运动的针对组件的引用 如果actor正在使用PHYS_Walking(物理行走),那么和该组件边界框相对齐的坐标轴会同该关卡碰撞。如果该Actor正在使用PHYS_RigidBody(物理刚体),那么这个组件的模型或是物理物体正在被使用。
  • CollisionType(碰撞类型) - 这是为关卡设计师到处多个碰撞设置的一种简便方法。在虚幻编辑器中更改这个数值会在actor和碰撞组件上设置低级关卡标记,如CollideActors(碰撞actor), BlockActors(屏蔽actor), BlockNonZeroExtent(屏蔽非零粗细, BlockZeroExtent(屏蔽非零粗细) 和BlockRigidBody(屏蔽刚体),来符合碰撞种类的描述。
    • COLLIDE_CustomDefault(碰撞_自定义默认) - 程序员设置碰撞。选中该项时在默认属性中把碰撞恢复到默认设置。
    • COLLIDE_NoCollision(碰撞_无碰撞) - 不碰撞任何物体。
    • COLLIDE_BlockAll(碰撞_屏蔽所有) - 屏蔽所有。
    • COLLIDE_BlockWeapons(碰撞_屏蔽武器) - 只屏蔽通常使用在武器上的零粗细踪迹。
    • COLLIDE_TouchAll(碰撞_触碰所有) - 触碰所有,但不屏蔽。
    • COLLIDE_BlockWeapons(碰撞_屏蔽武器) - 只屏蔽通常使用在武器上的零粗细轨迹。
    • COLLIDE_BlockAllButWeapons - 除了通常使用在武器上的零粗细轨迹踪迹,其他的都屏蔽。.
    • COLLIDE_BlockAllButWeapons - 除了通常使用在武器上的零粗细踪迹,其他的都触碰。这个不屏蔽。
    • COLLIDE_BlockWeapons(碰撞_屏蔽可脱卸武器) - 只屏蔽通常使用在武器上的零粗细轨迹。同样启用标记允许玩家更换该actor。

碰撞标记

这里有许多控制虚幻引擎如何同您放置在关卡中的actor一起表现碰撞的标记 有时候,一个标记同时出现在 Actor 属性和组件属性中。这时Actor1表现为覆盖

  • CollideActors(碰撞Actors) - 对于所有要进行虚幻碰撞检测的actor,这项必须为 True(真)。
  • BlockActors(屏蔽 Actors) - 这说明Actor是否要屏蔽Actor不让它们移动。比如一个触发器将设置 CollideActorstrue(真) 但设置 BlockActors(屏蔽Actor)false(假) 。这是因为期待的效果在两个actor相互碰撞时是给虚幻引擎监测的,而对正在移动的actor来说是要穿过对方的。
  • BlockZeroExtent(屏蔽零粗细) - 一个零粗细是一种线性检测,通常用在模拟子弹的武器上。如果它是真值(true),则actor会屏蔽在虚幻脚本中使用的零粗细踪迹。
  • BlockNonZeroExtent(屏蔽非零粗细) - 一个非零粗细是一种同坐标轴对齐的边界框检测,通常应用在玩家运动上。如果它是真值(true),则actor会屏蔽在虚幻脚本中使用的非0粗细。

虚幻脚本事件

当碰撞在虚幻3引擎中进行时,在所涉及的actor上会调用虚幻脚本事件。之所以要设计这些事件是因为您可以在您的子类actor中覆盖事件。ALERT! 事件和函数在虚幻脚本中没有分别

HitWall(击打墙)

当actor在墙里进行物理碰撞,调用HitWall(在BSP中,Wall设置到世界信息)。
  • HitNormal(击打法线) - 用actor敲击墙壁的法线
  • Wall(墙) - 这个actor碰撞进入的actor
  • Wall(墙组件) - 这个actor碰撞进入的组件。在BSP中,WallComp(墙组件)设置为无。

Actor.uc
event HitWall(Vector HitNormal, Actor Wall, PrimitiveComponent WallComp)

需要注意的是,Pawn可以改变该事件的调用方式,这点很重要。如果bDirectHitWall(b直接击打墙)为真(true),则总是直接调用Pawn的Hitwall事件。

Pawn.uc
var bool bDirectHitWall;

需要注意的是一个Pawn的控制器可以更改HItwall调用的方式,这点很重要。

当我们的Pawn已经同一块世界几何面障碍碰撞时,调用NotifyHitWall(通知Hitwall);回到真值以防通知在pawn上的Hitwall()。

  • HitNormal(击打法线) - 用actor敲击墙壁的法线
  • Wall(墙) - 这个actor碰撞进入的actor

Controller.uc
event bool NotifyHitWall(vector HitNormal, actor Wall);

当我们的pawn同一块世界几何体障碍在下落时碰撞,则调用NotifyFallingHitWall(通知正在下落的击打墙);如果bNotifyFallingHitWall(通知正在下落的击打墙)在控制器里为真值(true)则仅调用。

  • HitNormal(击打法线) - 用actor敲击墙壁的法线
  • Wall(墙) - 这个actor碰撞进入的actor

Controller.uc
event bool NotifyHitWall(vector HitNormal, actor Wall);

着陆

当actor已经进行物理着陆(Landed)到FloorActor(地面actor)时,调用Landed(着陆) (在BSP中,FloorActor设置到世界信息)
  • HitNormal(击打法线) - 着陆的法线
  • FloorActor(地面actor) - 用于该actor着陆的actor。

Actor.uc
event Landed(vector HitNormal, Actor FloorActor);

需要注意的是一个Pawn的控制器可以更改Landed(着陆)调用的方式,这点很重要。

当我们的pawn从一个掉落物体上着陆,则调用NotifyLanded(通知着陆);返回真值以防通知在这个pawn上的Landed()

  • HitNormal(击打法线) - 着陆的法线
  • FloorActor(地面actor) - 用于该actor着陆的actor。

Controller.uc
event bool NotifyLanded(vector HitNormal, Actor FloorActor);

物理体积改变

当物理体积变量改变时触发该事件。
  • NewVolume(新体积) - 设置在物理体积上的体积

Actor.uc
event PhysicsVolumeChange(PhysicsVolume NewVolume);

Touch(触碰)
当两个actor和Other(其他)相互触碰时调用touch(触碰)。两个actor和other(其他)必须可以碰撞,并且其中一个actor或者其他(other)必须使用非屏蔽碰撞。
  • Other - 触碰到这个actor的actor
  • OtherComp(其他组件) - 触碰这个actor的组件
  • HitLocation(击打位置) - 发生触碰地点的世界位置
  • HitNormal(击打法线) - 发生触碰的法线。

Actor.uc
event Touch(Actor Other, PrimitiveComponent OtherComp, vector HitLocation, vector HitNormal);

PostTouch(后触碰)

完成物理后,调用在PendingTouch(搁置触碰)actor上的PostTouch(后触碰) Pending Touch(搁置触碰)actor是一种在运动事件中被触碰的actor,它想在运动完成之后添加一个效果。两个actor必须可以进行碰撞,并且其中一个actor必须使用非屏蔽碰撞。
  • Other(其他) - PendingTouch(搁置触碰) Actor

Actor.uc
event PostTouch(Actor Other);

Untouch(未触碰)

在没有触碰到other(其他)的actor上调用UnTouch(未碰撞),调用Untouch(未触碰)。比如,如果玩家的pawn最初触碰到一个触发器时,玩家的pawn和触发器都将收到该触碰事件。当该玩家的pawn从触发器处移开,使碰撞不再触碰彼此,那么玩家的pawn会同其他设置为Trigger(触发器)的参数一起调用UnTouch(未触碰) 两个actor和other(其他)必须可以碰撞,并且其中一个actor或者其他(other)必须使用非屏蔽碰撞。
  • Other(其他) - Untouch(未触碰过的) actor

Actor.uc
event UnTouch(Actor Other);

Bump(撞击)

当两个actor和other(其他)相互撞击进入彼此时调用Bump(撞击)。两个actor可other(其他)必须可以碰撞,并且两个actor和other(其他)必须使用屏蔽碰撞。
  • Other(其他) - 撞击进这个actor的actor
  • OtherComp(其他组件) - 撞击进这个actor的组件
  • HitNormal(击打法线) - 撞击发生的法线。

Actor.uc
event Bump(Actor Other, PrimitiveComponent OtherComp, Vector HitNormal);

需要注意的是一个Pawn的控制器可以更改Bump(撞击)调用的方式,这点很重要。

当我们的pawn同一个障碍玩家进行碰撞时调用NotifyBump(通知bump),回到真值(true)以防通知在pawn上的Bump()

Controller.uc
event bool NotifyBump(Actor Other, Vector HitNormal);

BaseChange(基础改变)

当actor的基础变量改变时调用BaseChange(基础改变) 当Base(基础)设置为无时,也调用BaseChange(基础改变);当actor在空间漂浮时会发生这种情况。基础变量是一个actor引用,它指向当前actor上的内容。

Actor.uc
event BaseChange();

CollisionChanged(碰撞改变)

当actor碰撞属性中有任何改变,调用CollisionChanged(碰撞改变)。

Actor.uc
event CollisionChanged();

Encroaching(侵占)

当该actor正在侵占other(其他),而我们不能找到合适的地方放置other(其他),则调用EncroachingOn(侵占)
  • Other(其他) - 正在实施侵占的actor
  • Return(返回) - 如果您想中止这次移动,则回到真值(true),或者选择False(假值)允许其移动。ALERT! 请不要中止PHYS_RigidBody(物理刚体) Actor的移动,因为它会导致虚幻引擎的位置和物理引擎位置不匹配。

Actor.uc
event bool EncroachingOn(Actor Other);

EncroachedBy(被侵占)

Actor.uc
event EncroachedBy(Actor Other);

RanInto(跑进)

encroaching(侵占)actor调用RanInto(跑进),这样能成功移开Other(其他)actor
  • Other(其他) - 被移开的actor。

Actor.uc
event RanInto(Actor Other);

Performing collision checks(表现碰撞检测)

Trace(踪迹)

如果线同世界内的任何一点有碰撞,则进行踪迹检测。
  • HitLocation(击打位置) - 线在世界中进行碰撞的位置。
  • HitLocation(击打法线) - 线进行碰撞地点的表面法线。
  • TraceEnd - 在世界内踪迹中止位置的一点
  • TraceStart(开始跟踪) - 在世界内踪迹开始位置的一点。
  • bTraceActors(踪迹actor) - 踪迹是否冲撞actor
  • Extent(粗细) - 如果这个向量同0相等 (向量[0.f, 0.f, 0.f]),那么进行的踪迹会被认作为0粗细 如果向量不是0的话,那么执行非零粗细跟踪。
  • HitInfo(击打信息) - 这种结构包括同踪结果有关的信息。如果踪迹没有同任何物体进行碰撞,那这可能是无效的。
    • Material(材质) - 踪迹击打的材质。
    • Material(材质) - 踪迹击打的物理材质。
    • Item(项) - 有关踪迹击打的额外信息。
    • LevelIndex(关卡索引) - 踪迹击打了BSP的关卡索引。
    • BoneName(骨骼名称) - 踪迹击打一个骨架网格组件的骨骼名称。
    • HitComponent(击打组件) - 击打踪迹的组件
  • ExtraTraceFlags - 可以提示如何进行追踪的额外踪迹标记
    • TRACEFLAG_Bullet - 踪迹通常都会静态网格物体上的简单碰撞,而且通常都会针对每个多边形进行碰撞检测。
    • TRACEFLAG_PhysicsVolumes - 踪迹将会检查与物理体积之间的碰撞。
    • TRACEFLAG_SkipMovers - 踪迹将会忽略InterpActor。
    • TRACEFLAG_Blocking - 如果设置了这个选项,那么踪迹会与可以拦截检查 actor(从这个 actor 中调用 Trace)和所有相撞的 actor 碰撞。所有相撞包括关卡几何体、pawn、插入的 actor、任何其他种类的 actor、地形和体积。
  • Returned Actor(返回actor) - 踪迹返回到一个actor引用 如果返回为无,那么踪迹将不会击打任何物体。如果踪迹击打到了BSP,则返回actor是WorldInfo(世界信息) 否则,该踪迹会返回到它所击打的任何一个actor

Actor.uc
function Actor Trace(out Vector   HitLocation, out Vector HitNormal, Vector TraceEnd, optional Vector TraceStart, optional bool bTraceActors, optional Vector Extent, optional out TraceHitInfo HitInfo, optional int ExtraTraceFlags);

TraceComponent(踪迹组件)

仅表现一个撞击InComponent(在组件内)的踪迹 如果踪迹击打,则回到真值(true)。在要求更加精细地判断是否击打了一个actor时,这是有用的。
  • HitLocation(击打位置) - 线在世界中进行碰撞的位置。
  • HitLocation(击打法线) - 线进行碰撞地点的表面法线。
  • InComponent(组件中) - 使踪迹冲撞的组件
  • TraceEnd - 在世界内踪迹中止位置的一点
  • TraceStart(开始跟踪) - 在世界内踪迹开始位置的一点。
  • Extent(粗细) - 如果这个向量同0相等 (向量[0.f, 0.f, 0.f]),那么进行的踪迹会被认作为0粗细 如果向量不是0的话,那么执行非零粗细跟踪。
  • HitInfo(击打信息) - 这种结构包括同踪结果有关的信息。如果踪迹没有同任何物体进行碰撞,那这可能是无效的。
    • Material(材质) - 踪迹击打的材质。
    • Material(材质) - 踪迹击打的物理材质。
    • Item(项) - 有关踪迹击打的额外信息。
    • LevelIndex(关卡索引) - 踪迹击打了BSP的关卡索引。
    • BoneName(骨骼名称) - 踪迹击打一个骨架网格组件的骨骼名称。
    • HitComponent(击打组件) - 击打踪迹的组件
  • bComplexCollision(复杂碰撞) - 如果您想使用每个多边形的碰撞,则设为真值(true)。

Actor.uc
function bool TraceComponent(out Vector HitLocation, out Vector HitNormal, PrimitiveComponent InComponent, Vector TraceEnd, optional Vector TraceStart, optional Vector Extent, optional out TraceHitInfo HitInfo, optional bool bComplexCollision)

快速踪迹

在世界内表现踪迹,如果它 没有 同任何物体碰撞,则返回真值(true)。如果一个actor有另一个actor的视野线,那么对快速检测很有用。
  • TraceEnd - 在世界内踪迹中止位置的一点
  • TraceStart(开始跟踪) - 在世界内踪迹开始位置的一点。
  • BoxExtent(盒子粗细) - 如果这个向量同0相等 (向量[0.f, 0.f, 0.f]),那么表现的踪迹会被认作为0粗细 如果向量不是0的话,那么显示非零粗细踪迹。
  • bTraceBullet(踪迹子弹) - 如果您希望踪迹表现得象子弹一样,则设为真值(true)。

Actor.uc
function bool FastTrace(Vector TraceEnd, optional Vector TraceStart, optional Vector BoxExtent, optional bool bTraceBullet);

TraceAllPhysicsAssetInteractions(跟踪所有物理资源互动)

在世界内表现踪迹撞击一个骨架网格组件的物理资源,并回到所有的击打。
  • SkelMeshComp(骨架网格组件) - 用来检测踪迹撞击的骨架网格组件。
  • EndTrace(中止踪迹) - 在世界内踪迹中止位置的一点。
  • TraceStart(开始跟踪) - 在世界里踪迹开始位置的一点
  • out_Hits(外部_击打) - 输出一个包括同踪迹结果相关的数组
    • HitActor(击打actor) - 被击打的actor
    • HitLocation(击打位置) - 踪迹击打位置的世界位置
    • HitComponent(击打组件) - 踪迹击打的击打法线
    • RayDir - 踪迹的方向。
    • StartTrace(开始踪迹) - 踪迹开始位置的世界位置。
    • HitInfo(击打信息) - 这种结构包括同踪结果有关的信息。如果踪迹没有同任何物体进行碰撞,那这可能是无效的。
      • Material(材质) - 踪迹击打的材质。
      • Material(材质) - 踪迹击打的物理材质。
      • Item(项) - 有关踪迹击打的额外信息。
      • LevelIndex(关卡索引) - 踪迹击打了BSP的关卡索引。
      • BoneName(骨骼名称) - 踪迹击打一个骨架网格组件的骨骼名称。
      • HitComponent(击打组件) - 击打踪迹的组件
  • Extent(粗细) - 如果这个向量同0相等 (向量[0.f, 0.f, 0.f]),那么进行的踪迹会被认作为0粗细 如果向量不是0的话,那么显示非零粗细踪迹。
  • 如果任何踪迹被监测则返回真值(true)

Actor.uc
function bool TraceAllPhysicsAssetInteractions(SkeletalMeshComponent SkelMeshComp, Vector EndTrace, Vector StartTrace, out Array<ImpactInfo> out_Hits, optional Vector Extent);

IsOverlapping(正在覆盖)

如果这个actor正在覆盖A,则返回真值(true)。
  • A - 检测覆盖条件的其他actor

Actor.uc
function bool IsOverlapping(Actor A);

GetBoundingCylinder(绑定圆柱体)

如果可能,回到绑定圆柱体的半径和高度。
  • CollisionRadius -碰撞半径/范围
  • CollisionHeight - 碰撞高度

Actor.uc
function GetBoundingCylinder(out float CollisionRadius, out float CollisionHeight) const;

IsBlockedBy被屏蔽

如果这个actor正在被other屏蔽,则返回真值(true)。
  • Other(其他) - 如果other(其他)正在屏蔽这个acto,那么Other(其他)是用来检测的

Actor.uc
function bool IsBlockedBy(const Actor Other) const;

TOUCHINGACTORS(触碰actor)

返回所有正在触碰这个actor的所有actor的交互函数。
  • BaseClass(基类) - actor返回的类
  • Actor - 同线触碰的actor

Actor.uc
iterator function TouchingActors(class<Actor> BaseClass, out Actor Actor);

TRACEACTORS(踪迹actor)

一个返回所有actor的交互函数;在世界中两点之间的TraceHitInfos(踪迹击打信息) 这对表现线性检测十分有用,而线性检测可以包括或剔除特定的actor种类,或者其他条件。
  • BaseClass(基类) - actor返回的类
  • Actor - 同线触碰的actor
  • HitLoc(击打位置) - 在世界中线所碰撞的位置。
  • HitNorm(击打法线) - 线进行碰撞处的表面法线。
  • End(中止) - 在世界内跟踪结束位置的一点。
  • Start(开始) - 在世界内踪迹开始位置的一点。
  • Extent(粗细) - 如果这个向量同0相等 (向量[0.f, 0.f, 0.f]),那么进行的踪迹会被认作为0粗细 如果向量不是0的话,那么执行非零粗细跟踪。
  • HitInfo(击打信息) - 这种结构包括同踪结果有关的信息。如果踪迹没有同任何物体进行碰撞,那这可能是无效的。
    • Material(材质) - 踪迹击打的材质。
    • Material(材质) - 踪迹击打的物理材质。
    • Item(项) - 有关踪迹击打的额外信息。
    • LevelIndex(关卡索引) - 踪迹击打了BSP的关卡索引。
    • BoneName(骨骼名称) - 踪迹击打一个骨架网格组件的骨骼名称。
    • HitComponent(击打组件) - 击打踪迹的组件
  • ExtraTraceFlags - 提供踪迹算法提示的额外踪迹标记
    • TRACEFLAG_Bullet(跟踪标记_子弹) - 踪迹的表现就象子弹。

Actor.uc
iterator function TraceActors(class<Actor> BaseClass, out Actor Actor, out Vector HitLoc, out Vector HitNorm, Vector End, optional Vector Start, optional Vector Extent, optional out TraceHitInfo HitInfo, optional int ExtraTraceFlags);

VISIBLECOLLIDINGACTORS(可见碰撞actor)

一个在特定的半径中返回所有碰撞actor(b碰撞actor设置为真值)的交互器函数,对这个特定范围来说,它从位置(默认为调用者的位置)到actor位置的踪迹不会击打世界。
  • BaseClass(基类) - actor返回的类
  • Actor - 同线触碰的actor
  • Radius - 盒子的范围
  • Loc - 盒子或球体中心所在的世界位置。
  • bIgnoreHidden - 被忽略的隐藏actor
  • Extent(粗细) - 如果这个向量同0相等 (向量[0.f, 0.f, 0.f]),那么进行的踪迹会被认作为0粗细 如果向量不是0的话,那么执行非零粗细跟踪。
  • bTraceActors - 执行视野线检查,以确保actor对调用者可见。
  • InterfaceClass - 排除不实现这个界面的actor。如果它的值为无,则忽略它。
  • HitInfo(击打信息) - 这种结构包括同踪结果有关的信息。如果踪迹没有同任何物体进行碰撞,那这可能是无效的。
    • Material(材质) - 踪迹击打的材质。
    • Material(材质) - 踪迹击打的物理材质。
    • Item(项) - 有关踪迹击打的额外信息。
    • LevelIndex(关卡索引) - 踪迹击打了BSP的关卡索引。
    • BoneName(骨骼名称) - 踪迹击打一个骨架网格组件的骨骼名称。
    • HitComponent(击打组件) - 击打踪迹的组件

Actor.uc
iterator function VisibleCollidingActors(class<Actor> BaseClass, out Actor Actor, float Radius, optional Vector Loc, optional bool bIgnoreHidden, optional Vector Extent, optional bool bTraceActors, optional class<Interface> InterfaceClass, optional out TraceHitInfo HitInfo);

COLLIDINGACTORS(碰撞actor)

在一定范围内返回碰撞(bCollideActors 设置为真值)的一个交互器函数。bUseOverlapCheck(使用覆盖检测)使用一个和球面对盒子检测,而不是检测物体的中心是否在一个球体当中。
  • BaseClass(基类) - actor返回的类
  • Actor - 同线触碰的actor
  • Radius - 依赖于bUseOverlapCheck(使用覆盖检测)的球面半径或盒子的面积。
  • Loc - 盒子或球体中心所在的世界位置。
  • bUseOverlapCheck - 使用一个和球面对盒子检测,而不是检测物体的中心是否在一个球体当中。
  • InterfaceClass - 排除不实现这个界面的actor。如果它的值为无,则忽略它。
  • HitInfo(击打信息) - 这种结构包括同踪结果有关的信息。如果踪迹没有同任何物体进行碰撞,那这可能是无效的。
    • Material(材质) - 踪迹击打的材质。
    • Material(材质) - 踪迹击打的物理材质。
    • Item(项) - 有关踪迹击打的额外信息。
    • LevelIndex(关卡索引) - 踪迹击打了BSP的关卡索引。
    • BoneName(骨骼名称) - 踪迹击打一个骨架网格组件的骨骼名称。
    • HitComponent(击打组件) - 击打踪迹的组件

Actor.uc
iterator function CollidingActors(class<Actor> BaseClass, out Actor Actor, float Radius, optional Vector Loc, optional bool bUseOverlapCheck, optional class<Interface> InterfaceClass, optional out TraceHitInfo HitInfo);

OVERLAPPINGACTORS(覆盖actor)

一个返回碰撞actor(bCollideActor设置为真值)的交互器函数,这个actor从位置(Loc)和/半径(radius)覆盖球体
  • BaseClass(基类) - actor返回的类
  • out_Actor - 在每个交互器中返回了的actor
  • Radius - 用来进行覆盖检测的球体半径
  • Loc - 用来进行覆盖检测的球体中心 (可选,否则调用者的位置会被使用)
  • bIgnoreHidden - 如果为真值,忽略bHidden(隐藏)actor

Actor.uc
iterator function OverlappingActors(class<Actor> BaseClass, out Actor out_Actor, float Radius, optional Vector Loc, optional bool bIgnoreHidden);

碰撞类型


您在游戏中可以选择一些碰撞类型。主要的方法是把关闭的网格用作碰撞外壳。

骨架网格物体碰撞外壳

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

静态网格碰撞外壳

静态网格碰撞外壳部分以静态网格方式储存。静态网格碰撞外壳用和静态网格一样的方式显示,所以比起屏蔽体积来说更加节省内存。

在静态网格物体浏览器中,您可以改变所使用的碰撞外壳的属性:

  • UseSimpleRigidBodyCollision - 这个项目默认为真值。如果这个值是真的(true),并且碰撞外壳存在,那么碰撞外壳会变成一系列凹凸外壳,它会用来计算物理物体(比如骑车或者破碎娃娃)碰撞冲撞这个静态网格。如果 UseSimpleRigidBodyCollision(使用简化刚体)为真值并且没有碰撞外壳,刚体不会同这个静态网格进行碰撞。如果UseSimpleRigidBodyCollision(使用简化刚体)为假(false)并且物理引擎会同静态网格上的每个多边形进行碰撞,如果静态网格的多边形非常之大,那么仅使用这个选项。
  • UseSimpleRigidBodyCollision(使用简化刚体碰撞) - 这个项目默认为真值。如果这个是真值(true),并且碰撞外壳还在的话,则会被用作非零粗细线性检测。这包括像玩家运动这样的事情,但是不包括类似于武器开火的事情。如果这是真值(true),并且有碰撞外壳,则不会使用多边形碰撞。如果您设置 UseSimpleBoxCollision(使用简单盒子碰撞)为假值(false),就会根据材质来使用每个多边形碰撞。如果当您没有碰撞模型,如果您设置 UseSimpleBoxCollision(使用简单盒子碰撞)为真值,那就不会有碰撞外壳。
  • UseSimpleRigidBodyCollision(使用简化刚体碰撞) - 这个项目默认为真值。如果是真值(true)则碰撞外壳如果存在,则会为零粗细线性检测所用。这包括了大多数武器火焰、透镜火光轨迹等等。如果您设置UseSimpleLineCollision(使用简化刚体碰撞)为真值(true),当您没有碰撞模型,或如果您设置UseSimpleLineCollision(使用简化刚体碰撞)为假(false),则根据材质设置使用每个多边形碰撞。