SlideShare a Scribd company logo
UMG, 이벤트 바인딩,
Invalidation Box
2019. 06
데브루키 스터디 대영
발표 주제 선정 이유
• Unreal의 UI를 책임지는 UMG
• Unreal Korea 영상 중 잘 정리된 부분이 있어 탑승
• 참고자료
Unreal Korea - UMG 시작에서 최적화 까지
https://www.youtube.com/watch?v=6SaKxTv1GII
목차
• UMG란?
• UMG 튜토리얼 간단 살펴보기
• 함수 , 프로퍼티, 이벤트 바인딩
• Invalidation Box? 와 디버깅 툴
UMG란?
• Unreal Motion Graphic Designer 줄임말
Unreal 게임내 HUD, 메뉴, 유저 인터페이스 만들고 사용가
능한 제작툴
• UMG의 핵심은 Widget과 Widget으로 구성된 Widget
BluePrint
UMG 모듈 추가하기
• UMG를 C++ 코드에서 사용하기 위해서 Build.cs에서 모듈
종속성을 추가해줘야한다.
• UMG, Slate, SlateUI를 추가해줘야함(UMG는 Slate,
SlateUI에 종속되어 있음)
GameMode 확장
• UMG를 플레이어에게 표시하기 위해서는 GameMode에
PlayerController 설정이 되어야함
레벨 전환시 게임모드가 달라질 경우 기존 UI가 제거됨
확장한 게임모드 적용
확장한 컨트롤러 적용
GameMode 확장
• UserWidget을 AddViewport()를 통해 화면에 출력 가능
ReomoveFromViewport() 화면에서 제거 기능.
PlayerController 확장
• UMG의 UI 상호작용을 위해 PlayerController를 확장해준다.
• PlayerController에서 마우스 커서를 게임 화면에 표시할 수 있음.
• 작성된 PlayerController는 앞서 확장한 GameMode Controller에 적용
시켜야한다
마우스 커서 표시
입력이 게임 과 UMG 상호작용이
되도록 설정
UserWidget 만들기
• 앞서 설명한 것처럼 Text, Image 등 UI의 요소는 Widget
Widget을 사용자가 조합하여 만들어 정의하는 것을
UserWidget이라 하고 이를 로드 및 재활용 하기 위해
위젯 블루프린트로 만든다
UserWidget 만들기
• 디자이너 탭에서 UI 구성요소를 설정할 수 있음.
Widget 자식 Widget을 포함시킬 수 있는 여부가 다름 , 인지하고
UI 만드는게 중요할 거 같음.
• 디테일에서 Widget의 프로퍼티를 설정 및 바인딩 할 수 있음.
• 사용자 생성에는 사용자가 정의한 WBP 모두가 표시되므로
찾기 어려워지므로 네이밍 규칙을 만들어야함
바인드
Slot
• Text 나 Image는 유니티 UI 처럼 독립적으로 위치 조정이
불가하고 Panel에 있는 Widget에 포함되면 디테일에
Slot이라는 Widget 좌표, 크기 등을 설정할 수 있게 됨.
Canvas Panel, Grid Panel 등 각각의 독자적인 Slot 제공.
UMG 출력해보기
• 앞서 확장된 GameMode::BeginPlay 에서 시작 위젯을
AddViewport 해줬기 때문에 화면에 출력이 된다.
확장된 Game Mode 시작 위젯
UserWidget 바인딩
• UMG에 함수, 프로퍼티, 이벤트를 바인딩하여
UI 업데이트를 할 수 있음.
• Unreal Docs 바인딩 권장 순
이벤트 > 프로퍼티 > 함수
프로퍼티, 함수 바인딩은 매 프레임
이벤트 바인딩을 통해
이벤트를 받을 경우만 업데이트 하는 경우가 바람직하다
함수 바인딩
• UMG에서 함수 바인딩을 위해
변수에 접근할 수 있게 지정해준다.
• Wiget에서 바인딩 할 부분을 선택
하고 생성해준다.
함수 바인딩
• 함수를 정의하여 Widget의 바인딩 한다.
• 오른쪽 이미지를 보듯이 매 프레임마다
정의한 함수를 호출 및 형변환.(비효율적)
프로퍼티 바인딩
• 이벤트 그래프에서 레퍼런스
변수를 저장하여, UI 업데이트 시
레퍼런스에 접근할 수 있도록 바인딩
프로퍼티 바인딩
• WBP 툴에서 레퍼런스 변수를 추가 및
로직 구성 해줌.
프로퍼티 바인딩
• 바인딩 할 프로퍼티를 지정해준다
프로퍼티 바인딩
• 함수 바인딩과 다르게 매 프레임마다
형변환을 해줄 필요는 없지만
매 프레임마다 접근해야하는 문제는
계속 발생됨.
이벤트 바인딩
• UI 변경을 원할때만 변경되는
이벤트 바인딩, 그래프에서
해당 위젯에 접근하기 위해서는 디테일
변수인지 Flag Check를 해준다.
그래프에서 해당 위젯에 접근하
려면 체크!
프로퍼티 및 함수 바인딩
제거해주세요
이벤트 바인딩
• 바인딩 할 이벤트를 매크로를 통해
등록하고 이벤트를 정의해준다.
이벤트를 알리고 싶을 때
Broadcast를 통하여 이벤트 통지.
이벤트 바인딩
• 프로퍼티 바인딩 부분이 일부 포함되
며 뒤에 이벤트 바인딩 및
이벤트 Rcv 로직을 구현해줘야함.
프로퍼티 바인딩
MyPawn에 정의한
이벤트에 바인딩 해준다
이벤트 바인딩
• 앞에서 체크한 변수인지
flag를 통해 WBP의 Widget 접근 가능
이벤트 호출 시 로직을 작성한 후 테스
트
변수 인지
이벤트 바인딩
• 특정 이벤트가 호출될 때
호출 되는것이 확인 가능하다.
이벤트 바인딩
• 특정 위젯은 디테일에서 이미 정의된 이
벤트를 바인딩 할 수 있음.
Invalidation Box
• UMG 최적화 방법 중 하나, 위젯이 변경
되는 내용이 없는 경우 Invalidation Box
하위 자식으로 넣으면 자식의 지오메트리를
캐싱하여 Tick, Paint 등이 처리되지 않음
UI 렌더링 속도를 늘릴 수 있음.
오늘 알아볼 것
Invalidation Box 적용법
• 변화가 없을 것으로 예상 될 위젯을
Invalidation Box 자식으로 두거나
우 클릭하여 감싸기를 해준다. 끝?
효과가 있을까?
• 변화가 없을 것으로 예상 될 위젯을
Invalidation Box 자식으로 두거나
우 클릭하여 감싸기를 해준다. 끝?
Invalidation Box 알아두어야 할 점
• 자식들이 변경이 있는 경우 통보를 받고,
변경이 생길 경우 Invalidation Box가
포함한 자식 위젯이 캐쉬 생성을 다시 한다. (
비효율적)
캐시된 Widget
자식 위젯 변경
캐싱 다시 시작
Invalidation Box 알아두어야 할 점
• 특정 자식 위젯을 캐싱에서 제외
하고 싶다면 디테일 Perfomance에서
Is Volatile Flag를 체크해주자
• 자식 위젯이 위치만 변경된다면
- relative transform Flag 체크
(스크롤에 좋음)
Invalidation Box 디버깅
• 위젯 블루프린트 편집창에서 위젯 리플렉터 아이콘
클릭 또는 Ctrl + Shift + W를 눌러 Invalidation 디버
깅을 체크하면
디버깅을 할 수 있음.
인벨리데이션 디버깅
인벨리데이션 적용
된 Widget
Invalidation Box 디버깅
• 초록색 – 캐시된 위젯
빨강색 – 현재 프레임에서 캐시 무효된 위젯
노랑색 - Volatile 체크 위젯
파랑색 – Relative Transform 체크 위젯
Invalidation 확인
인벨리데이션 적용 전 인벨리데이션 적용 후
인벨리데이션 적용 에셋 변경 시
• 버튼 3개, 이미지 4개, 스크롤 박스 1개
Invalidation On/Off 비교 결과
Swidget::Paint Count가 줄어들고,
Caced Elements 항목에 추가 된다
Invalidation 위젯 변경시 Paint Count가
증가하는 것을 확인 할 수 있음.
Invalidation Box 디버깅
• 최근(2019.06 기준)에 적용된 기능이라
언리얼 Docs에도 자세히 설명된
내용이 없고 효과적으로 사용할 수
있는 방법 연구 필요.
Q&A
감사합니다

