Tick기반 로직 성능 저하
1. 문제
AFacility 클래스의 Tick에서 상태에 따라 분기하여 Tick을 구분한 가상 함수를 만들어 사용함. 하지만 실제로 각 시설은 Tick 로직이 실행되는 시간보다 실행되지 않는 시간이 더 많아 Tick 함수 호출 오버헤드만 발생함

2. 시도
기본적으로 Tick은 Disable한 상태로 두고, Timeline Component와 TimerHandle을 이용한 이벤트 기반 로직으로 수정
class GSB_API AConstructibleFacility : public AFacility
{
[...]
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
class UTimelineComponent* ConstructionTimeline;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
class UTimelineComponent* DeconstructionTimeline;
UFUNCTION(BlueprintNativeEvent, Category = "AConstructibleFacility|Construction")
void OnConstructing(float Progress);
virtual void OnConstructing_Implementation(float Progress);
UFUNCTION(BlueprintNativeEvent, Category = "AConstructibleFacility|Construction")
void OnDeconstructing(float Progress);
virtual void OnDeconstructing_Implementation(float Progress);
}
AConstructibleFacility::AConstructibleFacility()
{
ConstructionTimeline = CreateDefaultSubobject<UTimelineComponent>(TEXT("ConstructionTimeline"));
ConstructionTimeline->SetLooping(false);
ConstructionTimeline->SetTimelineLengthModeTL_TimelineLength;
DeconstructionTimeline = CreateDefaultSubobject<UTimelineComponent>(TEXT("DeconstructionTimeline"));
DeconstructionTimeline->SetLooping(false);
DeconstructionTimeline->SetTimelineLengthModeTL_TimelineLength;
}
[...]
void AConstructibleFacility::OnConstructing_Implementation(float Progress)
{
SetDissolveEffect(Progress);
}
void AConstructibleFacility::OnDeconstructing_Implementation(float Progress)
{
SetDissolveEffect(1 - Progress);
}
3. 결과
- 이벤트 기반으로 실행하여 불필요한 Tick 호출을 줄여 오버헤드 감소