언리얼 엔진 본캠프 4주차-2 UE5와 C++

정재훈·2025년 1월 7일
0

unreal engine

목록 보기
12/45

언리얼 엔진에서 C++ 스크립팅을 하기 위한 첫 걸음으로 액터 클래스를 하나 만들고 VS2022를 열어 UE_LOG를 사용해 "hello world"를 출력했다

조금 멈칫했던게 거의 C++ 문법과 같을거라 생각했는데 클래스 앞에 접두사가 있고 보라색으로 표시된 다양한 매크로들, 솔루션 탐색기에는 뭔지 모를 파일들을 보니 뭔가 당황스러웠고 내가 아는 게 맞나라는 생각이 들었다

그래서 처음엔 한 번 훑어보고 다음에 내가 모르는 부분은 생각하지말자 라고 한 다음 모르는 부분을 빼고 보니 그냥 일반적인 클래스였다. 모르는 부분에 대해서는 하나씩 알아갈 것이다

간단한 자표 이동 프로그램을 만들었는데 프로그램을 만들면서 본 새로운 것들, 알고 있으면 좋은 것들을 정리했보았다

-- AMoveActor.h --
class HELLO_API AMoveActor : public AActor
{
	GENERATED_BODY()
	
public:
	AMoveActor();

protected:
	virtual void BeginPlay() override;

public:
	virtual void Tick(float DeltaTime) override;

	float distance(FVector2D prev, FVector2D curr);

	void move();

	int step();

	int createEvent();

public:
	FVector2D start;
	int evCnt;
	float totalDist;
};

UE_LOG(LogTemp, Warning, TEXT("Hello World"))

  • 카테고리 : LogTemp, 출력 로그의 필터에 보면 엄청 다양함
  • 심각성 : Log, Display, Warning, Error, Fatal (오른쪽으로 갈수록 중요도↑)
  • 출력 내용 : TEXT("..")

FMath

좌료를 랜덤하게 이동시키는 와중에 확률적으로 이벤트를 발생시키도록 구현을 했는데 이 때 C++의 cmath 헤더와 비슷하게 생긴 FMath를 보고 유용하게 쓰이겠다하고 몇가지 찾아봤다

float FMath::Clamp(const float Value, const float Min, const float Max)

  • Value의 값을 Min과 Max 사이로 제한
  • Min~Max의 범위를 벗어나면 가까운 경계값(Min or Max)으로 반환

int32 FMath::RandRange(int32 A, int32 B)

  • A ~ B 사이의 랜덤한 값 반환(A, B 포함)

float FMath::Sqrt(float f)

  • f의 제곱근 반환

float FMath::Pow(float Base, float Expo)

  • Base를 Expo만큼 거듭제곱한 값 반환

C++Unreal Engine 5
stringTString
arrayTArray

TArray

  • Add() (또는 Push)는 엘리먼트 유형의 인스턴스를 배열에 복사(또는 이동)

  • Emplace() 는 지정한 인수를 사용하여 엘리먼트 유형의 인스턴스를 새로 생성

    • 즉 TArray<FString> 의 경우, Add 는 스트링 리터럴("string literal")에서 임시 FString 을 생성한 다음, 그 임시 내용물을 컨테이너 안의 새로운 FString 으로 이동한다. 반면 Emplace 는 스트링 리터럴을 사용해서 FString 을 직접 만든다. 최종 결과는 같지만, Emplace 는 임시 변수 생성을 하지 않음.

    • 일반적으로 Emplace 가 Add 보다 좋은 점은, 호출되는 곳에 임시 생성 후 컨테이너에 복사 내지 이동하는 불필요한 절차를 피할 수 있다는 점. 일반적인으로는, 사소한 유형에는 Add 를, 그 외에는 Emplace 를 사용. Emplace 가 Add 보다 효율이 떨어질 일은 절대 없지만, 가독성은 Add 가 나을 수도 있다.

  • Contains(value) : 배열에 value가 존재하는지 확인하는 함수

  • Sort() : 배열을 오름차순 정렬

  • Num() : 배열의 엘리먼트 개수를 반환


  • GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, FString::Printf(TEXT("Lotto Numbers : %s"), *lottoNumStr));
    • 뷰포트에 텍스트 출력

FVector2D

FVector2D는 float형의 X좌표와 Y좌표를 가지고 있어, 이 값을 로그로 출력할 때 %f 형식 문자를 사용해야하는데 %d를 써서 컴파일이 안돼 언리얼에 적용을 못하기도 하였다

그리고 두 위치(점) 사이의 거리를 구할 때 피타고라스점) 사이의 거리를 구할 때 피타고라스 정리를 하드코딩하지 않고도 FVector2D::Size()라는 함수로 현재 위치와 이전 위치의 거리를 구할 수 있다






참조 사이트
1. https://dev.epicgames.com/documentation/en-us/unreal-engine/array-containers-in-unreal-engine
2. https://rhksgml78.tistory.com/665

profile
드가자

0개의 댓글