2. 위젯 셋업

여기서는 왼쪽 마우스 버튼을 눌렀을 때 벌어지는 일에 대한 스크립트를 작성합니다.

Windows
MacOS
Linux
이 페이지의 내용:

이번 단계에서는 왼쪽 마우스 버튼이 언제 눌렸는지 알아내어 눌린 스크린 스페이스 위치를 저장합니다. 또한 DetectDragIfPressed 를 사용하여 플레이어가 지정된 키로 드래그를 하고 있는지 알아냅니다.

단계

  1. HealthBar 위젯 블루프린트를 열고 계층구조 창에서 Canvas Panel 을 삭제합니다.

  2. Progress Bar 를 추가한 뒤, 그 위에 우클릭 하고 Wrap With (감싸기...) 후 Size Box 를 선택, 디테일 패널에서 500 x 50 으로 설정합니다.

    DragDrop4a.png

    옵션으로 Progress Bar 스타일을 정할 수 있습니다. 아래에서 조정된 프리뷰를 Desired on Screen, Percent1.0 으로 설정하여 Progress Bar 를 가득 채우고 초록색으로 변경했습니다.

    DragDrop4b.png

    여기서는 별다른 기능이 있는 Health Bar 를 만들기 보다는, 순전히 데모용으로만 만들겠습니다.

  3. 그래프 모드로 전환한 뒤 내 블루프린트 패널에서 OnMouseButtonDownOnDragDetected 오버라이드를 추가합니다.

    DragDrop5.png

    별도의 커스텀 스크립트를 호출하기 위해 오버라이드할 수 있는 함수가 여럿 있습니다. 여기서는 마우스 버튼이 언제 눌렸는지 검사를 조금 하고 위젯 드래그가 감지되면 무슨 일이 벌어지는지를 설정하겠습니다.

  4. OnMouseButtonDown 노드 안에서 My Geometry 핀을 끌어 놓고 Absolute to Local 노드를 추가합니다.

  5. Mouse Event 핀을 끌어 놓고 Get Screen Space Position 노드를 추가한 뒤 아래와 같이 연결합니다.

    DragDrop6.png

    여기서 마우스 버튼 눌림을 등록한 스크린 스페이스 위치를 구하여, Health Bar 위젯의 절대 좌표를 로컬 스페이스로 변환하고 있습니다. 그러면 플레이어가 위젯의 어디를 실제로 클릭했는지 알 수 있으며, 그를 통해 위젯을 드롭했을 때 어디에 배치할 것인지 결정할 수 있으니, 그 위치를 변수에 저장하겠습니다.

  6. Absolute to LocalReturn Value 핀에 우클릭하고 변수로 승격Drag Offset 이라 합니다.

    DragDrop7.png

    On Mouse Button Down 노드에 오류가 보여도 걱정하지 마세요, 함수를 완료하면 사라질 것입니다.

  7. 그래프에 우클릭하고 Detect Drag if Pressed 노드를 추가합니다.

  8. Drag KeyLeft Mouse Button 로 설정하고 Mouse Event 와 나머지 핀을 아래와 같이 연결합니다.

    DragDrop8.png

    여기서 플레이어가 왼쪽 마우스 버튼으로 드래그했는지 확인한 후 On Drag Detected 스크립트를 시작합니다.

플레이어가 제자리 드래그중인지 감지하는 기능이 생겼으니, 다음에는 드래그가 감지되면 어떤 일이 벌어질 것인지 마무리하도록 하겠습니다.

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback