언리얼5

언리얼 엔진 PostEditChangeProperty에 대해서

TIN9 2023. 9. 5.
반응형

PostEditChangeProperty함수란

에디터 상에서 프로퍼티의 값을 변경할 때 호출되는 콜백 함수라고 보면 된다.

 

사용 전

생성자에서 InitialSpeed를 활용하여 다른 값들을 변경해도 생성자 호출 당시뿐이지 에디터에서 InitialSpeed를 수정한다고 ProjectileMovementComponent->InitialSpeed값이나 ProjectileMovementComponent->MaxSpeed값이 바뀌진 않는다.

AProjectileBullet::AProjectileBullet()
{
	ProjectileMovementComponent = CreateDefaultSubobject<UProjectileMovementComponent>(TEXT("ProjectileMovementComponent"));
	// 총알이 속도에 맞춰서 회전
	// 중력으로 인한 회전이 해당 궤적을 따라 회전함
	ProjectileMovementComponent->bRotationFollowsVelocity = true;
	ProjectileMovementComponent->SetIsReplicated(true);
	ProjectileMovementComponent->InitialSpeed = InitialSpeed;
	ProjectileMovementComponent->MaxSpeed = InitialSpeed;
}

사용 후

PostEditChangeProperty함수를 이용하면 에디터에서 GET_MEMBER_NAME_CHECKED로 설정한 InitialSpeed의 값이 변경되면 자동으로 내부 코드를 수행하여 ProjectileMovementComponent->InitialSpeed, ProjectileMovementComponent->MaxSpeed값이 변경된다.

.h
UCLASS()
class BLASTER_API AProjectileBullet : public AProjectile
{
	GENERATED_BODY()
		
public:
	AProjectileBullet();
    
#if WITH_EDITOR
	virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
#endif
}

.cpp

#if WITH_EDITOR
void AProjectileBullet::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
{
	Super::PostEditChangeProperty(PropertyChangedEvent);

	// 변경된 프로퍼티의 이름을 가져온다.
	FName PropertyName = PropertyChangedEvent.Property != nullptr ? PropertyChangedEvent.Property->GetFName() : NAME_None;

	// 변경된 프로퍼티에 따라 작업을 수행
	if (PropertyName == GET_MEMBER_NAME_CHECKED(AProjectileBullet, InitialSpeed))
	{
		if (ProjectileMovementComponent)
		{
			// InitialSpeed를 에디터에서 수정하면 자동으로 ProjectileMovementComponent->InitialSpeed, MaxSpeed 값 둘다 변경이 된다.
			ProjectileMovementComponent->InitialSpeed = InitialSpeed;
			ProjectileMovementComponent->MaxSpeed = InitialSpeed;
		}
	}
}
#endif

알고가면 좋은 부분

#if WITH_EDITOR

#endif

로 구분 짓는 이유는 런타임도중에는 사용하지 않고 에디터 모드에서만 사용하기도 하고 기본적으로 에디터 코드는 런타임 코드보다 더 많은 리소스와 시간을 필요로 해. #if WITH_EDITOR를 사용하여 런타임에서는 불필요한 에디터 코드를 제외시켜 컴파일 시간을 단축시키고 런타임 성능을 최적화하는 것입니다.

반응형

댓글