gpt4 book ai didi

collision-detection - UE4 Mesh 多个碰撞点检测

转载 作者:行者123 更新时间:2023-12-04 17:11:07 27 4
gpt4 key购买 nike

当我的网格发生碰撞时,我需要找到所有命中点(顶点),因为 OnHit 只有 结构中的撞击点只有一个(红色调试球)。有没有办法做到这一点? (例如在 Unity 碰撞结构中有一个包含这些点的数组: collision.contacts )
这是当 2 个立方体与面接触并且有很多接触点(不是 1)时的示例
введите сюда описание изображения

最佳答案

碰撞会产生重叠事件,因此您可以使用 OnComponentBeginOverlap并获得 SweepResult对于理论上的重叠事件。但是SweepResult不太可靠所以我建议做一个 Spherical Sweep在重叠事件中。

void Pawn::OnComponentBeginOverlap(class AActor* OtherActor, class UPrimitiveComponent* OtherComp, 
int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
if (OtherActor && (OtherActor != this))
{
TArray<FHitResult> Results;
auto ActorLoc = GetActorLocation();
auto OtherLoc = OtherComp->GetComponentLocation();
auto CollisionRadius = FVector::Dist(Start, End) * 1.2f;

// spherical sweep
GetWorld()->SweepMultiByObjectType(Results, ActorLoc, OtherLoc,
FQuat::Identity, 0,
FCollisionShape::MakeSphere(CollisionRadius),
// use custom params to reduce the search space
FCollisionQueryParams::FCollisionQueryParams(false)
);

for (auto HitResult : Results)
{
if (OtherComp->GetUniqueID() == HitResult.GetComponent()->GetUniqueID()) {

// insert your code

break;
}
}
}
}
您可以尝试使用 FCollisionQueryParams 使此过程更快,但会在几帧碰撞后绘制球形扫描,因此您可以暂停/停止 Actor 以获得准确的结果。

关于collision-detection - UE4 Mesh 多个碰撞点检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69433720/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com