이득우 교수님께서 IGC에서 발표해주신 언리얼 에디터 확장하기를 메인으로 공부 시작.

http://blog.naver.com/PostView.nhn?blogId=destiny9720&logNo=221381098226&categoryNo=21&parentCategoryNo=&from=thumbnailList

 

 

언리얼 위키

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

 

https://api.unrealengine.com/INT/API/Runtime/Slate/Framework/Commands/FUICommandInfo/__ctor/index.html

FUICommandInfo::FUICommandInfo

Creates and initializes a new instance.

api.unrealengine.com

 

위 링크는 언리얼 에디터 내에 UI정보를 담고있는 커맨드에 대한 설명

 

 

다음글에서

 

인터페이스 상속받아서 구현해야하는 

StartupModule 과 
ShutdownModule를 

 

이제 내가 원하는 대로 코딩해보자

+ Recent posts