Tick기반 로직 성능 저하

1. 문제


AFacility 클래스의 Tick에서 상태에 따라 분기하여 Tick을 구분한 가상 함수를 만들어 사용함. 하지만 실제로 각 시설은 Tick 로직이 실행되는 시간보다 실행되지 않는 시간이 더 많아 Tick 함수 호출 오버헤드만 발생함
4. Archive/GSB/__Attachments/Pasted image 20251016133853.png

2. 시도


기본적으로 Tick은 Disable한 상태로 두고, Timeline Component와 TimerHandle을 이용한 이벤트 기반 로직으로 수정

ConstructibleFacility.h

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);
}

ConstructibleFacility.cpp

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. 결과