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

yisy0713님의 프로필 이미지
yisy0713

작성한 질문수

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

14강 게임플로우 다듬기

HudWidget 질문이 있어요

해결된 질문

작성

·

95

0

Hud위젯 생성을 PlayerController 클래스가 아닌
Player클래스에 해도 주기 관련해서 문제는 없을까요?

답변 2

0

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

Player 클래스라는게 어떤 것을 의미하는걸까요?

UPlayer를 말씀하시는 것인지요?

주기 관련해서의 문제도 어떤 것인지 자세히 설명주시면 좋겠습니다.

yisy0713님의 프로필 이미지
yisy0713
질문자

현재 HudWidget을 PlayerController 클래스
beginpaly()에서 만들어주고 있는데요.
이렇게 하는 이유가 뭔지 정확히 이해가 안가서
그렇습니다.
그냥 HUD는 플레이어만 소유하고 있는 것이기에 Controller 클래스에서 만든 걸까요?

추가로 HudWidget을 Controller클래스가 아닌 CharacterPlayer클래스 beginpaly에서 만들어주면, SetupHUDWidget() 인터페이스를 사용할 필요가 없지 않나요?
HudWidget클래스 내부에서 player를 얻어올 필요도 없고요.

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

네 이제 어떤 질문인지 이해했습니다.

우선 답변을 드리려면, 용어를 통일시켜야 하는데, 언리얼 프레임웍의 정식 용어와, 제 소스코드에서 사용하는 용어를 통일시키는 것이 좋을 것 같습니다.

우선 말씀하신 플레이어는 언리얼 엔진에서는 폰(Pawn)이라고 표현합니다. 캐릭터라는 용어도 있지만, 캐릭터는 폰을 상속받은 클래스라 둘은 개념적으로 동일해 폰이라고 하겠습니다.

언리얼 엔진에서 플레이어는 네트웍 구조까지 확장했을 때 서버에 접속한 클라이언트의 사용자를 지칭하는 클래스입니다. 싱글플레이 게임도 네트웍 구조에서 로컬 머신에 접속한 사용자로 처리되기에, 플레이어 개념이 들어갑니다. 

폰의 사전적의미는 허수아비, 꼭두각시입니다. 

즉 의지가 없이 내가 하라는대로 하는 물리적인 물체를 의미하는데요, 이는 언리얼 엔진 프레임웍 구조는 사용자가 조종하는 물체(우리가 흔히 말하는 플레이어)를 플레이어 컨트롤러와 폰의 두 개로 구분하고 있기 때문입니다. 

사용자의 의지를 대표하지만, 눈에는 보이지 않는 액터를 플레이어 컨트롤러라고 하고, 의지가 없지만 물리적인 충돌, 시각적인 사람 형태를 보여주는 액터가 폰입니다. 

이는 GTA와 같이 필요에 따라 조종하는 사물을 계속해서 바꾸는 게임 형태를 만들기 쉽도록 감안한 구조입니다. 그래서 지금부터 말씀하시는 플레이어는 폰으로 바꿔 설명하겠습니다. 

정리하면 다음과 같습니다.

- 변하지 않는 게이머의 정보를 담당하는 액터 : 플레이어 컨트롤러

- 상황에 따라 바뀔수 있는 게임 내 메시, 물리 정보 : 폰

여기에서 게이머와 직접적으로 관련있는 입력 및 UI의 처리에 대해서 언리얼 엔진은 플레이어 컨트롤러가 담당하도록 지정했습니다. 

말씀하신 폰 내부에서 간편하게 블루프린트로 CreateWIdget 함수를 호출할 수 있지만 편의를 위한 기능일 뿐 결국에는 플레이어 컨트롤러를 통해 호출하게 됩니다. 

강의에서는 정석대로 알려드리고 싶어서 일부러 플레이어 컨트롤러에서 호출하도록 교안을 구성했습니다.

궁금한점이 해소되면 좋겠습니다. 

0

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

Player클래스에서 Hud Widget을 생성하는 것에 대한 질문을 주셨네요. 기본적으로 Unreal Engine의 HUD는 PlayerController에서 관리하도록 설계되어 있습니다. 이는 HUD가 주로 플레이어에게 개별적인 UI 요소를 제공하기 때문입니다. PlayerController는 특정 플레이어와 연결된 논리를 처리하며, HUD도 이와 밀접한 관련이 있습니다.

그러나 Player클래스에 HUD Widget을 생성해도 작동은 가능할 수 있습니다. 다만 몇 가지 주의할 점이 있습니다:

  1. 소유권 관리: Player 클래스에서 생성된 Widget은 Player 클래스의 소유로 관리됩니다. PlayerController의 생명주기와는 다르게 관리될 수 있습니다.
  2. 게임 로직 통합: UI 업데이트나 관리와 같은 게임 로직이 PlayerController 대신 Player 클래스에 추가되면 코드 가독성과 유지 보수성이 떨어질 수 있습니다.
  3. 네트워크 환경: 다중 플레이어 게임에서는 PlayerController가 클라이언트별로 관리되므로, 네트워크 환경에서 HUD가 적절하게 업데이트되고 동기화될 수 있습니다.

더 자세한 답변이 필요하시면 아래의 유사한 질문들과 답변을 참고해 보시기 바랍니다:

참고할 수 있는 링크:

  1. 플레이어 캐릭터의 블루프린트에 위젯 컴포넌트 질문입니다

    • 이 답변에서는 블루프린트에서 위젯 컴포넌트를 다루는 방법과 관련된 문제를 다루고 있습니다. 특히 UI 컴포넌트의 클래스 설정 과정과 관련된 내용이 포함되어 있습니다.
  2. GameMode의 HUD클래스는 화면에 플레이어HUD랑 중첩되나요?

    • 이 질문은 HUD 클래스와 플레이어 HUD의 관계를 다루며, 공통된 정보를 어떻게 표시하는지에 대해 설명합니다.

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

yisy0713님의 프로필 이미지
yisy0713

작성한 질문수

질문하기