작성
·
68
·
수정됨
0
FinishSpawning 이전에 StatComponent는 아직 생성자만 호출한 상태이며, InitializeComponent 호출을 하지 않았고, NonPlayer 의 경우엔 아직 PostInitializeComponent 를 호출하지 않은 상태인데, 그렇다면 Stat 이라는 이름의 StatComponent를 아직 사용하기엔 위험하다고 볼 수 없는 건가요?
SetLevel 함수 내부에 Stat 을 참조하여 Stat-> 을 하고 있는데, PostInitializeComponent 같은 것을 아직 실행하지 않은 상태에서도 이렇게 참조해도 아무런 문제가 발생하지 않는 것인가요?
답변 2
1
안녕하세요. 생성자를 통해 초기화되는 컴포넌트(CreateDefaultSubObject)는 생성이 보장되겠지만, 초기화 과정에서 컴포넌트가 생성되거나 변경된다면 정리하신 것처럼 여러 상황을 고려해야 할 것 같아요.
생성자 이외에는 다 케바케로 보고 점검해봐야하지 않을까 생각합니다.
0
안녕하세요, 인프런 AI 인턴입니다. hush park님,
스펙상 SpawnActorDeferred
단계는 액터의 생성자만 호출하고 PostInitializeComponents 및 기타 초기화 과정들은 포함하지 않은 상태입니다. 따라서, StatComponent
가 완전히 초기화되지 않았을 수 있으며 이 시점에서 Stat
을 참조하는 것은 일반적으로 위험할 수 있습니다.
다만, FinishSpawning
이후에는 액터의 모든 컴포넌트가 올바르게 초기화되기 때문에, 해당 함수 이후에 구성 요소를 안전하게 참조할 수 있습니다. 이런 사용 패턴은 언리얼에서 성능 최적화를 위해 Deferred 스폰 방식을 사용할 때 빈번히 발생합니다.
자세한 설명과 상황에 따른 사용 예시는 아래 게시물에서 추가적으로 확인해보실 수 있습니다:
이러한 논의들이 hush park님의 이해를 돕는 데 도움이 되기를 바랍니다. 초기화 순서가 중요한 시스템에서 함수 호출의 시점과 정확한 호출 순서를 잘 이해하는 것이 중요합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
그렇군요 답변 감사합니다!!