UE4之PhysX物理基础
UE4默认会创建简单碰撞和复杂碰撞两种形态,然后基于用户需要进行Query(简单查询 vs 复杂查询), PhysX会使用相应形态来进行碰撞检测(Collision Detection)。
常见的物理查询有三种:Raycast(零大小的射线检测,即有向线段)、Sweep(非零大小的检测,即扫掠体)和Overlap(空间相交检测)。根据设置的Response,来决定是Ignore(忽略)、Overlap(发出重叠事件)、还是Block(阻挡物体,并发出阻挡事件)。
也可以在PhysX上进行各种复杂的物理模拟(开启Simulate),如重力,刚体碰撞、软体变形、流体运动等,然后取回结果,更新场景物件的Transform,来为游戏提供丰富的物理表现。
在PhysX中,物理查询与物理模拟是两套完全独立的体系。
碰撞体
简单碰撞
简单碰撞的几何体类型有:盒体(Box)、 球体(Sphere)、凸包(Convex Meshe)和胶囊体(Capsule)。

AABB:Axis-Aligned Bounding Boxes(轴向包围盒)
OBB:Oriented Bounding Boxes(有向包围盒)
k-DOP:Discrete Oriented Polytope(离散有向多面体)
Convex Hull:凸壳
Aggregate Geometry:聚合几何体,多个各类简单碰撞几何体的集合
简单碰撞游戏中常用于:
① 角色(胶囊体)移动过程的碰撞检测
② 榴弹枪、手雷等投掷物的碰撞检测
③ 用于物理模拟
复杂碰撞
复杂碰撞是模型的三角网格体(Triangle Mesh)或地形高度图(Height Field)。

