Unreal C++/Custom BP Nodes2017. 11. 21. 21:20

언리얼 엔진에서 C++을 이용하여 블루프린트에서 사용할 함수노드 만들기


원문참조 : https://wiki.unrealengine.com/Blueprints,_Creating_C%2B%2B_Functions_as_new_Blueprint_Nodes


언리얼 엔진에서는 블루프린트에서 함수노드로 사용할 수 있도록 C++ 클래스가 준비되어 있다. Blueprint Function Library 클래스의 파생 클래스에 static 함수를 선언하면 다른 블루프린트 그래프에서 해당 함수를 바로 검색하여 노드를 추가할 수 있게 된다


블루프린트 프로젝트를 생성한다


Content Browser에서 마우스 우측 > 새 C++ 클래스 > 부모클래스 선택 : [모든 클래스]에 체크 > Blueprint Function Library 검색하여 선택 > 저장경로를 지정하거나 디폴트로 두고 진행하면 Visual Studio가 실행되면서 에디터에 헤더파일(*.h)과 소스파일(*.cpp)이 생성된다.


생성된 파일의 내용에 아래처럼 적색으로 표시한 내용을 추가하고 저장한 후에 다시 언리얼 메인 에디터의 툴바에서 [컴파일]을 누르고 컴파일이 완료되었다는 메시지가 나타나면 다른 블루프린트에서 이 함수를 호출할 수 있다. 만약 문법적인 오류가 있다면 컴파일 실패 메시지가 뜬다. Visual Studio에서는 컴파일이나 빌드를 실행할 필요가 없다. Visual Studio에서는 코드에 오류가 없는데도 불구하고 오류가 있는 것처럼 코드에 적색라인으로  표시되는 경우가 있는데 이 때는 신경쓰지 않고 저장 후에 언리얼 툴바에서 [컴파일] 버튼을 눌러 컴파일해보면 오류 여부를 알 수 있다. 언리얼 툴바에서 컴파일 후에는 다른 블루프린트 그래프에서 라이브러리 함수를 노드로 추가하여 사용할 수가 있다


헤더파일의 내용

#include "CoreMinimal.h"

#include "Kismet/BlueprintFunctionLibrary.h"

#include "MyBlueprintFunctionLibrary.generated.h"


UCLASS()

class BP_CPP_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary

{

GENERATED_BODY()


UFUNCTION(BlueprintCallable,Category="TestFunction")

static FString MySampleFunction(FString str);

};



소스파일의 내용

// Fill out your copyright notice in the Description page of Project Settings.


#include "MyBlueprintFunctionLibrary.h"


FString UMyBlueprintFunctionLibrary::MySampleFunction(FString str)

{

return str;

}



언리얼 메인 에디터에서 C++코드를 컴파일한다




다른 블루프린트의 그래프에서 라이브러리 함수를 호출(함수 노드 추가)한다


Posted by cwisky

언리얼 엔진에서 커스텀 구조체 선언, 초기화, 사용의 예


원문참조 : https://docs.unrealengine.com/latest/INT/Engine/Blueprints/UserGuide/Variables/Structs/


구조체 생성 및 정의

Content Browser 안에서 마우스 우측 > 블루프린트 > 구조체

이름을 BP_PlayerStruct 등으로 적당히 입력한다




구조체 멤버변수 선언(필요한 만큼 변수를 선언하고 자료형을 선택하고 [저장]을 누른다)




구조체 변수 선언(임의의 블루프린트 이벤트 그래프에서 다음과 같이 구조체 변수를 선언한다)



구조체 멤버변수 초기화 및 사용(블루프린트 그래프에서 아래처럼 구조체 멤버변수를 초기화하고 사용한다)



구조체 특정 멈버변수만 선택적으로 설정하기 ( Set Members in Struct 노드를 추가하고 선택한 후 [디테일] 뷰에서 초기화할 변수를 선택하고 노드에서 값을 입력하면 된다)


구조체가 아닌 Object 를 기반으로 한 클래스 블루프린트를 생성하여 위와 같은 일을 할 수도 있다. 이런 경우에는 구조체보다 더 많은 메모리를 차지할 것이므로 많은 오브젝트를 사용해야 하는 경우라면 먼저 구조체의 사용을 고려해야 할 것이다


아래는 Object를 기반으로 클래스 블루프린트를 생성하고  사용하는 예이다



위와 같이 생성된 블루프린트의 이름을 BP_PlayerInfo 라고 선언 했다면 아래와 같이 다른 블루프린트에서 BP_PlayerInfo 형의 변수를 선언하고 사용할 수 있다.



Posted by cwisky
Packaging2017. 11. 19. 13:13

원문참조 https://docs.unrealengine.com/latest/INT/Engine/Basics/Projects/Packaging/


Edit > Project Settings > 프로젝트 / 패키징 / 프로젝트 / Build Cinfiguration 항목에서 DevelopmentShipping 선택

 - Development : 커맨드라인에서 실행할 수 있다


Edit > Project Settings > Maps & Modes

 - Editor StartupMap : 해당 프로젝트를 에디터로 열때 보여줄 맵의 이름 지정

 - Game Default Map : 게임이 시작될 때 사용될 첫번째 맵의 이름을 지정


File > Package Project > [PlatformName]

 - 패키징하여 저장할 디렉토리를 선택한다

 - 패키징 진행 윈도우의 [출력로그표시] 링크를 누르면 패키징 상태를 확인할 수 있다

 - 패키징이 완료되면 해당 디렉토리에 실행파일이 생성된다


작은 패키징 안내 화면에서 [출력로그표시]를 누르면 아래와 같이 패키징 상황을 확인할 수 있는 화면을 볼 수 있다



패키징 후에 게임 실행하기

네트워크 게임이 아니라면 실행파일을 실행하면 된다

네트워크 게임이며 Listen Server로 실행하려면 먼저 서버를 실행한 후에 접속할 클라이언트를 실행하면 된다


Listen Server 실행

 - 커맨드라인 실행명령 형식 : 실행파일명 맵이름?listen -game

 - 커맨드라인 실행명령의 예 : MyGame.exe MyMap?listen -game


Listen Server에 접속할 Client 실행

 - 커맨드라인 실행명령 형식 : 실행파일명 리슨서버IP주소 -game

 - 커맨드라인 실행명령의 예 : MyGame.exe 127.0.0.1 -game


Posted by cwisky