NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
저는 운 좋게도 게임 PD로서 지난 10년 동안 몇 개의 게임을 개발하고, 서비스하는 경험을 가질 수 있었습니다.
본 세션에서는 제가 그동안 개발했던 게임들을 간단히 돌아보고, 개발 과정에서 시행착오를 통해 배운 것들을 살펴보려고 합니다.
개인적인 경험이라 편향이 있을 수 있겠지만, 게임 PD나 디렉터 커리어를 목표로 하시는 분들께 참고가 될 수 있으면 좋겠습니다.
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulBansook Nam
Suggest a new pattern "How to divide your Activity & Fragment".
Shows "Lotto - App" sample.
Youtube: https://www.youtube.com/watch?v=_-yZPjf9HLo
Hope it would help to understand Andoird Architecture Pattern.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
저는 운 좋게도 게임 PD로서 지난 10년 동안 몇 개의 게임을 개발하고, 서비스하는 경험을 가질 수 있었습니다.
본 세션에서는 제가 그동안 개발했던 게임들을 간단히 돌아보고, 개발 과정에서 시행착오를 통해 배운 것들을 살펴보려고 합니다.
개인적인 경험이라 편향이 있을 수 있겠지만, 게임 PD나 디렉터 커리어를 목표로 하시는 분들께 참고가 될 수 있으면 좋겠습니다.
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulBansook Nam
Suggest a new pattern "How to divide your Activity & Fragment".
Shows "Lotto - App" sample.
Youtube: https://www.youtube.com/watch?v=_-yZPjf9HLo
Hope it would help to understand Andoird Architecture Pattern.
안녕하세요 주니어 게임 개발자 노대영입니다.
유니티 개발자를 위한 언리얼 페이지를 공부해서 정리했습니다.
자세한 내용은 아래 공식 홈페이지를 확인하세요!
http://api.unrealengine.com/KOR/GettingStarted/FromUnity/index.html
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가 제거됨
확장한 게임모드 적용
확장한 컨트롤러 적용
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 업데이트 시
레퍼런스에 접근할 수 있도록 바인딩
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
33. Invalidation 확인
인벨리데이션 적용 전 인벨리데이션 적용 후
인벨리데이션 적용 에셋 변경 시
• 버튼 3개, 이미지 4개, 스크롤 박스 1개
Invalidation On/Off 비교 결과
Swidget::Paint Count가 줄어들고,
Caced Elements 항목에 추가 된다
Invalidation 위젯 변경시 Paint Count가
증가하는 것을 확인 할 수 있음.
34. Invalidation Box 디버깅
• 최근(2019.06 기준)에 적용된 기능이라
언리얼 Docs에도 자세히 설명된
내용이 없고 효과적으로 사용할 수
있는 방법 연구 필요.