안녕하세요! 여러분들과 함께 게임 개발을 공부하는 베르입니다.

이번 영상에서는 언리얼 엔진의 뷰포트에 바로 로그를 띄우는 방법을 알아봅시다.

 

사용 엔진 버전 : 4.26

 

타임라인

0:00 인트로

0:35 블루프린트에서 뷰포트에 로그 출력하기

2:22 C++ 클래스에 뷰포트에 로그 출력하기

3:35 블루프린트 로그 기능을 C++ 클래스에서 사용하기

4:49 아웃트로

반응형

 

언리얼 엔진에서 C++ 프로젝트에서는 한글 경로를 멀리 하시고 영어나 쓰시는게 옳습니다.

 

사용 엔진 버전 : 4.26

 

타임라인

0:00 인트로

0:19 프로그래밍에서는 한글 경로를 멀리 하십시오 휴먼

1:36 아웃트로

반응형

 

4.26 버전이 업데이트 되면서 안보이는 새 C++ 클래스 생성 기능을 찾아봅시다!

 

사용 엔진 버전 : 4.26

 

타임라인

0:00 인트로

0:24 4.25 버전 이전의 C++ 클래스 생성

0:37 4.26 버전 이후의 C++ 클래스 생성

2:02 아웃트로

반응형

 

언리얼 프로그래밍 튜토리얼! 제대로 따라해봅시다!

 

사용 언리얼 버전 : 4.25

 

타임라인

0:00 개요

0:37 새 프로젝트 생성

0:55 FloatingActor C++ 클래스 생성

1:18 FloatingActor 기능 구현

4:07 FloatingActor 기능 테스트

5:23 직접 해보기

5:58 직접 해보기 1 : 파티클 추가

7:01 직접 해보기 2 : 속도 조절용 프로퍼티 만들기

7:58 직접 해보기 3 : 다른 축 움직임 추가하기

9:04 마무리

반응형
  1. yodo 2021.06.24 02:45 신고

    블로그도 잘 보고 있슴당

 

언리얼 C++ 클래스에서 함수를 만드는 방법과 UFUNCTION 매크로에 대해서 알아봅시다.

 

타임라인

0:00 개요

0:10 함수란?

2:18 새 프로젝트 생성

2:26 C++ 클래스 생성과 프로퍼티 선언

3:17 C++ 함수 만들기

7:19 C++ 함수 블루프린트에서 호출하기

10:16 블루프린트에서 구현한 기능을 C++에서 호출하기 1

11:58 블루프린트에서 구현한 기능을 C++에서 호출하기 2

13:55 블루프린트에서 구현한 기능을 C++에서 호출하기 3

14:53 마무리

반응형

 

언리얼 C++ 클래스에서 변수를 만드는 방법과 UPROPERTY 매크로에 대해서 알아봅시다.

 

타임라인

0:00 개요

0:50 새 프로젝트 생성/C++ 클래스 생성

1:21 기본 변수 선언 방법

2:18 언리얼 프로그래밍의 기본 변수 타입

7:40 접근지정자를 이용한 변수 공개 범위 설정

9:10 UPROPERTY를 이용해서 변수를 언리얼 에디터 디테일 패널에 공개하기

12:27 생성자에서 변수의 기본 값 설정하기

반응형

 

언리얼 엔진 4 프로그래밍에 입문해봅시다! 그리고 언리얼 C++ 클래스를 생성하는 방법과 클래스를 처음 생성했을 때 볼 수 있는 생성자와 BeginPlay, Tick과 같은 이벤트 함수에 대해서 알아봅시다.

 

타임라인

0:00 개요

0:09 언리얼 엔진 4 강좌를 만드는 이유

1:59 C++ 클래스와 블루프린트 클래스

3:03 새 프로젝트 만들기

4:02 C++ 클래스 생성하기

4:46 새로 생성한 C++ 클래스의 기본 형태

6:59 언리얼 C++ 클래스의 생성자, BeginPlay, Tick의 실행 테스트

8:40 마무리

반응형

C++ 코드 생성자에서 콘텐츠 브라우저의 클래스와 리소스 불러오기

 

작성 기준 버전 :: 4.21.1

 

게임을 제작하는 과정에서 객체를 초기화할 때, 프로젝트에 포함된 다른 클래스나 오브젝트, 리소스를 가져와야하는 경우가 종종 생긴다.

 

 

그런 경우 블루프린트의 이벤트 그래프에서 작업하는 경우라면 위의 이미지와 같이 콘텐츠 브라우저에 있는 리소스나 블루프린트 클래스 등을 곧바로 선택할 수 있지만, C++ 코드에서는 직접 경로를 지정해서 코드를 작성해야 한다.

 

단, C++ 코드에서 직접 경로를 지정해서 리소스나 블루프린트 클래스를 가져올 때, 주의할 점은 리소스나 블루프린트 클래스의 경로나 파일명이 자주 바뀌는 상황을 피하는 게 좋다. 경로를 지정한 이후에 경로가 바뀌지 않을 것이 확실하다면 C++ 코드로 경로를 지정해서 가져오는게 낫겠지만 자주 바뀌는 상황이라면 바뀐 리소스를 불러오는 모든 코드를 일일이 찾아서 수정하고 컴파일하는 문제가 발생한다.

 

