언리얼 함수 호출 순서 (CDO)

CJB_ny·2023년 1월 8일
0

UE4

목록 보기
14/20
post-thumbnail

다시 복습겸 + 이득우 chapter13을 공부하면서 배운점을 적은 부분임.

무한맵을 만들면서 일단 계속 overlap이 발생은 안하기는 하지만 이것보다는 일단,

Actor클래스를 만들때 이 클래스의 생성자함수와 BeginPlay() 함수와 언리얼 에디터에서 설정한 값들중 무엇이 우선하는지 정리함.

일단 언리얼 공식 엑터 수명주기 글을 빠르게 훑어도 좋은듯 하다.

디스크에서 로드하는 부분인 위에글을 읽어보더라도 PostInitialize가 먼저 호출 되고 그다음에 BeginPlay가 호출이 된다.
(이 부분은 혼자 계속하다 보니 자연스럽게 익힘)

근데 만약 해당 클래스의 생성자는 그러면 언제 호출이 되나? Post이전인가 Post랑 begin 사이인가? begin이후인가?? 가 궁금해짐.

왜냐하면 책에서 ABSection은 Complete로 시작한다고 bNoBattle값을 에디터에서 true로 켜줌.

그래서 다시 정리하자면

PostInitialize, BeginPly, 생성자함수, 언리얼 에디터에서 값 조정한 부분

이거 4가지의 호출 단계가 궁금하다 이말이다.

이것을 활용해서 무한맵 제작을 하기 때문에.

https://oldpg.tistory.com/4

위에서는 아주 간단하게

클래스 생성자 먼저 호출 -> UE 에디터의 설정 -> BeginPlay호출

이라고 함.

https://kyoun.tistory.com/125 이글이 조금더 자세한듯

https://blog.naver.com/destiny9720/220934112532
이 두 블로그의 글을 읽도록 하자.

즉 언리얼 오브젝트가 만들어 지기 위해서는

실제 컴파일 전에 언리얼 헤더 툴에 의해서 헤더파일을 분석하는 과정이 선행된다.

이 과정이 완료되면 Intermediate 폴더에 언리얼 오브젝트의 정보를 담은 메타 파일이 생성됨.

이렇게 메타 정보를 미리 만들어냄.
이 메타 정보는 UCLASS라는 특별한 클래스를 통해 보관된다.

이렇게 컴파일 단계에서 언리얼 오브젝트마다 UClass가 생성되면 실행 초기의 런타임 과정에서는 언리얼 오브젝트마다 클래스 정보와 함께 언리얼 오브젝트의 인스턴스가 생성됨.

이것을 클래스 기본 객체 ""CDO" 라고한다.
(CDO를 만드는 이유는 여기.

그니까 제일먼저 생성자 이냐 Postinitialize이냐 인데

CDO를 만들어야 하니까 당연시 생성자가 먼저 호출 된다고 생각할 수 있지만

확인 하도록 하겠다.

ABSection의 생성자와 PostInitializeComponents에다가 로그 다 찍어본 결과

스크롤만 봐도 생성자가 당연히 CDO를 만들기 위해서 먼저 호출이 된다.

그리고 나서 여기에서 말한대로

  1. 생성자 먼저 호출 (CDO를 위해)

  2. 에디터 설정

  3. BeginPlay

이다. 그러면 에디터 설정이 먼저 인가 PostInitialize가 먼저인가? 이거는 다음에 다시 공부 하도록 하자! ㅎㅎ

어쨋든 이러한 규칙과 이유로 CDO를 만들기 위해 생성자가 먼저 호출 되는데

bNoBattle을 생성자에 호출 했더라도 에디터에서 true로 설정을 해버리면 레벨이 시작되면 true의 값으로 시작되어서

BeginPlay에서 SetState하는 부분은 true로 설정되어 현재 ABSection1은 상태가 COMPLETE가 된다는 말이다.

"완료"상태라면은 문이 열린 상태가 된다는 말이 이제 이해가 됨. p487 내용이다.

OnConstruction 함수 👍

위에 CDO생성 이유 및 생성자 함수 호출 시점등등을 계속 보다보니까 이제야 OnConstruction함수 설명하는 부분인 P487내용의 해당 함수가 뭘 하는 함수이고 왜 하려는 지 이해가 갔다..

OnConstruction이 함수는 언리얼 에디터에서 엑터의 속성이나 트랜스폼 정보가 변경될 때 호출되는 함수이다.

즉 언리얼 에디터에서 컴포넌트 값을 수정하거나 하면 이 함수가 호출이 되어서 같이 변경할 수 있도록 "동기화"느낌의 함수인듯?

그러면 스테이트 값을 에디터에서 건드려보면서 진짜 호출 되는지 보도록 하자.

이렇게 해주고 에디터 컴파일 한다음 로그를 확인해보면은

막 눌러보면은 바뀌는 것을 확인 할 수 있다. 굿굿.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글