Inflearn brand logo image

인프런 커뮤니티 질문&답변

hush park님의 프로필 이미지
hush park

작성한 질문수

이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템

8강 : 어트리뷰트와 UI 연동

8강 24:22 CurrentAttributeSet 질문입니다.

작성

·

26

·

수정됨

0

정석적으로 코드를 변경하기 전에 에디터를 실행하려 하면

 

ensure(CurrentAttributeSet);

 

부분에서 에러가 발생하는데, 해당 시점에 CurrentAttributeSet 이 null 이라 에러가 발생하는 것이라면, 이를 피하기 위해 정석적으로 변경 한 후에 똑같은 시점에서 if문을 통과하는 방식으로 바꾼것 까진 이해했습니다.

1. 근데 에디터 실행 시점에는 해당 CurrentAttriabuteSet 이 null 이었다가, 게임 시작 시점에는 값이 채워지는데 이유가 무엇인가요?

  1. 게임 시작시점에는 문제 없으나 에디터를 실행할때 ensure 구문으로 인해 위와 같은 불필요한 크래쉬가 발생한다면, 그냥 ensure을 안쓰고 if문으로 처리하는게 일반적인가요?

답변 2

0

이득우님의 프로필 이미지
이득우
지식공유자

안녕하세요. 답신이 늦었습니다.


1. PossessedBy() 함수가 호출되어야 그 이후에 초기화가 이루어지는데 에디터 모드에서는 PossessedBy() 함수가 호출되지 않아서 그렇습니다. 게임플레이 이후에는 PossessedBy() 함수가 호출되기 때문에 정상적으로 값이 채워집니다.

2. 게임 시작시점에는 문제 없으나 에디터를 실행할때 ensure 구문으로 인해 위와 같은 불필요한 크래쉬가 발생한다면, 그냥 ensure을 안쓰고 if문으로 처리하는게 일반적인가요? - 네 맞습니다. 상황에 따라서 ensure를 사용해서 더 강력하게 null 확인도 할 수 있겠지만, 크래시가 발생하는 명확한 이유를 확인했기 때문에 if 구문에서 null 체크를 하는 것이 일반적인 방법입니다.

0

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

ensure(CurrentAttributeSet); 부분에서 에러가 발생하는 이유는 CurrentAttributeSet이 null일 경우를 대비하는 검사 함수이기 때문입니다. 이로 인해 null 값을 가지는 경우에는 경고 메시지를 발생시킵니다.

왜 null이 되는가?

해당 시점에 NPC나 플레이어의 AttributeSet이 아직 할당되지 않았기 때문에 null인 경우가 많습니다. 주로 게임의 초기화 과정에서 발생할 수 있습니다.

정석적으로 수정 후의 변화

정석적인 코드 수정 후에는, 보통 BeginPlay나 다른 초기화 함수에서 AttributeSet이 적절히 할당되기 때문에 게임 시작 시점에서는 null이 아닌 올바른 값으로 설정됩니다. 이런 임시적인 null 상태를 방지하기 위해 코드에서 비슷한 방식으로 ‘초기화 보장’을 설정할 수 있습니다. 실제 초기화는 BeginPlay 이후에 이루어지므로, 이 시점에 변수가 올바르게 설정됩니다.

이와 관련해서 코드를 작성하고 접근하는 방법에 대한 윤곽을 잡아줄 유사한 기존 답변이 있어 공유드립니다:
- 플레이어에만 위젯을 넣었는데 NPC에서 HpBar가 어떻게 나오나요?? 이 링크에서 게임 내의 초기화와 관련하여 설정이 왜 중요한지에 대해 이야기합니다.

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

hush park님의 프로필 이미지
hush park

작성한 질문수

질문하기