그렇기 때문에, 경로나 리소스의 파일명이 자주 바뀔 상황이라면 위의 이미지처럼 블루프린트를 이용해서 초기화를 진행하거나, 별도의 기능을 만들어서 일일이 경로를 지정하고 바꾸는 작업을 자동화시키는 것이 좋다.

 

우선 C++ 코드에서 콘텐츠 브라우저의 리소스나 블루프린트 클래스를 가져오기 위해서는 다음의 헤더를 전처리기로 포함시켜주어야 한다.

 

#include "UObject/ConstructorHelpers.h"

 

ConstructorHelpers는 생성자에 도움을 주는 클래스로 생성자에서 콘텐츠 브라우저의 리소스나 블루프린트 클래스를 불러오는 작업을 도와주는 기능들을 가지고 있다. ConstructorHelpers는 생성자에서 사용되는 기능이기 때문에 생성자 이외의 장소에서 ConstructorHelpers를 사용하려고 시도하면 컴파일 에러가 발생하게 된다.

 

 

C++ 코드에서 블루프린트 클래스 가져오기

 

콘텐츠 브라우저 패널에 Blueprints 폴더 안에 TestBlueprintClass라는 이름의 APawn 클래스를 상속받은 블루프린트 클래스가 있다고 가정할 때, 그것을 C++ 코드에 가져오기 위해서는 다음 예시와 같이 코드를 작성하면 된다.

 

static ConstructorHelpers::FClassFinder<APawn> BPClass(TEXT("/Game/Blueprints/TestBlueprintClass"));
if (BPClass.Succeeded() && BPClass.Class != NULL)
{
    // 가져온 BPClass.Class를 통한 작업
}

 

FString 경로를 통해서 불러오는 것이니 만큼, 오타나 변경된 경로나 파일명으로 인해서, 클래스가 제대로 불러와지지 않는 경우가 발생할 수 있기 때문에, Succeeded() 함수와 Class의 NULL 체크를 통해서 성공적으로 클래스가 불러와졌는지 체크하고 사용해야 한다.

 

클래스 탐색자(Class Finder)는 성공적으로 블루프린트 클래스를 가져온 경우, Class 멤버 변수 안에 TSubclassOf<T> 타입으로 해당 클래스를 가지고 있게 된다. 이것을 이용해서 필요한 작업을 진행하면 된다.

 

 

C++ 코드에서 리소스 가져오기

 

이번에 알아볼 것은 C++ 코드에서 콘텐츠 브라우저 패널의 리소스를 가져오는 과정이다. 리소스의 종류는 여러가지가 될 수 있는데 대표적인 것으로는 스태틱 메시나 텍스처를 예로 들 수 있다.

 

아래의 예시코드는 드롭된 아이템의 메시가 아이템의 종류에 따라서 달라진다는 가정하에 만들어졌다. 콘텐츠 브라우저의 Item/StaticMesh 폴더 안에 SM_Helmet 이라는 이름을 가진 헬멧 모양의 스태틱 메시가 있을 때, FObjectFinder를 통해서 가져올 수 있다.

 

DropItemStaticMeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("DropItemMesh"));
RootComponent = DropItemStaticMeshComponent;

 

static ConstructorHelpers::FObjectFinder<UStaticMesh> HelmetStaticMesh(TEXT("/Game/Item/StaticMesh/SM_Helmet"));
if (HelmetStaticMesh.Succeeded() && HelmetStaticMesh.Object != nullptr)
{
    DropItemStaticMeshComponent->SetStaticMesh(HelmetStaticMesh.Object);
}

 

FObjectFinder를 통해서 가져온 오브젝트 역시 Succeeded() 함수와 Object 변수의 null 체크를 통해서 리소스가 제대로 불러와졌는지 체크를 한 뒤 사용해야 한다.

 

 

 

 

C++ 코드에서 C++ 클래스 가져오기

 

C++ 코드에서 블루프린트 클래스가 아닌 직접 작성한 C++ 클래스를 가져와서 사용하고 싶을 수도 있다. 예를 들어 게임 모드 클래스에서 기본 폰이나 기본 플레이어 컨트롤러를 설정하려고 할 때, C++로 작성한 폰 클래스나 플레이어 컨트롤러 클래스를 기반으로 블루프린트 클래스를 생성해서 넣어주는게 아니라 C++ 클래스를 곧바로 코드에서 넣어주고자 한다면 다음 예시 코드와 같이 작성하면 된다.

 

AYourProjectGameMode::AYourProjectGameMode()
{
    PlayerControllerClass = AYourCustomPlayerController::StaticClass();
}

 

StaticClass() 함수를 이용하면 런타임 중에 해당 클래스를 나타내는 UClass를 얻어낼 수 있다.

반응형

+ Recent posts