언리얼 엔진 본캠프 9주차-2 언리얼 엔진 C++ : UI

정재훈·2025년 2월 11일
0

unreal engine

목록 보기
26/45

앵커(Anchor)

앵커는 Widget BluePrint에서 Widget의 기준점이라 생각하면 된다

  • 밑의 사진에 박스가 쳐진 꽃 모양이 앵커이다

앵커의 위치에 따라 체력 표시의 위치가 달라지는걸 볼 수 있는데

언리얼 문서를 봤을 때는 앵커가 뭔지 이해하기 어려웠는데 캐릭터의 체력을 ProgressBar와 Text로 출력하는 Widget BluePrint를 만들면서 제대로 이해할 수 있었다.


Tab Menu

tab 키를 눌러서 Menu 창을 띄우고 끌 수 있도록 해보았다
이전에 IMC을 변경하는 것과는 다르게 관련 정보를 찾는데 시간이 많이 걸렸다

일단 Widget 창에서 입력을 받기 위해선
Widget 클래스의 bIsFocusable 프로퍼티를 true로 하고
SetKeyboardFocus()를 호출해서 키보드 입력을 받을 준비를 해야한다.

  • Input Mode를 UIOnly()로 했을 때는 마우스 입력을 받으려면 마우스로 클릭을 한 번 해서 focus를 얻어야 마우스 입력을 할 수 있었다
    • GameAndUI()로 해서 마우스 입력도 바로 받을 수 있게 바꿨음
    • 이러면 문제가 키보드 입력이 게임에도 적용이 되는데, 위에서 SetPause(false)를 해서 게임을 멈춰놨기 때문에 키보드 적용이 안됨
    • 키보드 적용이 안되니까 MenuWidget에서 키보드 입력을 받을 수 있도록 SetKeyBoardFocus()를 호출
생각해보니까 게임을 일시정지하면 PlayerController코드도 멈추니까 키보드 입력이 안받아지는 게 맞는거 같긴하다

그 다음 UserWidget 클래스의 OnKeyDown()를 오버라이딩해야 한다

새로운 UserWidget으로 만들기 어려울 것 같아서 블루프린트로 만들어 봤는데 블루프린트도 쉽지 않았다. 각 노드의 pin들이 뭔지도 모르겠고 어떻게 매치 시켜야할지도 잘 생각나지 않았다

이걸 기반으로 cpp 코드도 대충 짜보자면

class MenuWidget : public UUserWidget
{
	GENERATED_BODY()
    
public:
	// 텍스트 블럭이나 버튼은 에디터에서 추가하는게 빠를 것 같고
    UFUCTION(....)
    virtual FEventReply OnKeyDown(FGeometry MyGeometry, FKeyEvent InKeyEvent) override;
}

FEventReply OnKeyDown(FGeometry MyGeometry, FKeyEvent InKeyEvent)
{
	if(InKeyEvent.GetKey() == EKeys::Tab)
    {
    	GetController()->MenuTab(FInputActionValue())
    }
}

이런 식이면 될 것 같은데, 막상 적어보니까 MenuTab의 인자로 넣을 InputActionValue가 애매해보인다

그냥 SetPause(false) 하지 않고, Tab키만 있는 IMC를 만들어서 IMC를 교체하는 식도 해볼만 할 것 같다.
위젯에서 Enhanced Input System(EIS)를 쓸 수 있도록 하는 Common UI라는 것이 있음(참조 사이트 7,8)

애니메이션 반복

UI 애니메이션을 무한 반복하고 싶으면 Num Loops to Play = 0으로 설정하면 된다

그리고 play mode를 설정해서 Designer 탭에서 설정한 Key Frame을 어떻게 재생할지를 정할 수 있다

  • Forward, Reverse, Ping Pong - 정순, 역순, 왕복(Foward + Reverse)

블루프린트 가져오기







참조 사이트
1. https://dev.epicgames.com/documentation/ko-kr/unreal-engine/umg-anchors-in-unreal-engine-ui
2. https://coding-hell.tistory.com/85
3. https://forums.unrealengine.com/t/user-interface-widget-and-set-mode-ui-only-do-not-capture-input/2041873/4
4. https://gooroomlab.tistory.com/30
5. https://forums.unrealengine.com/t/keyboard-input-in-userwidget/305412/8
6. https://forums.unrealengine.com/t/tab-key-for-ui-widget-adding-and-removing-from-viewport/745822
7. https://dev.epicgames.com/documentation/en-us/unreal-engine/common-ui-plugin-for-advanced-user-interfaces-in-unreal-engine?application_version=5.0
8. https://dev.epicgames.com/documentation/en-us/unreal-engine/using-commonui-with-enhnaced-input-in-unreal-engine?application_version=5.2
9. https://forums.unrealengine.com/t/how-to-create-a-loop-animation-in-umg-by-blueprint/291517/10
10. https://lykanstudio.tistory.com/79
11. https://forums.unrealengine.com/t/create-health-bar-with-ue5-and-c/1314964/6

profile
드가자

0개의 댓글