일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 알고리즘 문제
- 정보처리기사 실기
- 정보 은닉
- UML 다이어그램
- 단계적 분해
- 요구사항 분석
- UML
- 언리얼엔진5
- 기능 모델링
- 클라이언트 서버 패턴
- 브로커 패턴
- 팬아웃
- DBMS
- 데이터 입출력
- 백준
- baekjoon
- 정보처리기사
- 파이프 필터 패턴
- 동적 모델링
- Unreal Engint4
- 요구사항 확인
- 언리얼엔진 함수
- 데이터베이스
- 아키텍처 패턴
- 정처기
- C++
- 마스터 슬레이브 패턴
- UnrealEngine5
- UnrealEngine
- 메타 데이터
- Today
- Total
게임 개발자를 향해
언리얼 기초 지식과 C++ 파일 생성하는 법 본문
1. C++와 Blueprint
언리얼엔진에서 게임기능을 만드는 방법은 C++ 언어와 "Blueprint"가 있다. Blueprint는 코드가 눈으로 보고 이해하기 편한 노드의 연결 구조로 시각화되어있어 비전공자들도 좀 더 쉽게 접할 수 있다.
언리얼엔진에 편리한 함수들이 매우 많이 있어서 블루프린트만을 사용하여 게임 제작이 가능하다. 하지만 게임 개발중 게임마다 필요한 세부적인 처리를 할 수 없기 때문에 서로 병합하여 쓰는것이 더 효율이 좋다. 그래서 보통 개발자가 C++로 게임기능(함수)을 만들어주면 그것을 디자이너가 Blueprint로 게임 기능들을 조합하는 식으로 게임을 개발한다고 한다.
2. C++ 파일 생성
- 부모클래스
먼저 언리얼에서 C++파일을 생성할때 부모 클래스를 정해주어야 한다. 이는 언리얼에서 개발하기 편하게 기본적으로 만들어둔 기능을이 포함되어 있어 함수를 만들 때 도움을 주기 때문이다. 하여 만들어야하는 목적에 따라 부모클래스를 선택해주면 된다. 필자는 Actor를 부모클래스로 선택하고 만들겠다.
- C++ 파일 구조
C++을 공부하면 알겠지만 C++ 파일은 헤더파일과 cpp파일 두 가지가 생성된다.
1) 헤더파일(.h)
헤더파일(.h)은 C++파일에 선언된 클래스의 변수와 함수의 원형을 선언하는 곳이다. 이곳은 기능을 구현하는 공간이 아니고 함수의 원형만 선언하는 곳이다.
2) cpp파일(.cpp)
선언된 생성자 함수나 함수의 기능을 실제 구현하는 파일이다.
C++을 배울때 cpp 파일에 한번에 구현해도 되지만 MFC(윈도우 프로그래밍)를 배울 때도 파일이 이런 형태였다. C++로 혹은 객체지향적 언어를 사용하여 개발할 때는 효율 상 위 처럼 구현하는것이 일반적인 것 같다.
- Actor를 부모클래스로 선택한 C++ 파일 기본 함수
헤더파일의 정의를 보면 기본적으로 아래와 같이 생성되어있다. 함수 하나하나의 의미를 파악해보겠다.
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"
UCLASS()
class MYPROJECT1_API AMyActor : public AActor
{
GENERATED_BODY()
public:
AMyActor();
protected:
virtual void BeginPlay() override;
public:
virtual void Tick(float DeltaTime) override;
};
1) AMyActor()
AMyActor 클래스의 객체가 생성될 때 한번 호출되는 생성자 함수이며 주로 생성된 Actor의 property 즉 변수의 기본값을 설정해주는 데에 주로 사용된다.
2) BeginPlay()
BeginPlay() 함수는 해당 Actor가 배치된 레벨에서 게임이 시작되거나 Actor가 월드에 스폰되었을 때 한번 호출되는 함수로 게임 로직을 초기화 시키는데 사용된다.
3) Tick(float DeltaTime)
Tick() 함수는 게임의 매 프레임마다 호출되는 함수이다. 매개변수로 DeltaTime을 받고있는데 이는 Tick()함수가 호출된 이후로 얼마의 시간이 경과한 뒤에 다시 Tick() 함수가 호출되었는지의 시간을 전달받을 수 있다. 이 함수는 Actor가 활성화되어있는 동안 계속 활성화 되어있기 때문에 주로 게임의 로직을 처리하는 데에 사용된다. 이 함수는 매 프레임마다 호출되나보니까 게임 속도에 영향을 줄 수 있다. 그러므로 Tick함수가 필요하지 않다면 지워서 게임의 퍼포먼스를 상향시킬 수도 있다. 제거하는 방법은 아래와 같다.
4) Tick() 함수 제거 방법
1. 헤더에 선언된 Tick() 함수와 cpp에 구현된 Tick() 함수의 기능을 주석처리한다.
2. 아래와 같이 생성자 함수에 선언된 "PrimaryActorTick.bCanEverTick = true;" 를 주석처리해주면 된다.
AMyActor::AMyActor()
{
//PrimaryActorTick.bCanEverTick = true; <- 이거 주석처리
}
이 코드는 이 함수기 매 프레임마다 Tick() 함수를 매프레임 호출해주는 코드이다.
이렇게 C++ 클래스는 위와 같이 클래스의 함수가 선언이 된다. 언리얼 C++로 개발하는 방법을 배우기 위해 앞으로 올리는 글은 "베르의 게임개발 유튜브"를 참고할 생각이다.
포트폴리오 및 공부용으로 블로그 개설했습니다!!
궁금한게 있으시면 댓글 남겨주세요!!

<참고자료>
- 베르의 게임개발 유튜브 영상
'언리얼 엔진 > C++' 카테고리의 다른 글
[ UE5 ] 언리얼 엔진 문자열 (0) | 2023.12.17 |
---|---|
[ UE5 ] 언리얼 C++ 코딩 표준 (1) | 2023.12.17 |
[ UE5 ] Class 생성 및 Log 띄워보기 (1) | 2023.12.17 |
함수와 UFUNCTION() 메크로 (1) | 2022.08.24 |
변수와 UPROPERTY() 메크로 (0) | 2022.08.24 |