复杂碰撞游戏中常用于:
① 子弹的碰撞检测
② 刀等近战武器碰撞检测
UE中的简单碰撞和复杂碰撞
碰撞几何体类型
/** UnrealEngine\Engine\Source\ThirdParty\PhysX3\PhysX_3.4\Include\geometry\PxGeometry.h **/ /** \brief A geometry type. Used to distinguish the type of a ::PxGeometry object. */ struct PxGeometryType { enum Enum { eSPHERE, // 球体 ePLANE, // 平面 注:UE中没有该类型 eCAPSULE, // 胶囊体 eBOX, // 正方体、长方体 eCONVEXMESH, // 凸包 eTRIANGLEMESH, // 三角网格体 eHEIGHTFIELD, // 高度图 eGEOMETRY_COUNT, //!< internal use only! eINVALID = -1 //!< internal use only! }; };
不同对象使用的碰撞几何体类型
|
Sphere、Capsules、Boxes |
Convex Meshes |
Triangle Meshes |
Height Fields |
|
|
SkeletalMesh |
YES |
YES |
NO |
NO |
|
StaticMesh |
YES |
YES |
YES |
NO |
|
Landscape |
NO |
NO |
YES |
YES |
注:p.bUseUnifiedHeightfield // 已废弃,始终会使用高度场 相关逻辑详见ULandscapeHeightfieldCollisionComponent和ULandscapeMeshCollisionComponent
使用简单碰撞和复杂碰撞
/** UnrealEngine\Engine\Source\Runtime\PhysicsCore\Public\BodySetupEnums.h **/ UENUM(BlueprintType) enum ECollisionTraceFlag { /** Use project physics settings (DefaultShapeComplexity) */ CTF_UseDefault UMETA(DisplayName="Project Default"), // 使用Project Setting里面的设置 /** Create both simple and complex shapes. Simple shapes are used for regular scene queries and collision tests. Complex shape (per poly) is used for complex scene queries.*/ CTF_UseSimpleAndComplex UMETA(DisplayName = "Simple And Complex"), // 同时使用简单碰撞和复杂碰撞 /** Create only simple shapes. Use simple shapes for all scene queries and collision tests.*/ CTF_UseSimpleAsComplex UMETA(DisplayName = "Use Simple Collision As Complex"), // 使用简单碰撞作为复杂碰撞 /** Create only complex shapes (per poly). Use complex shapes for all scene queries and collision tests. Can be used in simulation for static shapes only (i.e can be collided against but not moved through forces or velocity.) */ CTF_UseComplexAsSimple UMETA(DisplayName = "Use Complex Collision As Simple"), // 使用复杂碰撞作为简单碰撞 CTF_MAX, };
详细说明如下:
|
设置 |
描述 |
|---|---|
|
Project Default |
CTF_UseDefault 物件的Collision Complexity设置为Project Default时,将使用Project Settings中的Default Shape Complexity。 注:若Project Settings的Default Shape Complexity也为Project Default,则同时创建简单碰撞和复杂碰撞,即Simple And Complex。 |
|
Simple And Complex |
CTF_UseSimpleAndComplex 同时创建简单碰撞和复杂碰撞。简单碰撞用于常规场景查询和碰撞检测,复杂(逐多边形)碰撞用于复杂场景查询。 |
|
Use Simple Collision As Complex |
CTF_UseSimpleAsComplex 使用简单碰撞作为复杂碰撞。 注1:当请求复杂查询,引擎仍将查询简单碰撞。 注2:PhysX引擎中只创建简单碰撞,这有助于节约内存。 注3:几何体的简单碰撞计算往往更简单,性能更好。 注4:复杂碰撞在cook时,不会打进包中。详见:BodySetup.cpp中的UBodySetup::GetCookInfo函数 |
|
Use Complex Collision As Simple |
CTF_UseComplexAsSimple 使用复杂碰撞作为简单碰撞。 注1:当请求简单查询,引擎仍将查询复杂碰撞。 注2:物体不能进行Simulate;但可与其他模拟(简单)物体进行碰撞检测。 注3:PhysX引擎中只创建复杂碰撞,这有助于节约内存。 注4:简单碰撞在cook时,不会打进包中。详见:BodySetup.cpp中的UBodySetup::GetCookInfo函数 |

StaticMesh的简单碰撞和复杂碰撞

在StaticMesh编辑器中,为模型生成和删除简单碰撞

选中简单碰撞后,还可以对其进行移动、缩放、旋转编辑

注:不需要简单碰撞和复杂碰撞时,可以将物体设置为NoCollision
通过在Section中去掉Enable Collision勾选,可以把该Section的复杂碰撞去掉

可以将某一级lod作为物体的复杂碰撞 注:缺省为lod0
SkeletalMesh的简单碰撞和复杂碰撞
胶囊体简单碰撞

用于被子弹击中判定的复杂碰撞体

注:Physics Asset由一系列简单形状(如球体、胶囊体、盒体等)组成的碰撞体集合,比较高效
Landscape的碰撞
当Landscape的Collision Mip Level和Simple Collision Mip Level设置成一样时,简单碰撞和复杂碰撞共用一套碰撞

碰撞可视化
光照(Lit)模式

showflag.collision 1

简单碰撞(Player Collision)模式

注:选择Player Collision
showflag.collisionPawn 1

注1:这种简单碰撞查看方式,读取的并非是物理碰撞数据,而是模型上的数据,只能大致能反映简单碰撞的情况
注2:在PhysX引擎中,简单碰撞的PxShape的Flags为:eSIMULATION_SHAPE | eSCENE_QUERY_SHAPE | eVISUALIZATION
复杂碰撞(Visibility Collision)模式

注:选择Visibility Collision
showflag.collisionVisibility 1

注1:这种复杂碰撞查看方式,读取的并非是物理碰撞数据,而是模型上的数据,只能大致能反映复杂碰撞的情况
注2:在PhysX引擎中,复杂碰撞的PxShape的Flags为:eSCENE_QUERY_SHAPE | eVISUALIZATION
相关代码说明
bool FStaticMeshSceneProxy::IsCollisionView(const FEngineShowFlags& EngineShowFlags, bool& bDrawSimpleCollision, bool& bDrawComplexCollision) const
FPrimitiveViewRelevance FStaticMeshSceneProxy::GetViewRelevance(const FSceneView* View) const
void FStaticMeshSceneProxy::GetDynamicMeshElements(const TArray<const FSceneView*>& Views, const FSceneViewFamily& ViewFamily, uint32 VisibilityMap, FMeshElementCollector& Collector) const
以上2个函数中会调用IsCollisionView函数,来获取是否绘制Simple碰撞和Complex碰撞。
PXVIS collision
光照(Lit)模式:

PXVIS collision结果如下:

PVD中查看

注:Box为简单碰撞,球体为复杂碰撞

注:选中物体使用的是简单碰撞,碰撞设置为Use Simple Collision As Complex


一个战车模型,简单碰撞由9个Box和4个ConvexMesh组成,复杂碰撞由1个TriangleMesh组成

模型在UE中如下:

同一个模型,在场景摆放两个实例。这两个实例的ConvexMesh和Material是共享的。 注:但PxShape、PxConvexMeshGeometry、PxTriangleMeshGeometry实例是分开的

模型在UE中如下:

创建PhysX Shape
创建PhysX Shape会带上碰撞查询或物理模拟Flag
/** UnrealEngine\Engine\Source\Runtime\Engine\Private\PhysicsEngine\PhysicsInterfacePhysX.cpp **/ FPhysicsShapeHandle_PhysX FPhysicsInterface_PhysX::CreateShape(physx::PxGeometry* InGeom, bool bSimulation /*= true*/, bool bQuery /*= true*/, UPhysicalMaterial* InSimpleMaterial /*= nullptr*/, TArray<UPhysicalMaterial*>* InComplexMaterials /*= nullptr*/) { FPhysicsShapeHandle_PhysX OutHandle; if(InGeom) { check(GPhysXSDK); const PxMaterial* DefaultMaterial = GetDefaultPhysMaterial(); PxShapeFlags Flags; if(bSimulation) { Flags |= PxShapeFlag::Enum::eSIMULATION_SHAPE; } if(bQuery) { Flags |= PxShapeFlag::Enum::eSCENE_QUERY_SHAPE; } Flags |= PxShapeFlag::Enum::eVISUALIZATION; PxShape* NewShape = GPhysXSDK->createShape(*InGeom, *DefaultMaterial, true, Flags); if(NewShape && (InSimpleMaterial || InComplexMaterials)) { OutHandle = FPhysicsShapeHandle_PhysX(NewShape); TArrayView<UPhysicalMaterial*> ComplexMaterialsView(InComplexMaterials ? InComplexMaterials->GetData() : nullptr, InComplexMaterials ? InComplexMaterials->Num() : 0); FBodyInstance::ApplyMaterialToShape_AssumesLocked(OutHandle, InSimpleMaterial, ComplexMaterialsView); } } return OutHandle; }
创建PxRigidStatic(静态刚体对象)
UBodySetup --》FBodyInstance --》PxRigidStatic
StaticMesh静态刚体

> PhysX3CHECKED_x64.dll!physx::NpPhysics::createRigidStatic(const physx::PxTransform & globalPose={...}) Line 391 C++
UE4Editor-Engine-Win64-Debug.dll!FPhysicsInterface_PhysX::CreateActor(const FActorCreationParams & Params={...}, FPhysicsActorHandle_PhysX & Handle={...}) Line 137 C++
UE4Editor-Engine-Win64-Debug.dll!FInitBodiesHelperBase::CreateActor_AssumesLocked(FBodyInstance * Instance=0x000001ba144ad210, const FTransform & Transform={...}) Line 1208 C++
UE4Editor-Engine-Win64-Debug.dll!FInitBodiesHelperBase::CreateShapesAndActors() Line 1337 C++
UE4Editor-Engine-Win64-Debug.dll!FInitBodiesHelperBase::InitBodies() Line 1372 C++
UE4Editor-Engine-Win64-Debug.dll!FBodyInstance::InitBody(UBodySetup * Setup=0x000001ba14952200, const FTransform & Transform={...}, UPrimitiveComponent * PrimComp=0x000001ba144acf00, FPhysScene_PhysX * InRBScene=0x000001ba145caa00, const FInitBodySpawnParams & SpawnParams={...}) Line 1518 C++
UE4Editor-Engine-Win64-Debug.dll!UPrimitiveComponent::OnCreatePhysicsState() Line 795 C++
UE4Editor-Engine-Win64-Debug.dll!UStaticMeshComponent::OnCreatePhysicsState() Line 608 C++
UE4Editor-Engine-Win64-Debug.dll!UActorComponent::CreatePhysicsState(bool bAllowDeferral=true) Line 1478 C++
UE4Editor-Engine-Win64-Debug.dll!UActorComponent::ExecuteRegisterEvents(FRegisterComponentContext * Context=0x00000031aad6c7b8) Line 1537 C++
UE4Editor-Engine-Win64-Debug.dll!UActorComponent::RegisterComponentWithWorld(UWorld * InWorld=0x000001ba14478100, FRegisterComponentContext * Context=0x00000031aad6c7b8) Line 1223 C++
UE4Editor-Engine-Win64-Debug.dll!AActor::IncrementalRegisterComponents(int NumComponentsToRegister=2147483647, FRegisterComponentContext * Context=0x00000031aad6c7b8) Line 4582 C++
UE4Editor-Engine-Win64-Debug.dll!ULevel::IncrementalUpdateComponents(int NumComponentsToUpdate=0, bool bRerunConstructionScripts=true, FRegisterComponentContext * Context=0x00000031aad6c7b8) Line 1094 C++
UE4Editor-Engine-Win64-Debug.dll!ULevel::UpdateLevelComponents(bool bRerunConstructionScripts=true, FRegisterComponentContext * Context=0x00000031aad6c7b8) Line 971 C++
UE4Editor-Engine-Win64-Debug.dll!UWorld::UpdateWorldComponents(bool bRerunConstructionScripts=true, bool bCurrentLevelOnly=true, FRegisterComponentContext * Context=0x00000031aad6c7b8) Line 1963 C++
UE4Editor-Engine-Win64-Debug.dll!UWorld::InitializeActorsForPlay(const FURL & InURL={...}, bool bResetTime=true, FRegisterComponentContext * Context=0x00000031aad6c7b8) Line 4202 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::LoadMap(FWorldContext & WorldContext={...}, FURL URL={...}, UPendingNetGame * Pending=0x0000000000000000, FString & Error={...}) Line 13058 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::Browse(FWorldContext & WorldContext={...}, FURL URL={...}, FString & Error={...}) Line 12303 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::TickWorldTravel(FWorldContext & Context={...}, float DeltaSeconds=0.0135118999) Line 12501 C++
UE4Editor-Engine-Win64-Debug.dll!UGameEngine::Tick(float DeltaSeconds=0.0135118999, bool bIdleMode=false) Line 1783 C++
UE4Editor-Win64-Debug.exe!FEngineLoop::Tick() Line 4836 C++
UE4Editor-Win64-Debug.exe!EngineTick() Line 63 C++
UE4Editor-Win64-Debug.exe!GuardedMain(const wchar_t * CmdLine=0x000001ba66c9af80) Line 172 C++
UE4Editor-Win64-Debug.exe!WinMain(HINSTANCE__ * hInInstance=0x00007ff7d7570000, HINSTANCE__ * hPrevInstance=0x0000000000000000, char * __formal=0x000001ba627c4936, int nCmdShow=10) Line 257 C++
LandScape HeightField静态刚体

Landscape用一个PhysX高度场对象(HeightFieldGeometry)来进行地形刚体碰撞

> PhysX3CHECKED_x64.dll!physx::NpPhysics::createRigidStatic(const physx::PxTransform & globalPose={...}) Line 391 C++
UE4Editor-Landscape-Win64-Debug.dll!ULandscapeHeightfieldCollisionComponent::OnCreatePhysicsState() Line 322 C++
UE4Editor-Engine-Win64-Debug.dll!UActorComponent::CreatePhysicsState(bool bAllowDeferral=true) Line 1478 C++
UE4Editor-Engine-Win64-Debug.dll!UActorComponent::ExecuteRegisterEvents(FRegisterComponentContext * Context=0x0000003f1716c718) Line 1537 C++
UE4Editor-Engine-Win64-Debug.dll!UActorComponent::RegisterComponentWithWorld(UWorld * InWorld=0x0000023906b74100, FRegisterComponentContext * Context=0x0000003f1716c718) Line 1223 C++
UE4Editor-Engine-Win64-Debug.dll!AActor::IncrementalRegisterComponents(int NumComponentsToRegister=2147483647, FRegisterComponentContext * Context=0x0000003f1716c718) Line 4619 C++
UE4Editor-Engine-Win64-Debug.dll!ULevel::IncrementalUpdateComponents(int NumComponentsToUpdate=0, bool bRerunConstructionScripts=true, FRegisterComponentContext * Context=0x0000003f1716c718) Line 1094 C++
UE4Editor-Engine-Win64-Debug.dll!ULevel::UpdateLevelComponents(bool bRerunConstructionScripts=true, FRegisterComponentContext * Context=0x0000003f1716c718) Line 971 C++
UE4Editor-Engine-Win64-Debug.dll!UWorld::UpdateWorldComponents(bool bRerunConstructionScripts=true, bool bCurrentLevelOnly=true, FRegisterComponentContext * Context=0x0000003f1716c718) Line 1963 C++
UE4Editor-Engine-Win64-Debug.dll!UWorld::InitializeActorsForPlay(const FURL & InURL={...}, bool bResetTime=true, FRegisterComponentContext * Context=0x0000003f1716c718) Line 4202 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::LoadMap(FWorldContext & WorldContext={...}, FURL URL={...}, UPendingNetGame * Pending=0x0000000000000000, FString & Error={...}) Line 13058 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::Browse(FWorldContext & WorldContext={...}, FURL URL={...}, FString & Error={...}) Line 12303 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::TickWorldTravel(FWorldContext & Context={...}, float DeltaSeconds=0.0138655975) Line 12501 C++
UE4Editor-Engine-Win64-Debug.dll!UGameEngine::Tick(float DeltaSeconds=0.0138655975, bool bIdleMode=false) Line 1783 C++
UE4Editor-Win64-Debug.exe!FEngineLoop::Tick() Line 4836 C++
UE4Editor-Win64-Debug.exe!EngineTick() Line 63 C++
UE4Editor-Win64-Debug.exe!GuardedMain(const wchar_t * CmdLine=0x00000239669faf80) Line 172 C++
UE4Editor-Win64-Debug.exe!WinMain(HINSTANCE__ * hInInstance=0x00007ff7419f0000, HINSTANCE__ * hPrevInstance=0x0000000000000000, char * __formal=0x0000023962574946, int nCmdShow=10) Line 257 C++
创建PxRigidDynamic(动态刚体对象)
StaticMesh动态刚体
UBodySetup --》FBodyInstance --》PxRigidDynamic

调用堆栈如下:

> PhysX3CHECKED_x64.dll!physx::NpPhysics::createRigidDynamic(const physx::PxTransform & globalPose={...}) Line 430 C++
UE4Editor-Engine-Win64-Debug.dll!FPhysicsInterface_PhysX::CreateActor(const FActorCreationParams & Params={...}, FPhysicsActorHandle_PhysX & Handle={...}) Line 147 C++
UE4Editor-Engine-Win64-Debug.dll!FInitBodiesHelperBase::CreateActor_AssumesLocked(FBodyInstance * Instance=0x000001ba144ae010, const FTransform & Transform={...}) Line 1212 C++
UE4Editor-Engine-Win64-Debug.dll!FInitBodiesHelperBase::CreateShapesAndActors() Line 1337 C++
UE4Editor-Engine-Win64-Debug.dll!FInitBodiesHelperBase::InitBodies() Line 1372 C++
UE4Editor-Engine-Win64-Debug.dll!FBodyInstance::InitBody(UBodySetup * Setup=0x000001ba14951c00, const FTransform & Transform={...}, UPrimitiveComponent * PrimComp=0x000001ba144add00, FPhysScene_PhysX * InRBScene=0x000001ba145caa00, const FInitBodySpawnParams & SpawnParams={...}) Line 1523 C++
UE4Editor-Engine-Win64-Debug.dll!UPrimitiveComponent::OnCreatePhysicsState() Line 795 C++
UE4Editor-Engine-Win64-Debug.dll!UStaticMeshComponent::OnCreatePhysicsState() Line 608 C++
UE4Editor-Engine-Win64-Debug.dll!UActorComponent::CreatePhysicsState(bool bAllowDeferral=true) Line 1478 C++
UE4Editor-Engine-Win64-Debug.dll!UActorComponent::ExecuteRegisterEvents(FRegisterComponentContext * Context=0x00000031aad6c7b8) Line 1537 C++
UE4Editor-Engine-Win64-Debug.dll!UActorComponent::RegisterComponentWithWorld(UWorld * InWorld=0x000001ba14478100, FRegisterComponentContext * Context=0x00000031aad6c7b8) Line 1223 C++
UE4Editor-Engine-Win64-Debug.dll!AActor::IncrementalRegisterComponents(int NumComponentsToRegister=2147483647, FRegisterComponentContext * Context=0x00000031aad6c7b8) Line 4582 C++
UE4Editor-Engine-Win64-Debug.dll!ULevel::IncrementalUpdateComponents(int NumComponentsToUpdate=0, bool bRerunConstructionScripts=true, FRegisterComponentContext * Context=0x00000031aad6c7b8) Line 1094 C++
UE4Editor-Engine-Win64-Debug.dll!ULevel::UpdateLevelComponents(bool bRerunConstructionScripts=true, FRegisterComponentContext * Context=0x00000031aad6c7b8) Line 971 C++
UE4Editor-Engine-Win64-Debug.dll!UWorld::UpdateWorldComponents(bool bRerunConstructionScripts=true, bool bCurrentLevelOnly=true, FRegisterComponentContext * Context=0x00000031aad6c7b8) Line 1963 C++
UE4Editor-Engine-Win64-Debug.dll!UWorld::InitializeActorsForPlay(const FURL & InURL={...}, bool bResetTime=true, FRegisterComponentContext * Context=0x00000031aad6c7b8) Line 4202 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::LoadMap(FWorldContext & WorldContext={...}, FURL URL={...}, UPendingNetGame * Pending=0x0000000000000000, FString & Error={...}) Line 13058 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::Browse(FWorldContext & WorldContext={...}, FURL URL={...}, FString & Error={...}) Line 12303 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::TickWorldTravel(FWorldContext & Context={...}, float DeltaSeconds=0.0135118999) Line 12501 C++
UE4Editor-Engine-Win64-Debug.dll!UGameEngine::Tick(float DeltaSeconds=0.0135118999, bool bIdleMode=false) Line 1783 C++
UE4Editor-Win64-Debug.exe!FEngineLoop::Tick() Line 4836 C++
UE4Editor-Win64-Debug.exe!EngineTick() Line 63 C++
UE4Editor-Win64-Debug.exe!GuardedMain(const wchar_t * CmdLine=0x000001ba66c9af80) Line 172 C++
UE4Editor-Win64-Debug.exe!WinMain(HINSTANCE__ * hInInstance=0x00007ff7d7570000, HINSTANCE__ * hPrevInstance=0x0000000000000000, char * __formal=0x000001ba627c4936, int nCmdShow=10) Line 257 C++
角色Capsule(胶囊体)动态刚体


> PhysX3CHECKED_x64.dll!physx::NpPhysics::createRigidDynamic(const physx::PxTransform & globalPose={...}) Line 430 C++
UE4Editor-Engine-Win64-Debug.dll!FPhysicsInterface_PhysX::CreateActor(const FActorCreationParams & Params={...}, FPhysicsActorHandle_PhysX & Handle={...}) Line 147 C++
UE4Editor-Engine-Win64-Debug.dll!FInitBodiesHelperBase::CreateActor_AssumesLocked(FBodyInstance * Instance=0x000001ab1a956e10, const FTransform & Transform={...}) Line 1212 C++
UE4Editor-Engine-Win64-Debug.dll!FInitBodiesHelperBase::CreateShapesAndActors() Line 1337 C++
UE4Editor-Engine-Win64-Debug.dll!FInitBodiesHelperBase::InitBodies() Line 1372 C++
UE4Editor-Engine-Win64-Debug.dll!FBodyInstance::InitBody(UBodySetup * Setup=0x000001ab03328a00, const FTransform & Transform={...}, UPrimitiveComponent * PrimComp=0x000001ab1a956b00, FPhysScene_PhysX * InRBScene=0x000001ab03842200, const FInitBodySpawnParams & SpawnParams={...}) Line 1523 C++
UE4Editor-Engine-Win64-Debug.dll!UPrimitiveComponent::OnCreatePhysicsState() Line 795 C++
UE4Editor-Engine-Win64-Debug.dll!UActorComponent::CreatePhysicsState(bool bAllowDeferral=true) Line 1478 C++
UE4Editor-Engine-Win64-Debug.dll!UActorComponent::ExecuteRegisterEvents(FRegisterComponentContext * Context=0x00000075c396c6e8) Line 1537 C++
UE4Editor-Engine-Win64-Debug.dll!UActorComponent::RegisterComponentWithWorld(UWorld * InWorld=0x000001ab03a91600, FRegisterComponentContext * Context=0x00000075c396c6e8) Line 1223 C++
UE4Editor-Engine-Win64-Debug.dll!AActor::IncrementalRegisterComponents(int NumComponentsToRegister=2147483647, FRegisterComponentContext * Context=0x00000075c396c6e8) Line 4582 C++
UE4Editor-Engine-Win64-Debug.dll!ULevel::IncrementalUpdateComponents(int NumComponentsToUpdate=0, bool bRerunConstructionScripts=true, FRegisterComponentContext * Context=0x00000075c396c6e8) Line 1094 C++
UE4Editor-Engine-Win64-Debug.dll!ULevel::UpdateLevelComponents(bool bRerunConstructionScripts=true, FRegisterComponentContext * Context=0x00000075c396c6e8) Line 971 C++
UE4Editor-Engine-Win64-Debug.dll!UWorld::UpdateWorldComponents(bool bRerunConstructionScripts=true, bool bCurrentLevelOnly=true, FRegisterComponentContext * Context=0x00000075c396c6e8) Line 1963 C++
UE4Editor-Engine-Win64-Debug.dll!UWorld::InitializeActorsForPlay(const FURL & InURL={...}, bool bResetTime=true, FRegisterComponentContext * Context=0x00000075c396c6e8) Line 4202 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::LoadMap(FWorldContext & WorldContext={...}, FURL URL={...}, UPendingNetGame * Pending=0x0000000000000000, FString & Error={...}) Line 13058 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::Browse(FWorldContext & WorldContext={...}, FURL URL={...}, FString & Error={...}) Line 12303 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::TickWorldTravel(FWorldContext & Context={...}, float DeltaSeconds=0.0150188990) Line 12501 C++
UE4Editor-Engine-Win64-Debug.dll!UGameEngine::Tick(float DeltaSeconds=0.0150188990, bool bIdleMode=false) Line 1783 C++
UE4Editor-Win64-Debug.exe!FEngineLoop::Tick() Line 4836 C++
UE4Editor-Win64-Debug.exe!EngineTick() Line 63 C++
UE4Editor-Win64-Debug.exe!GuardedMain(const wchar_t * CmdLine=0x000001ab5a8baf80) Line 172 C++
UE4Editor-Win64-Debug.exe!WinMain(HINSTANCE__ * hInInstance=0x00007ff7419f0000, HINSTANCE__ * hPrevInstance=0x0000000000000000, char * __formal=0x000001ab565c4946, int nCmdShow=10) Line 257 C++
角色PhysicsAsset胶囊体动态刚体


> PhysX3CHECKED_x64.dll!physx::NpPhysics::createRigidDynamic(const physx::PxTransform & globalPose={...}) Line 430 C++
UE4Editor-Engine-Win64-Debug.dll!FPhysicsInterface_PhysX::CreateActor(const FActorCreationParams & Params={...}, FPhysicsActorHandle_PhysX & Handle={...}) Line 147 C++
UE4Editor-Engine-Win64-Debug.dll!FInitBodiesHelperBase::CreateActor_AssumesLocked(FBodyInstance * Instance=0x000001ab6bdedb40, const FTransform & Transform={...}) Line 1212 C++
UE4Editor-Engine-Win64-Debug.dll!FInitBodiesHelperBase::CreateShapesAndActors() Line 1337 C++
UE4Editor-Engine-Win64-Debug.dll!FInitBodiesHelperBase::InitBodies() Line 1372 C++
UE4Editor-Engine-Win64-Debug.dll!FBodyInstance::InitBody(UBodySetup * Setup=0x000001ab77f1fc80, const FTransform & Transform={...}, UPrimitiveComponent * PrimComp=0x000001ab5a67eb00, FPhysScene_PhysX * InRBScene=0x000001ab03842200, const FInitBodySpawnParams & SpawnParams={...}) Line 1523 C++
UE4Editor-Engine-Win64-Debug.dll!USkeletalMeshComponent::InstantiatePhysicsAsset_Internal(const UPhysicsAsset & PhysAsset={...}, const FVector & Scale3D={...}, TArray<FBodyInstance *,TSizedDefaultAllocator<32>> & OutBodies={...}, TArray<FConstraintInstance *,TSizedDefaultAllocator<32>> & OutConstraints={...}, TFunctionRef<FTransform __cdecl(int)> BoneTransformGetter={...}, FPhysScene_PhysX * PhysScene=0x000001ab03842200, USkeletalMeshComponent * OwningComponent=0x000001ab5a67eb00, int UseRootBodyIndex=0, const FPhysicsAggregateHandle_PhysX & UseAggregate={...}) Line 861 C++
UE4Editor-Engine-Win64-Debug.dll!USkeletalMeshComponent::InstantiatePhysicsAsset(const UPhysicsAsset & PhysAsset={...}, const FVector & Scale3D={...}, TArray<FBodyInstance *,TSizedDefaultAllocator<32>> & OutBodies={...}, TArray<FConstraintInstance *,TSizedDefaultAllocator<32>> & OutConstraints={...}, FPhysScene_PhysX * PhysScene=0x000001ab03842200, USkeletalMeshComponent * OwningComponent=0x000001ab5a67eb00, int UseRootBodyIndex=0, const FPhysicsAggregateHandle_PhysX & UseAggregate={...}) Line 740 C++
UE4Editor-Engine-Win64-Debug.dll!USkeletalMeshComponent::InitArticulated(FPhysScene_PhysX * PhysScene=0x000001ab03842200) Line 716 C++
UE4Editor-Engine-Win64-Debug.dll!USkeletalMeshComponent::OnCreatePhysicsState() Line 1493 C++
UE4Editor-Engine-Win64-Debug.dll!UActorComponent::CreatePhysicsState(bool bAllowDeferral=true) Line 1478 C++
UE4Editor-Engine-Win64-Debug.dll!UActorComponent::ExecuteRegisterEvents(FRegisterComponentContext * Context=0x00000075c396c6e8) Line 1537 C++
UE4Editor-Engine-Win64-Debug.dll!UActorComponent::RegisterComponentWithWorld(UWorld * InWorld=0x000001ab03a91600, FRegisterComponentContext * Context=0x00000075c396c6e8) Line 1223 C++
UE4Editor-Engine-Win64-Debug.dll!AActor::IncrementalRegisterComponents(int NumComponentsToRegister=2147483647, FRegisterComponentContext * Context=0x00000075c396c6e8) Line 4582 C++
UE4Editor-Engine-Win64-Debug.dll!ULevel::IncrementalUpdateComponents(int NumComponentsToUpdate=0, bool bRerunConstructionScripts=true, FRegisterComponentContext * Context=0x00000075c396c6e8) Line 1094 C++
UE4Editor-Engine-Win64-Debug.dll!ULevel::UpdateLevelComponents(bool bRerunConstructionScripts=true, FRegisterComponentContext * Context=0x00000075c396c6e8) Line 971 C++
UE4Editor-Engine-Win64-Debug.dll!UWorld::UpdateWorldComponents(bool bRerunConstructionScripts=true, bool bCurrentLevelOnly=true, FRegisterComponentContext * Context=0x00000075c396c6e8) Line 1963 C++
UE4Editor-Engine-Win64-Debug.dll!UWorld::InitializeActorsForPlay(const FURL & InURL={...}, bool bResetTime=true, FRegisterComponentContext * Context=0x00000075c396c6e8) Line 4202 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::LoadMap(FWorldContext & WorldContext={...}, FURL URL={...}, UPendingNetGame * Pending=0x0000000000000000, FString & Error={...}) Line 13058 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::Browse(FWorldContext & WorldContext={...}, FURL URL={...}, FString & Error={...}) Line 12303 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::TickWorldTravel(FWorldContext & Context={...}, float DeltaSeconds=0.0150188990) Line 12501 C++
UE4Editor-Engine-Win64-Debug.dll!UGameEngine::Tick(float DeltaSeconds=0.0150188990, bool bIdleMode=false) Line 1783 C++
UE4Editor-Win64-Debug.exe!FEngineLoop::Tick() Line 4836 C++
UE4Editor-Win64-Debug.exe!EngineTick() Line 63 C++
UE4Editor-Win64-Debug.exe!GuardedMain(const wchar_t * CmdLine=0x000001ab5a8baf80) Line 172 C++
UE4Editor-Win64-Debug.exe!WinMain(HINSTANCE__ * hInInstance=0x00007ff7419f0000, HINSTANCE__ * hPrevInstance=0x0000000000000000, char * __formal=0x000001ab565c4946, int nCmdShow=10) Line 257 C++
物体的物理控制
开启Query和Simulte
枚举类型定义如下:
/** UnrealEngine\Engine\Source\Runtime\Engine\Classes\Engine\EngineTypes.h **/ /** Enum used to describe what type of collision is enabled on a body. */ UENUM(BlueprintType) namespace ECollisionEnabled { enum Type { /** Will not create any representation in the physics engine. Cannot be used for spatial queries (raycasts, sweeps, overlaps) or simulation (rigid body, constraints). Best performance possible (especially for moving objects) */ NoCollision UMETA(DisplayName="No Collision"), /** Only used for spatial queries (raycasts, sweeps, and overlaps). Cannot be used for simulation (rigid body, constraints). Useful for character movement and things that do not need physical simulation. Performance gains by keeping data out of simulation tree. */ QueryOnly UMETA(DisplayName="Query Only (No Physics Collision)"), /** Only used only for physics simulation (rigid body, constraints). Cannot be used for spatial queries (raycasts, sweeps, overlaps). Useful for jiggly bits on characters that do not need per bone detection. Performance gains by keeping data out of query tree */ PhysicsOnly UMETA(DisplayName="Physics Only (No Query Collision)"), /** Can be used for both spatial queries (raycasts, sweeps, overlaps) and simulation (rigid body, constraints). */ QueryAndPhysics UMETA(DisplayName="Collision Enabled (Query and Physics)") }; }
详细说明如下:
| 类型 | 说明 |
| No Collision | 不进行任何碰撞检测 |
| Query Only (No Physics Collision) |
不开启物理模拟时的碰撞检测 用于空间查询(raycast、sweep、overlap)。用于物体移动和不需要物理模拟的对象 |
| Physics Only (No Query Collision) |
开启物理模拟时的碰撞检测 用于物理模拟(刚体、约束) |
| Collision Enabled (Query and Physics) | 不开启和开启物理模拟,都进行碰撞检测 |
Channel(信道)
Channel(信道)类型:
/** UnrealEngine\Engine\Source\Runtime\Engine\Classes\Engine\EngineTypes.h **/ /** * Enum indicating different type of objects for rigid-body collision purposes. */ UENUM(BlueprintType) enum ECollisionChannel { ECC_WorldStatic UMETA(DisplayName="WorldStatic"), ECC_WorldDynamic UMETA(DisplayName="WorldDynamic"), ECC_Pawn UMETA(DisplayName="Pawn"), ECC_Visibility UMETA(DisplayName="Visibility" , TraceQuery="1"), ECC_Camera UMETA(DisplayName="Camera" , TraceQuery="1"), ECC_PhysicsBody UMETA(DisplayName="PhysicsBody"), ECC_Vehicle UMETA(DisplayName="Vehicle"), ECC_Destructible UMETA(DisplayName="Destructible"),
/** Reserved for gizmo collision */ ECC_EngineTraceChannel1 UMETA(Hidden), ECC_EngineTraceChannel2 UMETA(Hidden), ECC_EngineTraceChannel3 UMETA(Hidden), ECC_EngineTraceChannel4 UMETA(Hidden), ECC_EngineTraceChannel5 UMETA(Hidden), ECC_EngineTraceChannel6 UMETA(Hidden), ECC_GameTraceChannel1 UMETA(Hidden), ECC_GameTraceChannel2 UMETA(Hidden), ECC_GameTraceChannel3 UMETA(Hidden), ECC_GameTraceChannel4 UMETA(Hidden), ECC_GameTraceChannel5 UMETA(Hidden), ECC_GameTraceChannel6 UMETA(Hidden), ECC_GameTraceChannel7 UMETA(Hidden), ECC_GameTraceChannel8 UMETA(Hidden), ECC_GameTraceChannel9 UMETA(Hidden), ECC_GameTraceChannel10 UMETA(Hidden), ECC_GameTraceChannel11 UMETA(Hidden), ECC_GameTraceChannel12 UMETA(Hidden), ECC_GameTraceChannel13 UMETA(Hidden), ECC_GameTraceChannel14 UMETA(Hidden), ECC_GameTraceChannel15 UMETA(Hidden), ECC_GameTraceChannel16 UMETA(Hidden), ECC_GameTraceChannel17 UMETA(Hidden), ECC_GameTraceChannel18 UMETA(Hidden), /** Add new serializeable channels above here (i.e. entries that exist in FCollisionResponseContainer) */ /** Add only nonserialized/transient flags below */ // NOTE!!!! THESE ARE BEING DEPRECATED BUT STILL THERE FOR BLUEPRINT. PLEASE DO NOT USE THEM IN CODE ECC_OverlapAll_Deprecated UMETA(Hidden), ECC_MAX, };
Collision.ListChannels
LogCollisionCommands: 0: ECC_WorldStatic (ECC World Static) LogCollisionCommands: 1: ECC_WorldDynamic (ECC World Dynamic) LogCollisionCommands: 2: ECC_Pawn (ECC Pawn) LogCollisionCommands: 3: ECC_Visibility (ECC Visibility) LogCollisionCommands: 4: ECC_Camera (ECC Camera) LogCollisionCommands: 5: ECC_PhysicsBody (ECC Physics Body) LogCollisionCommands: 6: ECC_Vehicle (ECC Vehicle) LogCollisionCommands: 7: ECC_Destructible (ECC Destructible) LogCollisionCommands: 8: ECC_EngineTraceChannel1 (ECC Engine Trace Channel 1) LogCollisionCommands: 9: ECC_EngineTraceChannel2 (ECC Engine Trace Channel 2) LogCollisionCommands: 10: ECC_EngineTraceChannel3 (ECC Engine Trace Channel 3) LogCollisionCommands: 11: ECC_EngineTraceChannel4 (ECC Engine Trace Channel 4) LogCollisionCommands: 12: ECC_EngineTraceChannel5 (ECC Engine Trace Channel 5) LogCollisionCommands: 13: ECC_EngineTraceChannel6 (ECC Engine Trace Channel 6) LogCollisionCommands: 14: ECC_GameTraceChannel1 (ECC Game Trace Channel 1) LogCollisionCommands: 15: ECC_GameTraceChannel2 (ECC Game Trace Channel 2) LogCollisionCommands: 16: ECC_GameTraceChannel3 (ECC Game Trace Channel 3) LogCollisionCommands: 17: ECC_GameTraceChannel4 (ECC Game Trace Channel 4) LogCollisionCommands: 18: ECC_GameTraceChannel5 (ECC Game Trace Channel 5) LogCollisionCommands: 19: ECC_GameTraceChannel6 (ECC Game Trace Channel 6) LogCollisionCommands: 20: ECC_GameTraceChannel7 (ECC Game Trace Channel 7) LogCollisionCommands: 21: ECC_GameTraceChannel8 (ECC Game Trace Channel 8) LogCollisionCommands: 22: ECC_GameTraceChannel9 (ECC Game Trace Channel 9) LogCollisionCommands: 23: ECC_GameTraceChannel10 (ECC Game Trace Channel 10) LogCollisionCommands: 24: ECC_GameTraceChannel11 (ECC Game Trace Channel 11) LogCollisionCommands: 25: ECC_GameTraceChannel12 (ECC Game Trace Channel 12) LogCollisionCommands: 26: ECC_GameTraceChannel13 (ECC Game Trace Channel 13) LogCollisionCommands: 27: ECC_GameTraceChannel14 (ECC Game Trace Channel 14) LogCollisionCommands: 28: ECC_GameTraceChannel15 (ECC Game Trace Channel 15) LogCollisionCommands: 29: ECC_GameTraceChannel16 (ECC Game Trace Channel 16) LogCollisionCommands: 30: ECC_GameTraceChannel17 (ECC Game Trace Channel 17) LogCollisionCommands: 31: ECC_GameTraceChannel18 (ECC Game Trace Channel 18) LogCollisionCommands: 32: ECC_OverlapAll_Deprecated (ECC Overlap All Deprecated)
新建自定义Object Chanel和Trace Channel


Preset(预设值,又称Profile,配置)

详细说明如下:
|
属性 |
说明 |
|---|---|
|
默认(Default) |
使用已在静态网格体编辑器中应用给静态网格体的设置。 |
|
自定义...(Custom...) |
为此实例设置所有自定义碰撞设置。 |
|
NoCollision |
无碰撞。 |
|
BlockAll |
在默认情况下阻挡所有Actor的WorldStatic对象。所有新自定义Channel(信道)都将使用其本身的默认Response(响应)。 |
|
OverlapAll |
在默认情况下与所有Actor重叠的WorldStatic对象。所有新自定义Channel(信道)都将使用其本身的默认Response(响应)。 |
|
BlockAllDynamic |
在默认情况下阻挡所有Actor的WorldDynamic对象。所有新自定义Channel(信道)都将使用其本身的默认Response(响应)。 |
|
OverlapAllDynamic |
在默认情况下与所有Actor重叠的WorldDynamic对象。所有新自定义Channel(信道)都将使用其本身的默认Response(响应)。 |
|
IngoreOnlyPawn |
忽略Pawn和载具的WorldDynamic对象。所有其他Channel(信道)都将设置为默认值。 |
|
OverlapOnlyPawn |
与Pawn、摄像机和载具重叠的WorldDynamic对象。所有其他Channel(信道)都将设置为默认值。 |
|
Pawn |
Pawn对象。可用于任意可操作角色或AI的胶囊体。 |
|
Spectator |
忽略除WorldStatic以外的所有其他Actor的Pawn对象。 |
|
CharacterMesh |
用于角色网格体的Pawn对象。所有其他信道都将设置为默认值。 |
|
PhysicsActor |
模拟Actor。 |
|
Destructible |
可破坏物Actor。 |
|
InvisibleWall |
不可见的WorldStatic对象。 |
|
InvisibleWallDynamic |
不可见的WorldDynamic对象。 |
|
Trigger |
用于触发器的WorldDynamic对象。所有其他信道都将设置为默认值。 |
|
Ragdoll |
模拟骨架网格体组件。所有其他信道都将设置为默认值。 |
|
Vehicle |
阻挡载具(Vehicle)、WorldStatic和WorldDynamic的载具对象。所有其他信道都将设置为默认值。 |
|
UI |
在默认情况下与所有Actor重叠的WorldStatic对象。所有新自定义信道都将使用其本身的默认响应。 |
Collision.ListProfiles
LogCollisionCommands: 0: NoCollision
LogCollisionCommands: 1: BlockAll
LogCollisionCommands: 2: OverlapAll
LogCollisionCommands: 3: BlockAllDynamic
LogCollisionCommands: 4: OverlapAllDynamic
LogCollisionCommands: 5: IgnoreOnlyPawn
LogCollisionCommands: 6: OverlapOnlyPawn
LogCollisionCommands: 7: Pawn
LogCollisionCommands: 8: Spectator
LogCollisionCommands: 9: CharacterMesh
LogCollisionCommands: 10: PhysicsActor
LogCollisionCommands: 11: Destructible
LogCollisionCommands: 12: InvisibleWall
LogCollisionCommands: 13: InvisibleWallDynamic
LogCollisionCommands: 14: Trigger
LogCollisionCommands: 15: Ragdoll
LogCollisionCommands: 16: Vehicle
LogCollisionCommands: 17: UI
碰撞Response(响应)
/** UnrealEngine\Engine\Source\Runtime\Engine\Classes\Engine\EngineTypes.h **/ /** Enum indicating how each type should respond */ UENUM(BlueprintType, meta=(ScriptName="CollisionResponseType")) enum ECollisionResponse { ECR_Ignore UMETA(DisplayName="Ignore"), ECR_Overlap UMETA(DisplayName="Overlap"), ECR_Block UMETA(DisplayName="Block"), ECR_MAX, };
两个物体之间的碰撞规则
|
#
|
物体B | |||
| Ignore | Overlap | Block | ||
| 物体A | Ignore | Ignore | Ignore | Ignore |
| Overlap | Ignore | Overlap | Overlap | |
| Block | Ignore | Overlap | Block | |
注1:物体勾选了Simulation Generates Hit Events(模拟生成命中事件),在发生Block时,自己才会收到命中事件,如:ReceiveHit 或 OnComponentHit。
注2:物体勾选了生成重叠事件(Generate Overlap Events),在发生Overlap时,自己才会收到重叠事件,如:ReceiveBeginOverlap 和 ReceiveEndOverlap
注3:发生了Overlap,但没勾选生成重叠事件(Generate Overlap Events),则效果与Ignore一样,物体得不到任何反馈。
碰撞Response设置说明

注1:球体的Object Type为PhysicsBody,墙壁的Object Type为WorldDynamic
注2:球体与WorldDynamic类型的物体之间会产生Block,墙壁与PhysicsBody类型的物体之间也会产生Block,根据上面的规则,球体和墙壁发生接触时会产生Block
示例1:碰撞时墙壁收到Hit Events

示例2:重叠时球体和墙壁都会收到Overlap Events

开启物理模拟(Simulate)
一旦开启物理模拟,则这个Actor的所有运动状态都交由物理世界全权控制,物体会受到相关很多力的影响,如重力、摩擦力、空气阻力。
StaticMesh开启Simulate

SketetalMesh开启Simulate

Landscape开启Simulate

Simulate时也产生Hit Event和Overlap Event

在UE中查看资产的物理设置
StaticMesh物理设置

SkeletalMesh物理设置

Collision.ListObjectsWithCollisionComplexity "CTF_UseDefault"
LogCollisionCommands: #, Component, Collision Complexity, Asset, Path
LogCollisionCommands: ----------------------------------------------------------------------------------------------------------------------------------------------------
LogCollisionCommands: 0, '/Script/MRMesh.Default__MRMeshComponent', CTF Use Default, , /Script/MRMesh
LogCollisionCommands: 1, 'Cube_2.StaticMeshComponent0', CTF Use Default, /Engine/BasicShapes/Cube.Cube, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 2, 'Default__DefaultPawn:MeshComponent0', CTF Use Default, /Engine/EngineMeshes/Sphere.Sphere, /Script/Engine
LogCollisionCommands: 3, 'BP_Sky_Sphere_C:SkySphereMesh_GEN_VARIABLE', CTF Use Default, /Engine/EngineSky/SM_SkySphere.SM_SkySphere, /Engine/EngineSky/BP_Sky_Sphere
LogCollisionCommands: 4, 'SkySphereBlueprint.SkySphereMesh', CTF Use Default, /Engine/EngineSky/SM_SkySphere.SM_SkySphere, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 5, 'Go.StaticMeshComponent0', CTF Use Default, /Game/Geometry/Meshes/1M_Cube.1M_Cube, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 6, 'Wall6.StaticMeshComponent0', CTF Use Default, /Game/Geometry/Meshes/1M_Cube.1M_Cube, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 7, 'Wall7_3.StaticMeshComponent0', CTF Use Default, /Game/Geometry/Meshes/1M_Cube.1M_Cube, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 8, 'Wall8.StaticMeshComponent0', CTF Use Default, /Game/Geometry/Meshes/1M_Cube.1M_Cube, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 9, '1M_Cube_Chamfer_2.StaticMeshComponent0', CTF Use Default, /Game/Geometry/Meshes/1M_Cube_Chamfer.1M_Cube_Chamfer, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 10, 'Floor.StaticMeshComponent0', CTF Use Default, /Game/Geometry/Meshes/TemplateFloor.TemplateFloor, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: ----------------------------------------------------------------------------------------------------------------------------------------------------
LogCollisionCommands: Found 11 components with 'Default' collision complexity.
Collision.ListComponentsWithResponseToProfile "Block" "BlockAll"
LogCollisionCommands: #, Component, ObjectType, Profile, Path
LogCollisionCommands: --------------------------------------------------------------------------------------------------------------------------------------
LogCollisionCommands: 0, '/Script/AIModule.Default__EQSRenderingComponent', ECC World Static, BlockAll, /Script/AIModule
LogCollisionCommands: 1, '/Script/CableComponent.Default__CableComponent', ECC Physics Body, PhysicsActor, /Script/CableComponent
LogCollisionCommands: 2, '/Script/CustomMeshComponent.Default__CustomMeshComponent', ECC World Dynamic, BlockAllDynamic, /Script/CustomMeshComponent
LogCollisionCommands: 3, '/Script/Engine.Default__SplineComponent', ECC World Static, BlockAll, /Script/Engine
LogCollisionCommands: 4, '/Script/Engine.Default__HierarchicalInstancedStaticMeshComponent', ECC World Dynamic, BlockAllDynamic, /Script/Engine
LogCollisionCommands: 5, '/Script/Engine.Default__FXSystemComponent', ECC World Static, BlockAll, /Script/Engine
LogCollisionCommands: 6, '/Script/Engine.Default__MeshComponent', ECC World Static, BlockAll, /Script/Engine
LogCollisionCommands: 7, '/Script/Engine.Default__InstancedStaticMeshComponent', ECC World Dynamic, BlockAllDynamic, /Script/Engine
LogCollisionCommands: 8, '/Script/Engine.Default__PrimitiveComponent', ECC World Static, BlockAll, /Script/Engine
LogCollisionCommands: 9, '/Script/Engine.Default__StaticMeshComponent', ECC World Dynamic, BlockAllDynamic, /Script/Engine
LogCollisionCommands: 10, '/Script/Engine.Default__ModelComponent', ECC World Static, BlockAll, /Script/Engine
LogCollisionCommands: 11, '/Script/Engine.Default__BrushComponent', ECC World Static, BlockAll, /Script/Engine
LogCollisionCommands: 12, '/Script/FieldSystemEngine.Default__FieldSystemComponent', ECC World Static, BlockAll, /Script/FieldSystemEngine
LogCollisionCommands: 13, '/Script/Foliage.Default__FoliageInstancedStaticMeshComponent', ECC World Dynamic, BlockAllDynamic, /Script/Foliage
LogCollisionCommands: 14, '/Script/Foliage.Default__InteractiveFoliageComponent', ECC World Dynamic, BlockAllDynamic, /Script/Foliage
LogCollisionCommands: 15, '/Script/GameplayDebugger.Default__GameplayDebuggerRenderingComponent', ECC World Static, BlockAll, /Script/GameplayDebugger
LogCollisionCommands: 16, '/Script/GeometryCache.Default__GeometryCacheComponent', ECC World Static, BlockAll, /Script/GeometryCache
LogCollisionCommands: 17, '/Script/GeometryCollectionEngine.Default__GeometryCollectionComponent', ECC Destructible, Custom, /Script/GeometryCollectionEngine
LogCollisionCommands: 18, '/Script/HeadMountedDisplay.Default__MotionControllerComponent', ECC World Static, BlockAll, /Script/HeadMountedDisplay
LogCollisionCommands: 19, '/Script/InteractiveToolsFramework.Default__GizmoBaseComponent', ECC World Static, BlockAll, /Script/InteractiveToolsFramework
LogCollisionCommands: 20, '/Script/InteractiveToolsFramework.Default__GizmoBoxComponent', ECC World Static, BlockAll, /Script/InteractiveToolsFramework
LogCollisionCommands: 21, '/Script/InteractiveToolsFramework.Default__GizmoCircleComponent', ECC World Static, BlockAll, /Script/InteractiveToolsFramework
LogCollisionCommands: 22, '/Script/InteractiveToolsFramework.Default__GizmoRectangleComponent', ECC World Static, BlockAll, /Script/InteractiveToolsFramework
LogCollisionCommands: 23, '/Script/InteractiveToolsFramework.Default__GizmoLineHandleComponent', ECC World Static, BlockAll, /Script/InteractiveToolsFramework
LogCollisionCommands: 24, '/Script/InteractiveToolsFramework.Default__GizmoArrowComponent', ECC World Static, BlockAll, /Script/InteractiveToolsFramework
LogCollisionCommands: 25, '/Script/Landscape.Default__LandscapeMeshProxyComponent', ECC World Dynamic, BlockAllDynamic, /Script/Landscape
LogCollisionCommands: 26, '/Script/Landscape.Default__LandscapeGizmoRenderComponent', ECC World Static, BlockAll, /Script/Landscape
LogCollisionCommands: 27, '/Script/Landscape.Default__LandscapeSplinesComponent', ECC World Static, BlockAll, /Script/Landscape
LogCollisionCommands: 28, '/Script/Landscape.Default__ControlPointMeshComponent', ECC World Static, BlockAll, /Script/Landscape
LogCollisionCommands: 29, '/Script/MRMesh.Default__MRMeshComponent', ECC World Static, BlockAll, /Script/MRMesh
LogCollisionCommands: 30, '/Script/MyTest1.Default__MyDynamicPrimitiveComponent', ECC World Static, BlockAll, /Script/MyTest1
LogCollisionCommands: 31, '/Script/MyTest1.Default__MyStaticPrimitiveComponent', ECC World Static, BlockAll, /Script/MyTest1
LogCollisionCommands: 32, '/Script/NavigationSystem.Default__NavTestRenderingComponent', ECC World Static, BlockAll, /Script/NavigationSystem
LogCollisionCommands: 33, '/Script/OculusMR.Default__OculusMR_PlaneMeshComponent', ECC World Dynamic, BlockAllDynamic, /Script/OculusMR
LogCollisionCommands: 34, '/Script/Paper2D.Default__PaperFlipbookComponent', ECC World Dynamic, BlockAllDynamic, /Script/Paper2D
LogCollisionCommands: 35, '/Script/Paper2D.Default__PaperGroupedSpriteComponent', ECC World Dynamic, BlockAllDynamic, /Script/Paper2D
LogCollisionCommands: 36, '/Script/Paper2D.Default__PaperTerrainSplineComponent', ECC World Static, BlockAll, /Script/Paper2D
LogCollisionCommands: 37, '/Script/Paper2D.Default__PaperTileMapComponent', ECC World Static, BlockAll, /Script/Paper2D
LogCollisionCommands: 38, '/Script/Paper2D.Default__PaperSpriteComponent', ECC World Dynamic, BlockAllDynamic, /Script/Paper2D
LogCollisionCommands: 39, '/Script/Paper2D.Default__PaperTerrainComponent', ECC World Static, BlockAll, /Script/Paper2D
LogCollisionCommands: 40, '/Script/ProceduralMeshComponent.Default__ProceduralMeshComponent', ECC World Static, BlockAll, /Script/ProceduralMeshComponent
LogCollisionCommands: 41, '1M_Cube_Chamfer_2.StaticMeshComponent0', ECC World Static, BlockAll, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 42, 'Bump_StaticMesh.StaticMeshComponent0', ECC World Static, BlockAll, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 43, 'Cube_2.StaticMeshComponent0', ECC World Static, BlockAll, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 44, 'Default__ArchVisCharacter:CharacterMesh0', ECC Pawn, CharacterMesh, /Script/ArchVisCharacter
LogCollisionCommands: 45, 'Default__ArchVisCharacter:CollisionCylinder', ECC Pawn, Pawn, /Script/ArchVisCharacter
LogCollisionCommands: 46, 'Default__BlockingVolume:BrushComponent0', ECC World Static, InvisibleWall, /Script/Engine
LogCollisionCommands: 47, 'Default__Brush:BrushComponent0', ECC World Static, BlockAll, /Script/Engine
LogCollisionCommands: 48, 'Default__CableActor:CableComponent0', ECC Physics Body, PhysicsActor, /Script/CableComponent
LogCollisionCommands: 49, 'Default__CameraRig_Rail:RailSplineComponent', ECC World Static, BlockAll, /Script/CinematicCamera
LogCollisionCommands: 50, 'Default__Character:CollisionCylinder', ECC Pawn, Pawn, /Script/Engine
LogCollisionCommands: 51, 'Default__Character:CharacterMesh0', ECC Pawn, CharacterMesh, /Script/Engine
LogCollisionCommands: 52, 'Default__ControlPointMeshActor:ControlPointMeshComponent0', ECC World Static, BlockAll, /Script/Landscape
LogCollisionCommands: 53, 'Default__DefaultPawn:MeshComponent0', ECC Pawn, Pawn, /Script/Engine
LogCollisionCommands: 54, 'Default__DefaultPawn:CollisionComponent0', ECC Pawn, Pawn, /Script/Engine
LogCollisionCommands: 55, 'Default__EQSTestingPawn:CharacterMesh0', ECC Pawn, CharacterMesh, /Script/AIModule
LogCollisionCommands: 56, 'Default__FieldSystemActor:FieldSystemComponent', ECC World Static, BlockAll, /Script/FieldSystemEngine
LogCollisionCommands: 57, 'Default__GeometryCacheActor:GeometryCacheComponent', ECC World Static, BlockAll, /Script/GeometryCache
LogCollisionCommands: 58, 'Default__GeometryCollectionActor:GeometryCollectionComponent0', ECC Destructible, Custom, /Script/GeometryCollectionEngine
LogCollisionCommands: 59, 'Default__LandscapeGizmoActiveActor:GizmoRendererComponent0', ECC World Dynamic, BlockAllDynamic, /Script/Landscape
LogCollisionCommands: 60, 'Default__MyTest1Character:CharacterMesh0', ECC Pawn, CharacterMesh, /Script/MyTest1
LogCollisionCommands: 61, 'Default__MyTest1Character:CollisionCylinder', ECC Pawn, Pawn, /Script/MyTest1
LogCollisionCommands: 62, 'Default__PaperCharacter:CollisionCylinder', ECC Pawn, Pawn, /Script/Paper2D
LogCollisionCommands: 63, 'Default__PaperCharacter:Sprite0', ECC Pawn, CharacterMesh, /Script/Paper2D
LogCollisionCommands: 64, 'Default__PaperFlipbookActor:RenderComponent', ECC World Dynamic, BlockAllDynamic, /Script/Paper2D
LogCollisionCommands: 65, 'Default__PaperGroupedSpriteActor:RenderComponent', ECC World Dynamic, BlockAllDynamic, /Script/Paper2D
LogCollisionCommands: 66, 'Default__PaperSpriteActor:RenderComponent', ECC World Static, BlockAll, /Script/Paper2D
LogCollisionCommands: 67, 'Default__PaperTerrainActor:SplineComponent', ECC World Static, BlockAll, /Script/Paper2D
LogCollisionCommands: 68, 'Default__PaperTerrainActor:RenderComponent', ECC World Static, BlockAll, /Script/Paper2D
LogCollisionCommands: 69, 'Default__PaperTileMapActor:RenderComponent', ECC World Static, BlockAll, /Script/Paper2D
LogCollisionCommands: 70, 'Default__SkeletalMeshActor:SkeletalMeshComponent0', ECC Physics Body, PhysicsActor, /Script/Engine
LogCollisionCommands: 71, 'Default__SpectatorPawn:CollisionComponent0', ECC Pawn, Spectator, /Script/Engine
LogCollisionCommands: 72, 'Default__SplineMeshActor:SplineMeshComponent0', ECC World Static, BlockAll, /Script/Engine
LogCollisionCommands: 73, 'Default__StaticMeshActor:StaticMeshComponent0', ECC World Static, BlockAll, /Script/Engine
LogCollisionCommands: 74, 'Default__ThirdPersonCharacter_C:CharacterMesh0', ECC Pawn, CharacterMesh, /Game/ThirdPersonCPP/Blueprints/ThirdPersonCharacter
LogCollisionCommands: 75, 'Default__ThirdPersonCharacter_C:CollisionCylinder', ECC Pawn, Pawn, /Game/ThirdPersonCPP/Blueprints/ThirdPersonCharacter
LogCollisionCommands: 76, 'Default__WheeledVehicle:VehicleMesh', ECC Vehicle, Vehicle, /Script/PhysXVehicles
LogCollisionCommands: 77, 'Floor.StaticMeshComponent0', ECC World Static, BlockAll, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 78, 'GameplayDebuggerCategoryReplicator_2147482533.RenderingComp', ECC World Static, BlockAll, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 79, 'Go.StaticMeshComponent0', ECC World Static, BlockAll, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 80, 'LeftArm_StaticMesh.StaticMeshComponent0', ECC World Static, BlockAll, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 81, 'Linear_Stair_StaticMesh.StaticMeshComponent0', ECC World Static, BlockAll, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 82, 'Ramp_StaticMesh.StaticMeshComponent0', ECC World Static, BlockAll, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 83, 'RightArm_StaticMesh.StaticMeshComponent0', ECC World Static, BlockAll, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 84, 'ThirdPersonCharacter_2.CollisionCylinder', ECC Pawn, Pawn, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 85, 'ThirdPersonCharacter_2.CharacterMesh0', ECC Pawn, CharacterMesh, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 86, 'Wall6.StaticMeshComponent0', ECC World Static, BlockAll, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 87, 'Wall7_3.StaticMeshComponent0', ECC World Static, BlockAll, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: 88, 'Wall8.StaticMeshComponent0', ECC World Static, BlockAll, /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel
LogCollisionCommands: --------------------------------------------------------------------------------------------------------------------------------------
LogCollisionCommands: Found 89 components with 'Block' response to profile 'BlockAll'.
参考
浙公网安备 33010602011771号