GA_Fire 쪽에 AimTube 의 요청 및 ProxyActor 생성 요청

UMassProxyAssignmentProcessor 가 제대로 동작하지 않음!
그렇기에 다음과 같은 코드를 추가하여 ‘반드시 빌드’ 하도록 처리
virtual bool ShouldAllowQueryBasedPruning(const bool bRuntimeMode) const override { return false; }
LogProjectD: Warning: ProxyAssign: PlayerLocs=1 ViewOrigins=1 AimTubes=39
LogTemp: Warning: ProxyPool: Total=512 Free=512 Active=0
LogProjectD: Warning: ProxyAssign: PlayerLocs=1 ViewOrigins=1 AimTubes=40
LogProjectD: Warning: ProxyAssign: PlayerLocs=1 ViewOrigins=1 AimTubes=40
여전히 ProxyPool 에서 Active 되지 않음!
분명 AimTube에 대한 처리는 들어간 것 같은데??
지금 해당 처리 로깅이 안나오는 것으로 보아하니 Wanted for 이 아예 안 도는 상태
for (const FMassEntityHandle& W : Wanted)
{
ACollisionProxyActor* ProxyActor = ProxyPoolSubsystem->Acquire(W);
if (IsValid(ProxyActor) == true)
{
const FTransformFragment* TransformFrag = EntityManager.GetFragmentDataPtr<FTransformFragment>(W);
if (TransformFrag != nullptr)
{
const FVector Loc = TransformFrag->GetTransform().GetLocation();
ProxyActor->SetActorLocation(Loc, false, nullptr, ETeleportType::TeleportPhysics);
}
NewAssigned.Add(W);
UE_LOG(LogProjectD, Warning, TEXT("Acquire OK: Entity=[%d:%d] Free=%d Active=%d"),
W.Index, W.SerialNumber,
ProxyPoolSubsystem->GetFreeCount(),
ProxyPoolSubsystem->GetActiveProxyCount());
}
else
{
UE_LOG(LogProjectD, Warning, TEXT("Acquire FAIL: Entity=[%d:%d] Free=%d Active=%d"),
W.Index, W.SerialNumber,
ProxyPoolSubsystem->GetFreeCount(),
ProxyPoolSubsystem->GetActiveProxyCount());
}
}
이건 위쪽의 ForeachEntityChunk 쪽 코드가 제대로 돌아가지 않는 것으로 판단함
static float AccumLog = 0.0f;
AccumLog += Context.GetDeltaTimeSeconds();
int32 TotalScanned = 0;
int32 AliveScanned = 0;
int32 NearCount = 0;
int32 ConeCount = 0;
int32 AimCount = 0;
EntityQuery.ForEachEntityChunk(EntityManager, Context, [&](FMassExecutionContext& ExecContext)
{
const TConstArrayView<FTransformFragment> Transforms = ExecContext.GetFragmentView<FTransformFragment>();
const TConstArrayView<FMassBoidsHealthFragment> Healths = ExecContext.GetFragmentView<FMassBoidsHealthFragment>();
const int32 Num = ExecContext.GetNumEntities();
TotalScanned += Num;
for (int32 i = 0; i < Num; ++i)
{
if (Healths[i].Health <= 0.0f)
{
continue;
}
AliveScanned++;
const FVector Pos = Transforms[i].GetTransform().GetLocation();
const bool bNear = IsNearAnyPlayer(Pos, PlayerLocs, NearRadiusSq);
const bool bCone = IsInAnySightCone(Pos, ViewOrigins, ViewDirs, SightMaxDistSq, SightCosHalfAngle);
bool bAim = false;
for (const FMassAimTubeRequest& Tube : AimTubes)
{
if (IsPointInAimTube(Pos, Tube, Tuning->AimTubeRadius) == true)
{
bAim = true;
break;
}
}
if (bNear == true) { NearCount++; }
if (bCone == true) { ConeCount++; }
if (bAim == true) { AimCount++; }
if (bNear == true || bCone == true || bAim == true)
{
FCandidate C;
C.Entity = ExecContext.GetEntity(i);
C.MinDistSq = GetMinDistSqToPlayers(Pos, PlayerLocs);
C.bInCone = bCone;
C.bInAimTube = bAim;
Candidates.Add(C);
}
}
});
if (AccumLog >= 1.0f)
{
AccumLog = 0.0f;
UE_LOG(LogProjectD, Warning, TEXT("ProxyAssignScan: Total=%d Alive=%d Near=%d Cone=%d Aim=%d Candidates=%d AimTubes=%d"),
TotalScanned, AliveScanned, NearCount, ConeCount, AimCount, Candidates.Num(), AimTubes.Num());
}
해당 구문 로그에서 나온 결과?
LogProjectD: Warning: ProxyAssignScan: Total=0 Alive=0 Near=0 Cone=0 Aim=0 Candidates=0 AimTubes=30
그런데 Transform Fragment는 우리가 넣어준것 같은데 체력 관련 Fragment는 넣어주었나?