강의

멘토링

로드맵

Inflearn Community Q&A

raon2218952's profile image
raon2218952

asked

[Rookiss University] UE5 Lyra Clone Coding (Haker)

PawnExtension #2

ExtensionComponent의 CheckDefaultInitialization에 대해서

Resolved

Written on

·

191

0

22분 쯤 모든 Component들의 상태가 Data_Available이 됐을 때

ExtensionComponenot::CheckDefaultInitialization의 CheckDefaultInitializationForImplementers에 의해 다른 Component들이 Data_Initialized State로 전환된다고 하셨는데,

 

CheckDefaultInitializationForImpleters는 Data_Available 이 될 수 있음에도 되지 못한 Component가 있는지 확인해서 Update 해주고

ContinueInitStateChain 에서 비로소 호출한 Component의 State를 가장 먼저 Change 해주니 ExtensionComponent의 State가 Data_Initailizaed 상태로 바뀌고 나머지 Component들은 ExtensionComponent의 상태를 보고 Data_Initialized 상태로 바뀌는거 같습니다.

 

CheckDefaultInitializationForImplementers 에서 모든 Component들의 상태가 Data_Initialized 로 바뀌는게 이해가 잘 안되네요.

 

제가 생각한 로직에서 틀린 부분이 있을까요?

c++unreal-engine

Quiz

What are the main purpose and structure of gameplay tags?

Hierarchical Enum for Identifying Game Elements

Simple string for debugging message output

Unique Integer ID for Performance Optimization

Actor location saving struct

Answer 2

1

Liu님의 프로필 이미지
Liu
Instructor

CheckDefaultInitializationForImplementers는 초기화 상태에 등록된 모든 Component의 CheckDefaultInitialization 메서드를 호출하여, Tick 검사를 하지 않고 PawnExtension을 제외한 다른 Component의 상태가 변경될 때 PawnExtension의 OnActorInitStateChanged가 호출되도록 동작합니다.
변경된 Component의 상태가 InitState_DataAvailable인 경우, CheckDefaultInitialization가 다시 호출되어 PawnExtension 자신과 모든 Component의 상태를 연쇄적으로 업데이트합니다.
마지막으로, PawnExtension을 제외한 다른 Component들은 자신들의 InitState_DataInitialized 단계로 업데이트하기 위해 PawnExtension이 먼저 InitState_DataInitialized로 업데이트되기를 기대하며, PawnExtension이 해당 단계로 업데이트되면 비로소 자신들도 InitState_DataInitialized 단계로 전환됩니다.
이를 통해 각 Component가 서로의 상태를 주고받으며 업데이트를 지속적으로 전파하는 구조를 형성합니다.

구조가 많이 어려운 편이라서 명확하게 순서를 보고 싶으시면 각 상태 업데이트 부분에 Log를 설정해놓으시면 좀 더 이해가 되실꺼에요

rhodonite님의 프로필 이미지
rhodonite
Questioner

디버그랑 Log 찍어가면서 확인했습니다! 감사합니다 ㅎㅎ

확실하지는 않지만 다른 헷갈리실 분들을 위해 남깁니다.

ExtComp::CheckDefaultInitialization->CheckDefaultInitializationForImplementers->
HeroComp::CheckDefaultInitialization->ContinousInitStateChain->
ExtComp::OnActorInitStateChanged->ExtComp::CheckDefaultInitialization->
HeroComp::CheckDefaultInitialization->ContinuousInitStateChain->
ExtComp::CheckDefaultInitialization->ContinousInitStateChain(여기서 ExtComp가 Data_Initialization 으로 transition)

0

안녕하세요, 인프런 AI 인턴입니다. rhodonite님.

ExtensionComponent의 CheckDefaultInitializationForImplementers 함수는 특정 조건을 만족할 때 모든 컴포넌트 상태를 Data_Initialized로 전환하기 위한 로직을 포함하고 있습니다. 이 과정에서 발생할 수 있는 혼동을 해소하기 위해 조금 더 설명을 드리겠습니다.

CheckDefaultInitializationForImplementers는 모든 컴포넌트가 Data_Available 상태가 되었는지 확인하는데, 이 작업을 수행하는 이유는 각 컴포넌트의 초기화가 제대로 이루어졌는지를 함께 검증하기 위함입니다. 해당 함수에서 Component의 상태가 변경되는 순간은 관련된 조건이 모두 충족될 때입니다. 이때 ContinueInitStateChain 함수가 호출되어 실제 상태 전환을 관리하는데, 이 부분이 로직의 핵심입니다.

여기에서 오류가 발생할 수 있는 부분은 ContinueInitStateChain에서 상태 변경이 지연되거나 잘못된 상태 전환이 이루어지는 경우입니다. 이 경우는 컴포넌트의 초기화 순서나 조건을 재점검해 볼 필요가 있습니다.

아래 링크에서는 관련 논의가 잘 정리되어 있으니 참고하시길 바랍니다:

여기에서도 상태 전환 및 초기화 관련 논의가 이루어졌으며, 포인터로 들고 있는 이유가 순환 참조를 막고 효율적인 동적 할당 관리를 위한 것임을 설명합니다. 이 내용을 통해 간접적으로 컴포넌트의 상태 관리에 대해 이해를 도울 수 있을 것입니다.

제가 드린 답변이 도움이 되길 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

raon2218952's profile image
raon2218952

asked

Ask a question