컴파일러와 에디터

Jihyun·2023년 12월 6일
0

Unreal

목록 보기
2/11

C++로 클래스 생성

용어 정리

  • 소스 코드 : 사람이 읽을 수 있는 코드
  • 바이너리 코드 : 기계가 읽을 수 있는 코드(0과 1로 구성)
  • 컴파일러 : 소스 코드를 바이너리 코드로 변경해주는 역할
  • 생성자(Constructor) : 새로운 구조체나 클래스를 생성
  • 연산자(Operator) : 어떠한 기능을 수행하는 상징(ex. +,-,=,*,/ ..)
  • 점 연산자(Dot Operator) : 구조체나 클래스에서 무언가를 가져오는 연산자
  • 프레임 : 영상을 구성하는 그림 중 하나
  • Frame rate(FPS) : 초당 프레임 수, Frame per second
  • Tick : 매 프레임마다 호출
  • 스코프(Scope) : 변수가 유지되는 기간
  • 의사 코드(Pseudocode) : 컴퓨터 프로그램이나 알고리즘이 수행해야할 내용을 우리가 사용하는 언어로 간략히 서술해 놓은 것
  • 주석(Comments) : 컴파일러에서 무시되는 코드

소스 코드 편집기 변경

[Edit]-[Editor Preferences]-[Source Code]에서 소스 코드 편집기 변경 가능
Unreal Engine5에서 Visual Studio 2022를 사용하기 위해선 C++을 사용한 게임 개발, Unreal Engine 설치 관리자가 설치되어 있어야 한다.
또한 .NET Core 3.1가 설치되어 있어야 언리얼에서 Visual Studio가 열린다.
Visual Studio Code를 사용하기 위해선 C/C++Unreal Engine 4 Snippets를 설치한다.

C++ 코드를 바이너리로 컴파일 하는 과정

  1. Unreal Header Tool이 C++ 코드를 컴파일하기 전에 헤더파일를 파싱하고 UObejct 관련 기능을 구현하는 맞춤형 코드를 생성

  2. 일반 C++ 컴파일러가 호출되어 결과를 컴파일한다.

  3. 링커가 모든 파일들을 묶어 하나의 실행 가능한 파일로 변환한다.

UHT는 언리얼이 자체 리플렉션 시스템을 구현하기 위해, 언리얼 자체 매크로를 C++ 컴파일러가 해석할 수 있게 코드를 재생성해주는 툴이다.

C++ 클래스 생성하기

  • [Tools] - [Add C++ Class] 를 클릭해 새로운 Actor 클래스를 만든다.
  • 클래스 생성 후에 언리얼엔진에서 비쥬얼 스튜디오가 열리지 않으면, 다시 [Tools]-[Refresh Visual Studio Project]를 클릭하거나, 컴퓨터 드라이브의 프로젝트 파일 내에서 생성한 프로젝트를 열어주면 된다.
  • VS 코드에서 컴파일-빌드를 할 때, 단축키 [Ctrl + Shift + B] - [Win64 Development Build] 클릭하면 된다

언리얼엔진에서 블루프린트와 C++ 소스코드를 비교할 때, 헤더파일은 함수와 변수를 추가하고 cpp 파일은 이벤트 그래프와 같다고 생각하면 쉽다.

class OBSTACLESASSULTS_API AMovingPlatform : public AActor

앞서 Actor 클래스로 만든 클래스이기 때문에 클래스명 앞에 A가 붙어있음을 알 수 있다.

UPROPERTY 변수

C++ 코드의 변수를 디테일 패널에서 확인할 수 있게 해주는 시스템

	UPROPERTY(EditAnywhere)
	int32 MyInt = 99;

	UPROPERTY(EditAnywhere)
	float Myfloat = 5.99;

	UPROPERTY(EditAnywhere)
	bool Mybool = true;

  • EditAnyWhere : 어디서든 수정 가능
  • EditInstanceOnly : 월드에 배치한 인스턴스에서만 수정 가능
  • EditDefaultsOnly : 블루프린트 설정창에서만 수정 가능
  • VisibleAnyWhere : 어디서든 보기 가능
  • VisibleInstnaceOnly : 월드에 배치한 인스턴스에서만 보기 가능
  • VisibleDefaultsOnly : 블루프린트 설정 창에서만 보기 가능

변수에 카테고리 설정

UPROPERTY 옵션 옆에 Category = ""를 작성해주면 된다

UPROPERTY(EditAnywhere, Category="Moving Platform")
	FVector PlatformVelocity = FVector(100,0,0);	

C++ 구조체

UPROPERTY(EditAnywhere)
	FVector MyVector = FVector(1,2,3);
UPROPERTY(EditAnywhere)
	float MyX = 0;

언리얼 C++코드에서 Vector 타입 변수를 사용할 때, FVector라고 쓰는데 여기서 F는 구조체라는 것을 나타낸다. 구조체 타입을 사용하기 위해선 생성자를 사용한다.

MyX = MyVector.X;

구조체에서 어떤 값을 가져오기 위해서는 .연산자(점 연산자)를 사용한다

C++ 함수 호출

블루프린트 함수를 C++로 작성하기

SetActorLocation(MyVector);

함수의 괄호 안에 인풋 목록(인수)이 들어간다.
MyVector라는 변수를 넣을 수 있고, 인수가 1개 이상이 들어갈 수도 있다.

SetActorLocation(FVector(1,2,3));

함수의 괄호 안에 생성자를 바로 넣어 값을 전달해 특정한 값으로 설정할 수도 있다.

void AMovingPlatform::BeginPlay()
{
	Super::BeginPlay();

	//MyVector의 값을 이용하여 게임이 시작되면 액터의 위치를 설정
	SetActorLocation(MyVector);
	
}

Game Loop

  1. 엔진이 사용자의 입력을 받아와 처리
  2. 게임 상태에 업데이트
  3. 게임 상태를 가져와 화면에 렌더링

플랫폼을 앞뒤로 움직이기 위한 의사코드 작성

//플랫폼의 위치를 앞뒤로 움직인다
	//Move platform forwards
		//Get current location
		//Add vector to that location
		//Set the location
	//Send platform back if gone to far
		//Check how far we've moved
		//Reverse direction of motion if gone too far
profile
잊어버려도 다시 리마인드 할 수 있도록 공부한 것을 기록합니다

0개의 댓글