CDO와 Constructor

2025. 1. 8. 17:57·Unreal Engine/이것 저것

들어가며

개발을 해 보면 Constructor에서 Play단계에서 쓰는 함수를 호출하지 말 것이라는 사항. 그리고 Constructor가 Engine 초기화 과정에서 CDO 생성 때 호출되는 건 알았는데, 왜 그렇게 해야 문제가 되는 건지 확실하게 짚고 넘어가고자 테스트를 진행해 봤다.

 


테스트 방법

1. GetDefaultObject() 호출을 통한 확인

AMyActor::AMyActor()
{ 	
	AMyActor* TestPTR = Cast<AMyActor>(AMyActor::StaticClass()->GetDefaultObject());
	if(!TestPTR)
	{
		UE_LOG(LogTemp, Warning, TEXT("CDO is nullptr. CDO maybe created"))
	}
	else if(TestPTR == this)
	{
		UE_LOG(LogTemp, Warning, TEXT("This is CDO. Constructor Called"));
	}
	else
	{
		UE_LOG(LogTemp, Warning, TEXT("This is not CDO, but Constructor Called"));
	}
}

 

2. 해당 액터의 Constructor가 호출될만한 환경 설정 후 중단점을 걸어 확인

[테스트 케이스]

케이스 1 : Editor를 실행, 해당 액터가 스폰된 레벨을 기본 에디터 로딩 레벨로 설정

케이스 2 : Editor를 실행, 해당 액터가 스폰되지 않은 레벨을 기본 에디터 로딩 레벨로 설정

케이스 3 : Editor가 실행된 상태에서 해당 액터의 Constructor에 수정을 한 후 Live Compile 수행 시 호출되는지 확인

케이스 4 : Editor가 실행된 상태에서 해당 액터가 스폰된 레벨에서 플레이(PIE)를 할 시 확인

케이스 5 : Editor가 실행된 상태에서 해당 액터가 스폰되지 않은 레벨에서 액터가 스폰된 레벨로 전환 시 확인

 

[수행 결과]

1. Editor 실행 시, 레벨 오픈 시 1번씩 Contructor 호출 확인, Editor 실행 시에는 CDO == this를 만족해서 호출하는 것을 확인

2. Editor 실행 시 CDO == this에서 중단점 걸리는 것을 확인

3. Live Compile 시 Constructor가 호출되진 않음.

4. PIE 클릭 시 Constructor가 호출되었음. else 케이스에 걸림

5. Open Level? 일 때 한 번 호출되고 레벨이 로딩되면서 한 번 더 호출됨. 둘 다 else 케이스

 

[깨달은 점]

1. CDO는 모듈 로드 시 한 번 생성된다.

2. Constructor가 여러 번 호출된다...?

3. 따라서, Constructor 호출 시 엔진이 초기화 되기 전 호출되는 코드를 호출한다는 행동을 하는 경우 if()문으로 nullptr 체크를 하는 등의 행위가 반드시 필요하다.

'Unreal Engine > 이것 저것' 카테고리의 다른 글

[Network] 채팅 프로그램 만들기  (0) 2025.03.17
게임 언패킹과 리타게팅, 그리고 머티리얼에 대하여 ( 1 )  (0) 2025.02.07
에디터에서 FVector 수정을 위한 UPROPERTY 사용  (0) 2025.02.03
유튜브 레퍼런스  (0) 2025.02.01
Procedural Mesh Component를 이용한 Convex Collision 생성  (0) 2025.01.31
'Unreal Engine/이것 저것' 카테고리의 다른 글
  • 게임 언패킹과 리타게팅, 그리고 머티리얼에 대하여 ( 1 )
  • 에디터에서 FVector 수정을 위한 UPROPERTY 사용
  • 유튜브 레퍼런스
  • Procedural Mesh Component를 이용한 Convex Collision 생성
DevJoo1120
DevJoo1120
  • DevJoo1120
    Jin's Programming
    DevJoo1120
  • 전체
    오늘
    어제
    • 분류 전체보기 (142)
      • 포트폴리오 (7)
        • Castlevania: Aria of Sorrow.. (7)
        • [UE5] KILL Everything (0)
      • C++ (0)
      • 라이브러리 (1)
      • 다이렉트X11 (0)
      • Unreal Engine (11)
        • Unreal Document (1)
        • 이것 저것 (8)
        • UI (1)
      • 자료구조 및 알고리즘 (0)
      • 책 정리 (3)
        • 코딩 테스트 합격자 되기 C++ 편 (10)
      • 코딩 테스트 (32)
        • 프로그래머스 (32)
      • 스파르타 코딩 언리얼 1기 (9)
        • 특강 (0)
        • C++와 Unreal Engine으로 3D .. (2)
      • TIL(Today I Learned) (63)
      • 영어 공부 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    WINAPI
    코딩 테스트 합격자 되기 c++ 편
    코딩테스트
    C++
    과제
    Til
    반복문
    정렬
    프로그래머스
    map
    코딩 테스트
    문자열
    이중 반복문
    팀 프로젝트
    배열
    책 정리
    스파르타 코딩 클럽
    정리
    Unreal Engine 5
    Study
  • hELLO· Designed By정상우.v4.10.5
DevJoo1120
CDO와 Constructor
상단으로

티스토리툴바