inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[Rookiss University] UE5 Lyra 클론 코딩 (Haker)

PawnExtension #2

ExtensionComponent의 CheckDefaultInitialization에 대해서

해결된 질문

193

rhodonite

작성한 질문수 23

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

답변 2

1

Liu

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를 설정해놓으시면 좀 더 이해가 되실꺼에요

0

rhodonite

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

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

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

0

인프런 AI 인턴

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

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

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

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

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

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

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

AddGameFrameworkComponentReceiver vs AddExtensionHandler

0

22

0

B_TeleportToUserFacingExperience가 추가로 생성되지 않습니다.

0

57

2

.

0

59

1

SpawnDefaultPawnAtTransform_Implementation이 호출되지 않습니다.

0

58

2

Input Subsystem 에서 오류가 발생합니다

0

65

1

7강 GameMode와 Modules관련 질문드립니다.

0

55

1

LyraFrontEnd 에서 로딩화면에서 넘어가지 않는 원인이 뭔지 질문드립니다.

0

82

2

리소스 이주했는데 안보이는데 어떻게 해야하나요?

0

86

3

TakeFromAbilitySystem 함수에서 Array 에 대한 remove 는 수행하지 않나요?

0

57

1

CircumferenceMarkerWidget의 bReticleCornerOutsideSpreadRadius 초기화 관련

0

61

1

Pawn 교체, Possess 후 위젯이 이전 값(상태)을 잘못 보여줄 때 처리법이 궁금합니다.

0

74

2

Pawnextension#3 9:19 질문이 있습니다.

0

61

2

Experience 재시작

0

79

2

Log 파트에서 Subtitution Macro Call 를 사용하는 방법이 무엇인가요?

0

81

2

설치후 빌드하는데 에러가 발생하고 인텔리센스도 잘 활성화되지 않습니다.

0

204

1

FPerContextData에 대해 질문이 있어요

0

49

2

OnGameFeatureActivating와 WorldContext관해 질문 있습니다.

0

68

1

GameFeature Action 및 Common UI Widget 생성 관련 질문

0

80

1

가비지컬렉션 관련 질문있습니다.

0

94

3

Travel관련해서 질문 있습니다.

0

60

1

IMC가 먹통이에요

0

86

2

PawnExtension #3 에서 말한 라이라 공식문서가 뭔가요?

0

65

1

PawnExtensionComponent::SetPawnData에서의 CheckDefaultInitialization

0

58

1

미니맵 제작

0

89

2