More Related Content

PDF
UI드자이너의 짧은 언리얼 UMG 사용기
PPTX
UI아트 작업자를 위한 언리얼엔진4 UMG #1
PPTX
AAA게임_UI_최적화_및_빌드하기.pptx
PDF
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
PDF
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
PPTX
언리얼을 활용한 오브젝트 풀링
PDF
UE4でマルチプレイヤーゲームを作ろう
PDF
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
UI드자이너의 짧은 언리얼 UMG 사용기
UI아트 작업자를 위한 언리얼엔진4 UMG #1
AAA게임_UI_최적화_및_빌드하기.pptx
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
언리얼을 활용한 오브젝트 풀링
UE4でマルチプレイヤーゲームを作ろう
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들

What's hot (20)

PDF
UE4のモバイル開発におけるコンテンツアップデートの話 - Chunk IDとの激闘編 -
PDF
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
PPTX
리플렉션과 가비지 컬렉션
PPTX
UnrealBuildTool勉強会まとめ
PDF
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
PPTX
GameInstance에 대해서 알아보자
PDF
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
PDF
나만의 엔진 개발하기
PPT
Plug-ins & Third-Party SDKs in UE4
PPTX
UE4のためのより良いゲーム設計を理解しよう!
PDF
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
PPTX
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
PDF
UE4で作成するUIと最適化手法
PPTX
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
PDF
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
PDF
わからないまま使っている?UE4 の AI の基本的なこと
PDF
60fpsアクションを実現する秘訣を伝授 解析編
PDF
고대특강 게임 프로그래머의 소양
PDF
なぜなにFProperty - 対応方法と改善点 -
UE4のモバイル開発におけるコンテンツアップデートの話 - Chunk IDとの激闘編 -
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
리플렉션과 가비지 컬렉션
UnrealBuildTool勉強会まとめ
徹底解説!UE4を使ったモバイルゲーム開発におけるコンテンツアップデートの極意!
GameInstance에 대해서 알아보자
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
나만의 엔진 개발하기
Plug-ins & Third-Party SDKs in UE4
UE4のためのより良いゲーム設計を理解しよう!
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
UE4で作成するUIと最適化手法
ndc 2017 어쩌다 신입 - 초보 게임 개발자 2년 간의 포스트모템
SAMURAI JACK開発事例:海外むけアクションゲームをオーソドックスに作ってみた UNREAL FEST EXTREME 2021 SUMMER
わからないまま使っている?UE4 の AI の基本的なこと
60fpsアクションを実現する秘訣を伝授 解析編
고대특강 게임 프로그래머의 소양
なぜなにFProperty - 対応方法と改善点 -
Ad

