Я опубликовал этот вопрос несколько дней назад, и из комментариев я не сформулировал вопрос так, как мог бы подумать.
Вот моя обновленная версия с дополнительной информацией.
У меня есть следующее.
Ряды точек, выровненных по левому краю от центра.
Достигается через:
// Loop for basically CurrentWaveCount + 1
for (int32 Index = CurrentWaveCount; Index >= 0; Index--)
{
FHitResult HitResult(ForceInit);
FCollisionQueryParams TraceParams = FCollisionQueryParams();
TraceParams.AddIgnoredActor(GetOwner());
TraceParams.AddIgnoredActor(this);
//////////////////////////////////////////////////////////////////////////
FVector CastLocation = (GetActorForwardVector() * (CurrentWaveCount * WaveSpawnDistanceIncrement) + GetActorLocation());
CastLocation += (-GetActorRightVector() * (Index * ChildWaveActorSeperationIncrement));
//////////////////////////////////////////////////////////////////////////
CastLocation.Z += FixedCastTraceHeightOffset;
FVector TraceStart = CastLocation;
FVector TraceEnd = TraceStart + (-FVector::UpVector * MaxFallbackTraceDistance);
GetWorld()->LineTraceSingleByChannel(HitResult, TraceStart, TraceEnd, ECC_FixedCastableTraceChannel, TraceParams);
Переменная CastLocation - это то, что контролирует положение каждой точки.
Однако я хотел бы выровнять их по центру вместо смещения в одну сторону, и я не могу отработать математику, чтобы сделатьthis.
Ответы не обязательно должны быть на C ++ и могут быть просто Math, так как я могу оттуда разобраться, если это поможет.
Спасибо.
Ток:
Ожидаемый:
Обновлен код решения:
// Loop for basically CurrentWaveCount + 1
for (int32 Index = CurrentWaveCount; Index >= 0; Index--)
{
FHitResult HitResult(ForceInit);
FCollisionQueryParams TraceParams = FCollisionQueryParams();
TraceParams.AddIgnoredActor(GetOwner());
TraceParams.AddIgnoredActor(this);
//////////////////////////////////////////////////////////////////////////
float HalfWidth = CurrentWaveCount * ChildWaveActorSeperationIncrement / 2;
FVector CastLocation = (GetActorForwardVector() * (CurrentWaveCount * WaveSpawnDistanceIncrement) + GetActorLocation());
CastLocation += -GetActorRightVector() * (Index * ChildWaveActorSeperationIncrement);
CastLocation += GetActorRightVector() * HalfWidth;
//////////////////////////////////////////////////////////////////////////
CastLocation.Z += FixedCastTraceHeightOffset;
FVector TraceStart = CastLocation;
FVector TraceEnd = TraceStart + (-FVector::UpVector * MaxFallbackTraceDistance);
GetWorld()->LineTraceSingleByChannel(HitResult, TraceStart, TraceEnd, ECC_FixedCastableTraceChannel, TraceParams);