이득우 교수님께서 IGC에서 발표해주신 언리얼 에디터 확장하기를 메인으로 공부 시작.
언리얼 위키
https://wiki.unrealengine.com/Creating_an_Editor_Module#Module_Folder_Structure
일본어 블로그
http://historia.co.jp/archives/370/
내가 이걸 정리하는 이유는 처음봤을때 자료를보며 누락된 내용이나 배경지식의 부족 때문에
삽질을 오지게해서다.
자 여기서 흔히 언리얼에서 코딩하는건 런타임모듈인데.
저기 에디터 모듈이라는거 따로 만들어줘야한다.
난 이거 언리얼에서 자동으로 만들어주는줄 알고 코드만 따라 쳐봤다가ㅋㅋ
왜 에러나지 하면서 하루종일 MSDN 쳐다보고있었다. ㅡㅡ
첫번째로 할일은 uproject파일을 메모장으로열면
프로젝트의 정보가 json파일 형태로 나타난다.
요걸
이렇게 모듈이름을 정해주도 타입을 에디터로 해서 추가해준다.
대표
사진 설명을 입력하세요.
저 폴더를 만들고
extensionEditor.target.cs 소스를
using UnrealBuildTool;
using System.Collections.Generic;
public class extensionEditorTarget : TargetRules
{
public extensionEditorTarget(TargetInfo Target) : base(Target)
{
Type = TargetType.Editor;
ExtraModuleNames.AddRange( new string[] { "extension", "extensionEditor" } );
}
}
코드처럼 에디터 모듈을 코딩해준다.
일단 모듈을 만드려면 이렇게
소스폴더 안에 모듈폴더를 만들고
그 안에 폴더이름과 같은 파일들을 만들어줘야 하는데 내용물도 비슷해야 하므로
아예 새로만들면 같은 코딩을 두번해야하는 귀찮음이 있으니
프로젝트 만들면 있는 소스들을 복붙한다음 파일 이름이랑 안에 코드들만 바꿔주면 편하게만들 수 있다.
EditorStudy.build.cs 파일을 보고 의미를 찾아봤다.
이외에 API목록은 여기 찾아보면 있음 http://api.unrealengine.com/INT/API/
이제 헤더파일을 뜯어보자.
#pragma once
#include "CoreMinimal.h"
//
class FExtensionModule : public IModuleInterface
{
public:
// IModuleInterface 인터페이스 상속을 받으며 이 모듈이 로드,언로드 될때 호출할 가상함수 선언
/** IModuleInterface implementation */
virtual void StartupModule() override;
virtual void ShutdownModule() override;
//이 두개는 cpp에서 무조건 구현해야함 안하면 에러뱉음
private:
//FUIcommandlist 클래스는 에디터상의 멀티박스와 매핑해주는 클래스.
TSharedPtr<class FUICommandList> CommandList;
};
열심히 구글링했는데 아직은 먼말인지 정확히 이해는 안되나 그런 인터페이스라고 대충 알아먹어두자.
그리고 모듈의 구현부
#include "extensionEditor.h"
#include "Modules/ModuleManager.h"
//멀티박스 추가에 필요한 헤더
#include "Framework/MultiBox/MultiBoxExtender.h"
#include "Framework/MultiBox/MultiBoxBuilder.h"
#include "LevelEditor.h"
// IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, extension, "extension" );
//Primary게임모듈은 한프로젝트에 하나만 있어야한다는 규칙이다.
//지금 만드는건 에디터용 보조모듈이니 임플리먼트 모듈로 만든다.
IMPLEMENT_MODULE(FextensionEditor, "ExtensionEditor");
#define LOCTEXT_NAMESPACE "Menu"
void FextensionEditor::StartupModule(){
}
void FextensionEditor::ShutdownModule() {
}
#undef LOCTEXT_NAMESPACE
이렇게 만들고 솔루션을 다시 빌드한 후 .
언리얼 에디터를 켜서러 새 c++ 클래스를 만들면.
그리고 모듈제작을 했으니 에디터 모듈이 제작가능해진다!
내가 이 모듈을 사용할때 어떤 명령을 내리고 어떤 동작을 실행할건지 또 정해줘야한다.
https://api.unrealengine.com/INT/API/Runtime/Slate/Framework/Commands/TCommands/index.html
TCommands
A base class for a set of commands.
api.unrealengine.com
FUICommandInfo::FUICommandInfo
Creates and initializes a new instance.
api.unrealengine.com
위 링크는 언리얼 에디터 내에 UI정보를 담고있는 커맨드에 대한 설명
다음글에서
인터페이스 상속받아서 구현해야하는
StartupModule 과
ShutdownModule를
이제 내가 원하는 대로 코딩해보자