ݺߣ

ݺߣShare a Scribd company logo
Unreal Engine 4 Editor 확장하기
게임 개발 툴 이야기
참고 자료
http://blog.dustinlee.me/221380397496
https://github.com/Indp-Dustin/IGCEditorExtentions
/ssuser052dd11/igc2018-120411230
이득우님 블로그, Github, IGC2018 발표자료
게임 개발 툴
유니티 언리얼이 나오고 나서는 툴 = 게임 엔진
기본적으로 실행했을 때 나오는 것은 사실 게임 엔진을 편히 다룰 수 있도록 되어있는 툴
게임 개발 툴
라이브러리만 제공하는 엔진 또는 자체 엔진의 경우 별도의 툴을 제공해주지 않는다.
직접 개발해야함!
왜 툴이 필요할까?
몬스터 또는 배경 오브젝트를 일일이 좌표를 넣어서 코드상에서 배치를 한다면…
어마어마한 노가다, 마음에 안들 때 마다 빌드를 돌리는 등 해야할 것이며
왜 툴이 필요할까?
데이터로 만들어서 파싱하여 수정할 때 마다 리로드 기능을 제공하는 것도 나쁘지는 않겠지만
왜 툴이 필요할까?
툴만 있다면 눈으로 보고 게임 화면에 이렇게 나오겠구나를 쉽게 보고 배치를 할 수 있다
왜 툴이 필요할까?
툴이 없다면 아래의 맵에 옆 화면과 같이 Collider를 프
로그래머가 열심히 입력하면 된다.
(생산성 효율 최악)
별의 커비 모작 코드 Stage 1
툴 개발
툴 개발 GUI 소개 (MFC, WinForm, WPF, Imgui, Web, QT)
렌더링은 어떤 방식이든 자유롭게
데이터 중요
- 바이너리
- xml json 등 ...
툴 개발
어떤 GUI를 선택할 것인가?
GUI에 따라 사용해야할 언어도 차이가 날 것이다.
MFC(C++), QT(C++, Python), Winform(C#), Imgui(C++) 등등...
툴 개발
어떻게 보여줄 것인가? (Console, GDI, OpenGL, DirectX, WebGL 등등)
개인 엔진 또는 제공되는 엔진의 Renderer를 사용하는 것이 좋다.
툴 개발
데이터는 어떻게 저장하고 불러올 것인가?
txt, binary, xml, json 등 다양한 방법으로 저장하고 불러올 수 있다.
툴 개발
Binary데이터의 경우 읽고 쓰는 속도가 빠를 것이다.
툴 개발
하지만 데이터의 순서가 맞지 않을 경우 세이브 / 로드, 실행에 문제가 발생할 것이다. 예를
들어 데이터 하나가 추가로 필요하면 기존의 저장된 데이터가 사용불가능이 될 수도 있다.
툴 개발
xml, json 등 데이터 파싱하는 라이브러리를 사용할 경우 key, value 형태로 저장 후 데이
터를 가져오는 형태로 되어있는 뜻 하다. 데이터 추가 삭제가 용이한 대신 바이너리보다는
느릴 것이다.
툴 개발
결론으로 툴은 데이터를 어떻게 저장하고 불러와서 적용할 것인가가 가장 중요하다.
Unreal Engine 4의 .umap 레벨 데이터를 메모장으로 열었을 때
툴 개발
결론으로 툴은 데이터를 어떻게 저장하고 불러와서 적용할 것인가가 가장 중요하다.
언리얼 엔진 4에서 툴 확장
예제 프로젝트 Github https://github.com/4roring/KK1Action
에디터 구조
Editor Module
Native
Module
Slate
Module
Engine
Module
Core
Core(Native Module)에서 수학, 자료구조, 델리게이트, 스마트포인터 등 지원 (접두사 F)
엔진 모듈은 UObject 등 오브젝트 시스템, 리소스 관리 (UObject, AActor)
Slate는 에디터 UI를 제공 (접두사 S)
모듈 시스템
언리얼 엔진은 자체적인 빌드 시스템인 언리얼 빌드 툴을 이용하여 모듈 단위로 DLL을 만들고 로드하는 방식
으로 동작한다.
기본적으로 프로젝트 생성시 게임 플레이 모듈이 하나 생성되어 있다.
게임 플레이 모듈 시스템 - https://docs.unrealengine.com/ko/Programming/Modules/Gameplay/index.html
모듈 시스템
모듈 시스템을 이용하여 게임 플레이, 데이터 로드 관련, 에디터 등으로 모듈화 하여 개발을 할 수 있다.
에디터 모듈 생성
에디터 모듈 코드를 작성할 폴더를 추가하고 해당 폴더에 EditorModuleName.Build.cs, 소스 코드 추가.
에디터 모듈 생성
에디터 모듈에서 포함할 모듈을 작성해주고 모듈 코드도 작성한다. ( IModuleInterface 상속 )
.cpp에서 IMPLEMENT_MODULE(ModuleClassName, ModuleName)을 작성하여 이 클래스는 모듈임을 알린
다.
에디터 모듈 생성
ProjectNameEditor.Target.cs에 에디터 빌드에 사용할 타겟으로 게임 플레이 모듈과 에디터 모듈 모두 추가한
다. 에디터에서 게임 플레이에 관련된 Asset을 편집할 것이기 때문이다.
에디터 모듈 생성
ProjectNameEditor.uproject 파일을 메모장 또는 Visual Studio 등 텍스트 편집기로 열어서 모듈에 대한 정보
를 추가해준다.
이렇게 해야 에디터에서도 해당 모듈을 사용한다는 것을 알게되어 사용한다.
에디터 모듈 생성
작성 완료 후 Generate Visual Studio project files를 통하여 솔루션 파일을 다시 생성한다. 그럼 다음과 같이
잘 정리되어 있을 것이다.
레벨 에디터 확장
언리얼 엔진에서 기본적으로 제공하는 에디터 중 레벨 에디터를 확장해본다.
레벨 에디터 에셋 에디터
레벨 에디터 확장
먼저 편집 - 에디터 개인설정에 기타 메뉴의 Display UIExtension Points를 체크하고 에디터를 다시 실행한다.
레벨 에디터 확장
레벨 에디터의 각 메뉴의 위치를 알 수 있게되고 이제 어느 위치에 메뉴를 추가할지 결정할 수 있다.
메뉴 추가
메뉴를 추가하는 방법도 몇가지 있지만 Action과 Command를 이용하여 추가하는 방법을 이용해본다.
Command List에 Command를 등록하면서 동작할 때 호출할 Action을 함께 등록하여 사용한다.
Action1
Action2
OpenKK1
AssetEditor
(Action)
OpenKK1
AssetEditor
(Command)
Command1
Command2
Command
List
메뉴 추가
먼저 메뉴에 사용할 Command와 Action을 구현한다.
메뉴 추가
Command에서는 메뉴 이름과 메뉴에 마우스를 대고 있을 시 보여주는 Tooltip, 그리고 CommandType 등
UI_COMMAND 매크로를 통하여 설정하고 생성한다.
메뉴 추가
Action은 Command에서 어떤 동작을 실행할지 구현한다.
메뉴 추가
Command와 Action을 구현했으니 이제 에디터 모듈에 CommandList를 생성 후 등록한다.
메뉴 추가
이어서 Menu를 LevelEditor에 추가해본다. 메뉴를 생성할 함수를 만들어 LevelEditor에 붙여주었다.
191221 unreal engine 4 editor 확장하기

More Related Content

191221 unreal engine 4 editor 확장하기