앵커는 Widget BluePrint에서 Widget의 기준점이라 생각하면 된다
앵커의 위치에 따라 체력 표시의 위치가 달라지는걸 볼 수 있는데
![]() | ![]() |
---|---|
![]() | ![]() |
언리얼 문서를 봤을 때는 앵커가 뭔지 이해하기 어려웠는데 캐릭터의 체력을 ProgressBar와 Text로 출력하는 Widget BluePrint를 만들면서 제대로 이해할 수 있었다.
tab 키를 눌러서 Menu 창을 띄우고 끌 수 있도록 해보았다
이전에 IMC을 변경하는 것과는 다르게 관련 정보를 찾는데 시간이 많이 걸렸다
일단 Widget 창에서 입력을 받기 위해선
Widget 클래스의 bIsFocusable
프로퍼티를 true
로 하고
SetKeyboardFocus()
를 호출해서 키보드 입력을 받을 준비를 해야한다.
UIOnly()
로 했을 때는 마우스 입력을 받으려면 마우스로 클릭을 한 번 해서 focus를 얻어야 마우스 입력을 할 수 있었다GameAndUI()
로 해서 마우스 입력도 바로 받을 수 있게 바꿨음SetPause(false)
를 해서 게임을 멈춰놨기 때문에 키보드 적용이 안됨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를 교체하는 식도 해볼만 할 것 같다. UI 애니메이션을 무한 반복하고 싶으면 Num Loops to Play = 0
으로 설정하면 된다
그리고 play mode를 설정해서 Designer 탭에서 설정한 Key Frame을 어떻게 재생할지를 정할 수 있다
참조 사이트
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