我正试图通过将每个命中对象的名字打印到日志中来检查多行跟踪是否击中日志,但是由于(我假设)内存错误,引擎仍在崩溃。我只尝试打印第一个对象,它可以工作,但是由于这是一个多行跟踪,所以我想检查每个被击中的对象
这是我的代码:
TArray<FHitResult> hits = {};
ECollisionChannel channel(ECC_GameTraceChannel1);
FCollisionQueryParams TraceParams(FName(TEXT("")), false, GetOwner());
GetWorld()->LineTraceMultiByChannel(
OUT hits,
camWorldLocation,
end,
channel,
TraceParams
);
DrawDebugLine(GetWorld(), camWorldLocation, end, FColor::Green, false, 2.0f);
if (!hits.IsEmpty())
{
for (int i = 0; i < sizeof(hits); i++)
{
if (&hits[i] != nullptr) {
if (hits[i].GetActor() != nullptr)
{
UE_LOG(LogTemp, Error, TEXT("Line trace has hit: %s"), *(hits[i].GetActor()->GetName()));
}
}
else
{
break;
}
}
}发布于 2022-08-25 13:05:59
sizeof(hits)给出了C++对象的大小(以字节为单位),而不是容器中的项数。
你需要用
for (int i = 0; i < hits.Num(); i++)https://stackoverflow.com/questions/73487780
复制相似问题