언어:
페이지 정보
엔진 버전:
언리얼 엔진

1.1 - HUD 예제

언리얼 엔진

이 예제는 간단한 인게임 HUD 데모로, 기본적인 포즈 메뉴 형태의 클릭가능 버튼도 포함되어 있습니다. HUD 위에 생명력 바 머티리얼을 그리고, 블루프린트 인터페이스 함수를 사용하여 캐릭터에서 생명력 값을 구하는 와중에, 목표물 위에 목표물 마커와 아울러 목표물의 이름과 플레이어와의 거리도 그려 줍니다. HUD 블루프린트는 콘텐츠 브라우저에서 BP_HUD_Example 을 검색하면 찾을 수 있습니다.

게임모드

Game Mode (게임 모드)는 디폴트 Pawn 클래스, HUD 클래스, PlayerController 클래스와 더불어 게임 전용 게임플레이 동작이나 세팅을 설정합니다. 이 예제에서, GameInfo_HUD 블루프린트는 BP_HUD_Example 블루프린트를 HUD 클래스로 설정하는 GameMode 블루프린트로 월드 세팅 탭에서 GameMode Override (게임모드 오버라이드)로 설정되어야 합니다.

gamemode_hud.png

HUD

HUD 의 각 엘리먼트를 그리는 데 사용되는 ReceiveDrawHUD 이벤트는 화면 크기를 나타내는 X Y 값을 제공합니다. 이 값을 블루프린트 전반에 활용하여 다양한 HUD 엘리먼트를 게임 화면 크기에 맞게끔 위치와 스케일을 조절, 이를테면 어떤 해상도에서든 화면 중간에 버튼이 유지되도록 하는 것이 가능합니다.

생명력 바

BP_HUD_healthbar.png

생명력 바는 HUD 블루프린트의 컨스트럭션 스크립트에 생성된 다이내믹 머티리얼 인스턴스 입니다. 이 머티리얼에는 Current HealthMaximum Health 스칼라 파라미터에 따라 생명력 바의 길이를 바꾸는 노드가 들어 있으며, HUD 블루프린트에서는 캐릭터의 현재 생명력에 따라 Current Health 파라미터를 업데이트합니다.

픽업

BP_HUD_pickup.png

이 레벨의 목표물 픽업은 BP_Pickup_Child_Health 로, 고급 블루프린트 - 자손 블루프린트 콘텐츠 예제에서도 사용된 것입니다. 레벨 블루프린트에 Objective 변수로 설정되어 있습니다.

HUD 블루프린트에서, Current Objective 가 NULL 이 아니면:

  • 목표물 마커는 Project 함수를 사용하여 (목표물의 위치를 나타내는) 3D 위치 벡터를 2D 화면 좌표로 변환, 해당 좌표에 그려진 목표물 라벨과 아이콘이 화면상에 있을 때는 항상 목표물 액터 위에 떠있을 수 있도록 합니다.

  • Get Text Size 노드를 사용하여 텍스트는 목표물 중앙에 위치시킵니다. 이 노드는 스트링을 HUD 상에 그렸을 때의 높이와 폭을 측정하는데, 텍스트에 사용된 폰트와 스케일도 고려합니다. 기본적으로 텍스트는 왼쪽 정렬되기에, 그 좌표는 좌상단이 될 것이고, 텍스트 좌표에 오프셋을 더해 중앙을 맞추기에는 이 노드가 딱입니다.

포즈 메뉴

BP_HUD_menu.png

포즈 메뉴는 플레이어가 M 키를 누를 때 열립니다. 그러면 PlayerController 블루프린트는 Toggle Menu 함수에 대한 인터페이스 메시지를 실행시킵니다. 이 함수는 BPI_HUD_Interface_Events 블루프린트 인터페이스에 정의되며, 여기에는 목표물 픽업 설정이나 플레이어 캐릭터의 생명력을 구해오는 함수도 포함됩니다.

포즈 메뉴에 포함된 핵심 기능은 다음과 같습니다:

  • 커스텀 함수: Draw Button 이란 이름의 커스텀 함수를 전통적인 방식으로 사용, 버튼을 그리는 데 필요한 (버튼 텍스처, 버튼 텍스트, 히트 박스 등의) 컴포넌트 전부를 그립니다. 이는 한 번의 펑션 노드로 이루어지며, 몇 번이든 재사용 가능합니다. 이와 같은 것은 HUD 에서 특히나 유용한데, 왜냐면 화면 좌표 값, 오프셋 등등을 결정하는 데는 다수의 수학 노드가 필수이고, 함수에 이러한 것들을 한 번에 담아 쉽게 재사용할 수 있기 때문입니다.

  • 히트 박스: DrawButton 함수의 Add Hit Box 함수는 화면의 특정 구역에 마우스를 클릭했다 떼는 것을 간단히 감지해 내기 위해 사용되었습니다. 히트 박스는 위치와 크기로 지정할 수도 있고, 이름으로 지정할 수도 있습니다. 메인 이벤트 그래프의 범용 ReceiveHitBoxClick 이벤트는 히트 박스가 클릭되면 발동되면서 히트 박스의 이름을 출력합니다. 그러면 Switch on Name 노드는 실행 흐름을 이 이름 출력에 맞게 바꿔줍니다.

플레이어 컨트롤러

BP_HUD_pressM.png

BP_PlayerController_HUD 블루프린트는 이 예제의 기본 PlayerController 클래스이며, GameInfo_HUD GameMode 블루프린트에서도 설정되어 있습니다. BP_HUD_Example 블루프린트에서 Press "M" for Menu 스트링이 설정되어 있기는 하지만, M 키가 눌린 데 대한 초기 반응은 사실상 PlayerController 블루프린트에서 설정됩니다.

M 키를 누르면 HUD 블루프린트를 타깃으로 하여 Toggle Menu 인터페이스 메시지가 실행됩니다. 그러면 PlayerController 는:

  • Show Mouse Cursor 를 True 로 설정합니다.

  • Enable Click Events 를 True 로 설정합니다.

  • PlayerController 가 HUD 에 입력을 전해줄 수 있도록 합니다.

  • 게임을 일시정지시킵니다.