반응형
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를 사용하여 런타임에서는 불필요한 에디터 코드를 제외시켜 컴파일 시간을 단축시키고 런타임 성능을 최적화하는 것입니다.
반응형
'언리얼5' 카테고리의 다른 글
[UE5 Multiplayer Shooting-16] 마우스 민감도 UI 구현 (0) | 2023.09.28 |
---|---|
[UE5 Multiplayer Shooting-15] 팀 데스매치, 점령전 구현(영상) (2) | 2023.09.27 |
[UE5 Multiplayer Shooting-14] Reload, Match State, Scatter 알고리즘 구현 및 무기 추가 (0) | 2023.08.21 |
[UE5 Multiplayer Shooting-13] Health 및 PlayerState 추가Score, Defeasts 관련 (2) | 2023.08.14 |
[UE5 Multiplayer Shooting-12] UE5 Framework 구조 (6) | 2023.08.11 |
댓글