해결된 질문
작성
·
390
0
위젯 컴포넌트의 초기화 과정이
BeginPlay()
InitWidget()
NativeConstruct()
순서로 진행된다고 했고 UABCharacterStatComponent의 OnHpChanged 델리게이트의 알람을 받는 함수는 NativeConstruct 과정에서 등록을 합니다.
UABCharacterStatComponent에서 BeginPlay()를 통해 SetHp() 함수가 실행 될 때 여기서 OnHpChanged.Broadcast 가 실행이 되는데 BeginPlay가 실행되는 시점에서는 아직 NativeConstruct가 실행되지 않았을텐데 어떻게 아직 할당되지 않은 OnHpChanged 가 실행이 되는 건가요?
위 2,3번의 과정들은 Actor의 BeginPlay 후에 실행되고 컴포넌트들의 BeginPlay는 그 후에 실행이 되는걸까요?
답변 2
0
네 말씀하신 부분이 맞습니다.
7강에서는 캐릭터가 죽는 기능에 대해서만 중점적으로 구현하느라 Hp 설정은 우선 보류한 상태입니다.
이후 Hp 값에 대한 올바른 연동은 13강에서 다시 재정비하니 참고하시기 바랍니다.
0
안녕하세요, 인프런 AI 인턴입니다.
존경하는 김종현님, 언리얼 엔진에서 위젯 컴포넌트 및 컴포넌트의 초기화 과정과 관련하여 질문해주셨군요.
일반적으로 언리얼 엔진에서 Actor의 컴포넌트들은 Actor의 BeginPlay가 호출된 후 해당 컴포넌트의 BeginPlay가 호출됩니다. 따라서 컴포넌트의 BeginPlay 내부에서 이벤트를 발생시킬 경우, 아직 위젯의 NativeConstruct가 호출되지 않았기 때문에 이벤트 리스너 등록이 되어 있지 않아 반응하지 않습니다.
Actor와 Actor의 컴포넌트 간에 초기화 순서에 대한 정확한 이해가 필요한 경우, 언리얼 엔진의 공식 문서나 관련 클래스의 헤더 파일을 참조하시는 것이 좋습니다. 또한, 배포된 게임 논리에 따라 커스텀 클래스나 위젯에서 초기화 순서를 조정할 수도 있기 때문에, 실제로 어떻게 작동하는지 확인하기 위해서는 프로젝트의 구체적인 코드 검토가 필요합니다.
위젯 컴포넌트가 가지고 있는 OnHpChanged 델리게이트가 실행되기 전에 해당 델리게이트에 바인딩된 함수가 등록되어 있어야 할 것입니다. 다시 말해, BeginPlay에서 SetHp()와 같은 함수를 호출하고 그 함수 안에서 OnHpChanged.Broadcast가 발생하더라도, 해당 이벤트에 대한 리스너(예: 바인딩된 함수)가 NativeConstruct에서 등록되어야 이벤트가 처리됩니다.
만약 BeginPlay가 실행되는 시점에서 NativeConstruct가 아직 실행되지 않았고, 이로 인해 OnHpChanged 이벤트에 바인딩된 함수가 등록되지 않았다면, OnHpChanged.Broadcast 호출은 아무런 동작을 하지 않게 됩니다 (리스너가 없으므로). 이러한 경우, 위젯의 초기화 과정이 완료된 이후에 바인딩을 확인하고 필요한 동작을 수행하도록 로직을 구성할 수 있습니다.
문의하신 내용에 대한 추가적인 설명이나 예제가 필요하시다면, 언리얼 엔진 관련 커뮤니티나 개발자 문서에서 검색하거나 해당 강의의 지식공유자에게 문의를 해 보시는 것도 좋은 방법입니다.
이 내용이 김종현님의 궁금증을 해소하는 데 도움이 되었으면 합니다. 보다 구체적이고 상세한 답변이 필요하시면 자세한 상황이나 코드를 추가로 제공해주시면 감사하겠습니다.