키보드 I를 누르면 블러 효과가 있는 위젯이 나타나는 것을 구현해 볼 것이다.
WBP_Inventory 위젯 블루프린트를 만들고 위와 같이 캔버스 패널 - 오버레이 - 배경 블러 순서로 계층을 만든다.
키보드 I 입력을 위해 기존의 IMC_Action에서 IA_Inventory를 추가하고 I를 할당한다.
BP_Player에서 Create Widget 함수를 추가하고 위젯을 변수로 할당한다.
IA_Invetnroy (키보드 I 할당)를 추가하여 Add to Viewport로 Inventory Widget을 할당한다.
인게임에서 I를 누르면 위와 같이 블러 표현이 된 위젯이 나타나는 것을 볼 수 있다.
위젯을 열었을 때 마우스 커서 표시와 UI에만 포커스를 맞추도록 위와 같이 추가한다. Set Input Mode UI Only로 인하여 위젯을 열었을 때 인게임 입력은 멈추게 된다.
하지만 I를 누르면 위젯이 열리고 다시 I를 눌러도 인게임으로 돌아오지 않는다. 다시 I를 눌렀을 때 인벤토리를 닫고 다시 인게임으로 돌아오기 위한 작업을 해야한다.
WBP_Inventory에서 그래프로 들어간 다음 함수에서 오버라이드된 OnKeyDown 함수를 찾는다.
위와 같이 누른키가 I라면 위젯을 제거하는 Remove from Parent 함수를 호출하고 마우스 커서를 지우고 다시 인게임 입력으로 돌아가기 위해서 Set Input Mode Game Only로 설정한다.
깔끔한 정리를 위하여 BPC_Inventory 액터 컴포넌트를 생성한다.
기존에 BP_Player에 만들었던 것 처럼 MoneyAmount와 Inventory Widget 변수를 추가하고 작업한 노드들을 복사한다.
캡슐 컴포넌트 오버랩 이벤트는 경고가 뜨는데 BPC_Inventory에는 플레이어의 정보가 없기 때문이다.
플레이어의 정보를 얻기 위해 WBP_Inventory의 Begin Play Event에서 BP_Player에 캐스트하고 변수로 저장한다.(변수 이름은 BP_Player)
BP_Player에서 캡슐 컴포넌트를 가져와 Bind Event to Component Begin Overlap 함수를 호출한다.
이벤트 디스패처에서 Create Event를 누르면 [일치하는 함수 생성]이 있다.
이를 누르면 아래와 같이 자동으로 일치하는 입력 노드가 생기는 함수가 자동으로 추가된다.
함수 이름을 PickUpMoney로 수정하고 기존의 노드를 복사 붙이기한다.
위와 같이 BPC_Inventory가 깔끔하게 정리되었다.
BP_Player에서 BPC_Inventory를 추가한다.
돈도 적용되고 I를 눌러 인벤토리 위젯 생성과 다시 I를 누르면 인게임으로 돌아가는 것을 볼 수 있다.
'언리얼 - 게임 개발' 카테고리의 다른 글
첫 게임 개발 (12) _ Inventory _ 체력 UI 구현 (0) | 2024.06.21 |
---|---|
첫 게임 개발 (11) _ Inventory _ UI 및 체력시스템 설계하기 (0) | 2024.06.21 |
첫 게임 개발(9) _ Inventory _ 돈 구현하기 (0) | 2024.06.21 |
첫 게임 개발(8) _ 적과 오버랩시 데미지 (0) | 2024.06.21 |
첫 게임 개발 (7) _ 플레이어의 공격 적 AI에 전달하기 (0) | 2024.06.21 |