More from 대영 노 (7)

PPTX
Dev rookie codecomplete-1
PPTX
Unrealjs
PPTX
Google c++codingconvention
PPTX
[Dev rookie]designpattern
PPTX
Start unreal
PPTX
[데브루키]노대영_프린이를 위하여(프로그래밍 어린이)
PPTX
[데브루키]노대영_알고리즘 스터디
Dev rookie codecomplete-1
Unrealjs
Google c++codingconvention
[Dev rookie]designpattern
Start unreal
[데브루키]노대영_프린이를 위하여(프로그래밍 어린이)
[데브루키]노대영_알고리즘 스터디
Ad

Umg ,이벤트 바인딩, Invaidation Box

  • 1. UMG, 이벤트 바인딩, Invalidation Box 2019. 06 데브루키 스터디 대영
  • 2. 발표 주제 선정 이유 • Unreal의 UI를 책임지는 UMG • Unreal Korea 영상 중 잘 정리된 부분이 있어 탑승 • 참고자료 Unreal Korea - UMG 시작에서 최적화 까지 https://www.youtube.com/watch?v=6SaKxTv1GII
  • 3. 목차 • UMG란? • UMG 튜토리얼 간단 살펴보기 • 함수 , 프로퍼티, 이벤트 바인딩 • Invalidation Box? 와 디버깅 툴
  • 4. UMG란? • Unreal Motion Graphic Designer 줄임말 Unreal 게임내 HUD, 메뉴, 유저 인터페이스 만들고 사용가 능한 제작툴 • UMG의 핵심은 Widget과 Widget으로 구성된 Widget BluePrint
  • 5. UMG 모듈 추가하기 • UMG를 C++ 코드에서 사용하기 위해서 Build.cs에서 모듈 종속성을 추가해줘야한다. • UMG, Slate, SlateUI를 추가해줘야함(UMG는 Slate, SlateUI에 종속되어 있음)
  • 6. GameMode 확장 • UMG를 플레이어에게 표시하기 위해서는 GameMode에 PlayerController 설정이 되어야함 레벨 전환시 게임모드가 달라질 경우 기존 UI가 제거됨 확장한 게임모드 적용 확장한 컨트롤러 적용
  • 7. GameMode 확장 • UserWidget을 AddViewport()를 통해 화면에 출력 가능 ReomoveFromViewport() 화면에서 제거 기능.
  • 8. PlayerController 확장 • UMG의 UI 상호작용을 위해 PlayerController를 확장해준다. • PlayerController에서 마우스 커서를 게임 화면에 표시할 수 있음. • 작성된 PlayerController는 앞서 확장한 GameMode Controller에 적용 시켜야한다 마우스 커서 표시 입력이 게임 과 UMG 상호작용이 되도록 설정
  • 9. UserWidget 만들기 • 앞서 설명한 것처럼 Text, Image 등 UI의 요소는 Widget Widget을 사용자가 조합하여 만들어 정의하는 것을 UserWidget이라 하고 이를 로드 및 재활용 하기 위해 위젯 블루프린트로 만든다
  • 10. UserWidget 만들기 • 디자이너 탭에서 UI 구성요소를 설정할 수 있음. Widget 자식 Widget을 포함시킬 수 있는 여부가 다름 , 인지하고 UI 만드는게 중요할 거 같음. • 디테일에서 Widget의 프로퍼티를 설정 및 바인딩 할 수 있음. • 사용자 생성에는 사용자가 정의한 WBP 모두가 표시되므로 찾기 어려워지므로 네이밍 규칙을 만들어야함 바인드
  • 11. Slot • Text 나 Image는 유니티 UI 처럼 독립적으로 위치 조정이 불가하고 Panel에 있는 Widget에 포함되면 디테일에 Slot이라는 Widget 좌표, 크기 등을 설정할 수 있게 됨. Canvas Panel, Grid Panel 등 각각의 독자적인 Slot 제공.
  • 12. UMG 출력해보기 • 앞서 확장된 GameMode::BeginPlay 에서 시작 위젯을 AddViewport 해줬기 때문에 화면에 출력이 된다. 확장된 Game Mode 시작 위젯
  • 13. UserWidget 바인딩 • UMG에 함수, 프로퍼티, 이벤트를 바인딩하여 UI 업데이트를 할 수 있음. • Unreal Docs 바인딩 권장 순 이벤트 > 프로퍼티 > 함수 프로퍼티, 함수 바인딩은 매 프레임 이벤트 바인딩을 통해 이벤트를 받을 경우만 업데이트 하는 경우가 바람직하다
  • 14. 함수 바인딩 • UMG에서 함수 바인딩을 위해 변수에 접근할 수 있게 지정해준다. • Wiget에서 바인딩 할 부분을 선택 하고 생성해준다.
  • 15. 함수 바인딩 • 함수를 정의하여 Widget의 바인딩 한다. • 오른쪽 이미지를 보듯이 매 프레임마다 정의한 함수를 호출 및 형변환.(비효율적)
  • 16. 프로퍼티 바인딩 • 이벤트 그래프에서 레퍼런스 변수를 저장하여, UI 업데이트 시 레퍼런스에 접근할 수 있도록 바인딩
  • 17. 프로퍼티 바인딩 • WBP 툴에서 레퍼런스 변수를 추가 및 로직 구성 해줌.
  • 18. 프로퍼티 바인딩 • 바인딩 할 프로퍼티를 지정해준다
  • 19. 프로퍼티 바인딩 • 함수 바인딩과 다르게 매 프레임마다 형변환을 해줄 필요는 없지만 매 프레임마다 접근해야하는 문제는 계속 발생됨.
  • 20. 이벤트 바인딩 • UI 변경을 원할때만 변경되는 이벤트 바인딩, 그래프에서 해당 위젯에 접근하기 위해서는 디테일 변수인지 Flag Check를 해준다. 그래프에서 해당 위젯에 접근하 려면 체크! 프로퍼티 및 함수 바인딩 제거해주세요
  • 21. 이벤트 바인딩 • 바인딩 할 이벤트를 매크로를 통해 등록하고 이벤트를 정의해준다. 이벤트를 알리고 싶을 때 Broadcast를 통하여 이벤트 통지.
  • 22. 이벤트 바인딩 • 프로퍼티 바인딩 부분이 일부 포함되 며 뒤에 이벤트 바인딩 및 이벤트 Rcv 로직을 구현해줘야함. 프로퍼티 바인딩 MyPawn에 정의한 이벤트에 바인딩 해준다
  • 23. 이벤트 바인딩 • 앞에서 체크한 변수인지 flag를 통해 WBP의 Widget 접근 가능 이벤트 호출 시 로직을 작성한 후 테스 트 변수 인지
  • 24. 이벤트 바인딩 • 특정 이벤트가 호출될 때 호출 되는것이 확인 가능하다.
  • 25. 이벤트 바인딩 • 특정 위젯은 디테일에서 이미 정의된 이 벤트를 바인딩 할 수 있음.
  • 26. Invalidation Box • UMG 최적화 방법 중 하나, 위젯이 변경 되는 내용이 없는 경우 Invalidation Box 하위 자식으로 넣으면 자식의 지오메트리를 캐싱하여 Tick, Paint 등이 처리되지 않음 UI 렌더링 속도를 늘릴 수 있음. 오늘 알아볼 것
  • 27. Invalidation Box 적용법 • 변화가 없을 것으로 예상 될 위젯을 Invalidation Box 자식으로 두거나 우 클릭하여 감싸기를 해준다. 끝?
  • 28. 효과가 있을까? • 변화가 없을 것으로 예상 될 위젯을 Invalidation Box 자식으로 두거나 우 클릭하여 감싸기를 해준다. 끝?
  • 29. Invalidation Box 알아두어야 할 점 • 자식들이 변경이 있는 경우 통보를 받고, 변경이 생길 경우 Invalidation Box가 포함한 자식 위젯이 캐쉬 생성을 다시 한다. ( 비효율적) 캐시된 Widget 자식 위젯 변경 캐싱 다시 시작
  • 30. Invalidation Box 알아두어야 할 점 • 특정 자식 위젯을 캐싱에서 제외 하고 싶다면 디테일 Perfomance에서 Is Volatile Flag를 체크해주자 • 자식 위젯이 위치만 변경된다면 - relative transform Flag 체크 (스크롤에 좋음)
  • 31. Invalidation Box 디버깅 • 위젯 블루프린트 편집창에서 위젯 리플렉터 아이콘 클릭 또는 Ctrl + Shift + W를 눌러 Invalidation 디버 깅을 체크하면 디버깅을 할 수 있음. 인벨리데이션 디버깅 인벨리데이션 적용 된 Widget
  • 32. Invalidation Box 디버깅 • 초록색 – 캐시된 위젯 빨강색 – 현재 프레임에서 캐시 무효된 위젯 노랑색 - Volatile 체크 위젯 파랑색 – Relative Transform 체크 위젯
  • 33. Invalidation 확인 인벨리데이션 적용 전 인벨리데이션 적용 후 인벨리데이션 적용 에셋 변경 시 • 버튼 3개, 이미지 4개, 스크롤 박스 1개 Invalidation On/Off 비교 결과 Swidget::Paint Count가 줄어들고, Caced Elements 항목에 추가 된다 Invalidation 위젯 변경시 Paint Count가 증가하는 것을 확인 할 수 있음.
  • 34. Invalidation Box 디버깅 • 최근(2019.06 기준)에 적용된 기능이라 언리얼 Docs에도 자세히 설명된 내용이 없고 효과적으로 사용할 수 있는 방법 연구 필요.
  • 35. Q&A