Unreal - C++

뭉크의 개발·2024년 1월 31일
0

Unreal

목록 보기
5/10

C++

.h(Header File)

  • 헤더 파일은 함수, 클래스, 변수 등의 선언을 포함한다.
  • 소스 코드 파일들이 참조할 수 있도록 인터페이스를 제공한다. 어떤 한수나 클래스가 존재하는지, 인터페이스가 어떻게 생겼는지 정의한다.
  • .cpp 파일에서 #include 지시어를 사용하여 포함한다. 코드의 재사용성과 모듈화를 제공한다.

.cpp(C++ Source File)

  • 프로그램의 실제 구현을 포함한다.
  • 함수의 정의, 알고리즘, 변수의 초기화와 같은 실행 가능한 코드가 포함된다.
  • 컴파일러에 의해 컴파일되어 실행 가능한 프로그램이나 라이브러리로 변환된다.

UPROPERTY

  • 언리얼에서 사용되는 매크로다. C++ 클래스의 멤버 변수에 대한 메타데이터를 설정하는데 사용된다.
  1. 변수가 에디터에서 보이고 편집될 수 있게 설정할 수 있다.
  2. Serialization : 변수가 게임의 세이브 파일이나 네트워크를 통해 전송될 때 시리얼라이즈 되어야하는지 설정할 수 있다.
  3. 에디터에서 새로운 인스턴스를 생성할 때 변수의 기본값을 설정할 수 있다.
UCLASS()
class MYGAME_API AMyACtor : public AActor
{
	GENERATED_BODY()
    
public :
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Damage")
    int32 Health;
};


  • C++에서 선언하니, 언리얼에서도 확인할 수 있다. [SerializeField] 같다.

A? U? F? 접두어

  • 언리얼에서 클래스의 유형을 나타낼 때 사용하는 네이밍 컨벤션이다.

A

  • A는 Actor 클래스를 나타낸다. Actor는 게임 월드에서 배치할 수 있는 모든 오브젝트의 기본 클래스다.
    렌더링, 물리 시뮬레이션, 충돌 처리, 이벤트 반응 등 기능을 포함할 수 있으며,
    예를 들어, AActor는 기본 Actor 클래스이고, AMyActor는 사용자가 정의한 Actor 클래스의 예시다.

U

  • 유틸리티 클래스를 나타내며, 주로 비액터 클래스를 의미하며, 게임 플레이 요소 외의 기능을 제공한다. 언리얼의 가장 기본적인 객체 유형이고, 가비지 컬렉션, 시리얼라이제이션, 클래스 정보 조회 등 기능을 제공한다.

F

  • F는 구조체를 의미한다. FVector, FRotation, RLoaction

E

  • 열거형을 의미한다.(Enumeration) 명명된 상수의 집합을 정의한다.

T

  • 템플릿 클래스로, 일반적으로 데이터 형식을 다룰 때 사용된다. TArray, TMap

S

  • UI 요소로, 언리얼 엔진의 Slate UI 프레임워크에서 사용된다. SButton, STextBlock

I

  • 인터페이스 클래스다. 다른 클래스가 구현할 수 있는 인터페이스를 정의한다. IInteractable, IMovable

어떻게 이해했어?

  • 유니티의 Monobehaviour를 사용하지 않으면, 유니티의 기능을 이용할 수 없는 것 처럼 A와 U를 붙이지 않으면, 언리엃의 핵심 기능을 활용할 수 없는 것 같다. 물론 다른 형태의 기능들이다.

라이브 코딩

  • 라이브 코딩은 게임이나 애플리케이션을 실행한 상태에서 C++ 코드를 수정하고, 변경사항을 빠르게 컴파일해서 엔진에 즉시 반영하는 기능이다.
  1. 코드를 수정하고, 컴파일을 수행하지 않고 작업 사항을 변경할 수 있다.
  2. 게임이나 애플리케이션을 재시작하지 않고 코드를 변경할 수 있기 때문에 현재 게임 상태나 에디터의 상태를 유지할 수 있다.
  3. 그러나 라이브 코딩을 이용하면 에디터의 변경 사항에만 영향을 미치고, 디스크에는 반영되지 않는다. 라이브 코딩에서 빌드하지 말고, 에디터를 닫고, 다시 편집기에서 ObstacleAssalutEditor Win64 Development Build를 이용해 컴파일한다. 라이브 코딩과 관련된 문제는 거의 이렇게 해결하면 된다.

Hot Reload

  • Edit - Edit Preferences - General - Live Coding 에서 비활성화 할 수 있다.
    이후 에디터를 다시 시작하고, ReCompile을 이용하면 변경사항을 저장할 수 있다.

형변환

확장 변환

  • C++에서는 암시적 형 변환, 자동 형 변환을 제공한다. 모든 경우는 아니고, 작은 데이터 타입에서 큰 데이터 타입으로 변환할 경우 자동으로 이루어 진다. 확장 변환(Widening Conversion)이라고 보통 얘기한다.
int32 InputA = 5;
float InputB = 3.5;
float FloatAPlusB = InputA + InputB;
  • 자동 형 변환은 데이터 손실이 없고, 정확도를 유지한다. 그러나 혹시 모르는 일이 생길 수 있으니 데이터 타입의 변환을 명확하게 지정해서 예측 가능성을 높이는게 좋다.

축소 변환

  • 그러나 큰 데이터 타입에서 작은 데이터 타입으로 변환하면 데이터 손실이 일어날 수 있다. 이런 경우에는 명시적 형 변환 즉, 축소 변환이 필요하다.
float InputC = 3.5;
int32 IntC = static_cast<int>(InputC); // 명시적 형 변환

static_cast를 사용하여 명시적 형 변환을 수행했다. 소수정 이하의 값은 잘려나가고, IntC는 3이 된다.

.오퍼레이터(Dot Operator)

  • 구조체나 클래스에서 무언가를 가져올 수 있다.

0개의 댓글