티스토리 뷰
개요
c++을 사용해서 언리얼 엔진을 작업하기 위해서 언리얼 엔진이 정의하는 메크로 및 코딩 방식을 익혀야 한다.
기본적으로 생성되는 코드를 하나씩 보면서 어떤 의미인지 알아보고 넘어갈 필요가 있을 것 같다.
Actor 생성
가장 기본 클래스라고 할 수 있는 Actor클래스를 생성하면, 기본 코드가 어느정도 작성되어 있는 것을 볼 수 있다. 앞에 A가 붙는 이유는 언리얼 코드 작성 규약에 의해 Actor클래스를 상속받는 클래스는 A를 접두어로 붙히기 때문이다.
먼저 헤더를 보자.
include들
CoreMinimal.h
기본적인 기능을 사용하기 위한 헤더 파일들을 추가한다. 실제로 저 헤더를 열어보면 수십개의 헤더를 include하는 코드를 볼 수 있다.
GameFramework/Actor.h
Actor클래스를 생성했기 때문에 Actor를 상속받기 위해 include.
MyActor.generated.h
이 부분이 좀 특이한데, 언리얼 에디터에서 소스코드가 컴파일 되기 이전에 소스코드를 분석해서 에디터에 표시할 수 있도록 하기 위한 정보들이 저장된다.
리플랙션(reflection)이라고 하는 이 기능 프로그램이 실행될 때 자신의 코드를 분석하는 기능으로, Java의 그것과 같은 것이다.
언리얼 엔진의 리플렉션(reflection) 우리는 MyActor라는 클래스를 만들었지만 언리얼 에디터(이것도 하나의 프로그램이다.)는 이 클래스의 내부 구조를 알 수 없다. 너무나 당연하게도 언리얼 에디터를 만들 때는 MyActor클래스가 없었기 때문이다. 그럼에도 불구하고 우리가 마음대로 변경한 MyActor 클래스를 에디터에 추가할 수 있고, 맴버 함수를 호출하거나 맴버 변수의 값을 변경시킬 수 있는 것은, reflection을 통해 MyActor 클래스의 구조를 실행 단계에서 알 있기 때문이다. reflection은 c++ 언어에서 지원하지 않는 기능이라서 언리얼 엔진이 메크로로 정의해서 사용하고 있다. 앞으로 등장할 UCLASS(), UPROPERTY() 등은 대부분 이 기능을 위한 메크로이다. |
UCLASS()
UHT(Unreal Header Tool)이라는 툴이 코드가 컴파일 되기 전에 코드를 돌아보면서 UCLASS()메크로 다음 줄에 오는 것은 클래스라고 판단한다.
괄호 안에 매개변수들을 넣을 수 있지만 어떤 매개변수를 넣어서 응용할 수 있는지는 더 공부해봐야 알 것 같다.
GENERATED_BODY()
클래스의 몸체를 정의하는 메크로. 언리얼 도큐먼트에 따르면 반드시 클래스 정의 첫번째 줄에 위치해야 한다고 한다. 정확히 어떤 기능을 하는지는 모르겠다.
생성자
생성자다.
virtual void BeginPlay() override;
Spawn 될 때 호출되는 함수라고 한다. 생성자와 혼동하지 말자.
virtual void Tick(float DeltaTime) override;
매 프레임 호출되는 함수.
다음은 cpp인데 함수 머리만 작성되어 있어서 크게 볼 건 없다. 한가지 볼 것은 생성자에 작성된 한 줄이다.
PrimaryActorTick.bCanEverTick = true;
Tick 플래그를 true로 설정해서 이 클래스에서 Tick함수를 사용하겠다고 하는 코드이다. 이 코드가 없으면 위에 정의된 Tick함수가 있어도 호출되지 않는다.
그 외 Super::함수이름();
부모 클래스에 정의되어있는 로직도 실행시키고 내 로직도 실행시키기 위해서 부모 클래스의 같은 이름의 함수를 호출하는 것이다.
마치며
별로 중요하게 생각하지 않았던 부분인데, 공부하면서 리플렉션 이라는 기능도 알게 되었고, 덕분에 메크로를 더 잘 사용하게 될 것 같다.
'Programming > UnrealEngine' 카테고리의 다른 글
시작 프로젝트 파헤치기 - 퍼즐(1) (0) | 2018.04.23 |
---|---|
언리얼 엔진(Unreal Engine) 튜토리얼 - 인스턴스 생성하기 (3) | 2017.10.29 |
언리얼 엔진(Unreal Engine) 튜토리얼 - 디버깅 (0) | 2017.10.28 |
언리얼 엔진(Unreal Engine) 튜토리얼 - Actor Component로 공전하는 Sphere 만들기 (0) | 2017.10.05 |
언리얼 엔진(Unreal Engine) 튜토리얼 - 키 입력 처리하기 1(Axis) (0) | 2017.09.24 |
- Total
- Today
- Yesterday
- Java
- scala
- 데이터베이스
- SHADER
- JSP
- 자료구조
- SOCKET
- 운영체제
- 수학
- mongoDB
- Cocos2d-x
- SwiftUI
- 알고리즘
- C/C++
- database
- 드라마
- Git
- C
- game
- C++
- swift
- rxswift
- machine learing
- ue4
- DesignPattern
- winsock
- Spring
- 국내여행
- OS
- ios
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |