언리얼 엔진/언리얼 엔진 개념
Unreal Engine - CallInEditor 정리 및 활용 방법
로안님
2025. 1. 23. 21:59
CallInEditor란?
**CallInEditor**는 Unreal Engine에서 **UFUNCTION()**의 속성 중 하나로, 에디터에서 디테일 패널을 통해 특정 함수를 실행할 수 있도록 만들어줍니다. 이를 통해 게임 실행 없이도 간단한 작업이나 테스트를 에디터 환경에서 바로 수행할 수 있습니다.
사용 예제
다음은 CallInEditor를 사용하여 액터의 위치를 초기화하는 간단한 함수 예제입니다.
코드 예제: 액터 위치 초기화
헤더 파일
UCLASS()
class MYPROJECT_API ATransformableObject : public AActor
{
GENERATED_BODY()
public:
// 에디터에서 호출할 수 있는 함수
UFUNCTION(CallInEditor, Category = "Transform")
void ResetActorPosition();
};
CPP 파일
#include "TransformableObject.h"
void ATransformableObject::ResetActorPosition()
{
SetActorLocation(FVector::ZeroVector); // 액터 위치 초기화
UE_LOG(LogTemp, Warning, TEXT("Actor position reset to (0, 0, 0)"));
}
결과
- 에디터에서 이 액터를 선택하면 디테일 패널에 "ResetActorPosition" 버튼이 표시됩니다.
- 버튼을 클릭하면 함수가 실행되어 액터의 위치가 **(0, 0, 0)**으로 초기화됩니다.
CallInEditor의 주요 특징
1. 에디터 전용
- CallInEditor는 에디터 환경에서만 동작합니다.
- 게임 실행 중(Play in Editor)에는 버튼이 비활성화되며, 함수를 호출할 수 없습니다.
2. 디테일 패널에서만 사용 가능
- 디테일 패널에 버튼 형태로 나타나므로, 블루프린트 그래프나 블루프린트 에디터 화면에서는 사용할 수 없습니다.
- 뷰포트에서 액터를 선택한 후 디테일 패널에서 버튼을 클릭해야 함.
Modify()와 MarkPackageDirty()의 역할
CallInEditor로 작성한 함수에서 변경 작업이 이루어질 경우, 두 가지 추가적인 처리를 고려해야 합니다: **Modify()**와 MarkPackageDirty().
1. Modify()
- 목적: Undo/Redo 기능을 지원하기 위해 변경 사항을 기록.
- 설명:
- 에디터에서 작업 후 Ctrl+Z(Undo) 또는 Ctrl+Y(Redo)로 상태를 되돌릴 수 있게 합니다.
- 언제 필요한가?
- 디테일 패널 버튼으로 실행한 작업을 되돌리거나 다시 적용할 필요가 있을 때.
코드 예제
void ATransformableObject::ResetActorPosition()
{
Modify(); // Undo/Redo 기록
SetActorLocation(FVector::ZeroVector); // 위치 초기화
}
2. MarkPackageDirty()
- 목적: 에디터에게 "레벨이 수정되었음을 알림".
- 설명:
- 레벨 이름 옆에 "*" 표시를 추가하여 변경 사항이 있음을 나타냅니다.
- 레벨을 저장하지 않고 닫으려 하면 경고 메시지가 나타납니다.
- 언제 필요한가?
- Unreal Engine이 자동으로 변경 사항을 감지하지 못하는 작업에서 사용.
- 예: 커스텀 데이터, 배열, 또는 트랜스폼 이외의 속성 변경.
- Unreal Engine이 자동으로 변경 사항을 감지하지 못하는 작업에서 사용.
코드 예제
void ATransformableObject::ResetActorPosition()
{
Modify(); // Undo/Redo 기록
SetActorLocation(FVector::ZeroVector); // 위치 초기화
MarkPackageDirty(); // 레벨 수정 알림
}
Modify()와 MarkPackageDirty()는 항상 필요한가?
1. 꼭 필요하지 않은 경우
- 트랜스폼 변경 작업(위치, 회전, 스케일)에는 Unreal Engine이 변경 사항을 자동으로 감지합니다.
- 이 경우 MarkPackageDirty(); 없이도 레벨 저장 경고가 뜨며, 변경 사항이 적용됩니다.
2. 꼭 필요한 경우
- 커스텀 데이터나 특수 작업을 수정한 경우:
- 예: 배열 추가, 사용자 정의 속성 변경 등.
- Undo/Redo를 지원해야 하는 경우:
- 사용자가 Ctrl+Z로 변경 사항을 되돌릴 필요가 있을 때.
CallInEditor의 활용 사례
1. 데이터 초기화
- 예: 액터의 위치, 속성, 또는 배열을 초기화하는 작업.
- 간단히 버튼 클릭으로 작업 가능.
2. 테스트 및 디버깅 도구
- 예: 특정 조건을 재현하거나 테스트 데이터를 설정.
3. 레벨 정리 작업
- 예: 여러 액터를 특정 위치로 이동시키거나 일괄적으로 정렬.
마무리
CallInEditor는 Unreal Engine 에디터 작업을 간소화하고 반복 작업을 줄이는 데 매우 유용한 도구입니다. 특히 디테일 패널을 활용한 간단한 워크플로 개선에 적합하며, Modify()와 MarkPackageDirty()를 적절히 사용하여 Undo/Redo 및 저장 경고까지 지원하면 더욱 강력한 에디터 도구를 만들 수 있습니다.