언리얼 에디터에서만 사용해야 하고 게임에서는 컴파일 및 패키징되지 않는 항목을 감쌀 때, 전처리기로 #if WITH_EDITOR를 사용한다.
종료 시에는 #endif를 사용하고, 헤더와 소스파일에서 모두 감싸야한다.
PostEditChangeProperty 함수는 에디터에서 블루프린트 변경 사항을 포착할 수 있다.
이하 코드는 에디터에서 SprintSpeed
가 WalkSpeed
보다 항상 크거나 같게 조정해준다.
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category ="Movement Configuration", meta = (AllowPrivateAccess = "true", ForceUnits="cm/s", ClampMin=1, ClampMax=600, DisplayName="걷기 속도")) float WalkingSpeed = 400.0f; UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category ="Movement Configuration", meta = (AllowPrivateAccess = "true", ForceUnits="cm/s", ClampMin=1, ClampMax=600, DisplayName="달리기 속도")) float SprintSpeed = 600.0f; #if WITH_EDITOR virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override; #endif // WITH_EDITOR
#if WITH_EDITOR void UMultiplayerMovementComponent::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) { Super::PostEditChangeProperty(PropertyChangedEvent); FName PropertyName = (PropertyChangedEvent.Property != nullptr) ? PropertyChangedEvent.Property->GetFName() : NAME_None; if (PropertyName == GET_MEMBER_NAME_CHECKED(UMultiplayerMovementComponent, WalkingSpeed)) { if ( WalkingSpeed > SprintSpeed) { SprintSpeed = WalkingSpeed; } } else if (PropertyName == GET_MEMBER_NAME_CHECKED(UMultiplayerMovementComponent, SprintSpeed)) { if ( WalkingSpeed > SprintSpeed) { WalkingSpeed = SprintSpeed; } } } #endif // WITH_EDITOR