본문 바로가기

게임 공부/Unreal Engine17

[UE4] UPROPERTY란? C++은 프로그래머가 직접 힙 메모리를 할당했을 경우, 해제까지 직접 해주어야 메모리 릭이 발생하지 않는다. 반면 언리얼 엔진에선 언리얼 실행 환경을 통해 객체가 더 이상 사용되지 않으면 할당된 메모리를 자동으로 소멸시켜주는 기능을 제공한다. 이러한 기능을 제공받기 위해서는 객체를 선언할 때 다음과 같이 UPROPERTY라는 매크로를 사용해주어야 한다. UPROPERTY() UStaticMeshComponent* Mesh; 하지만 이러한 기능을 모든 객체에 적용할 수 있는 것은 아니다. 언리얼 오브젝트라는 특별한 객체에만 사용이 가능한데, 다음과 같은 조건이 필요하다. UCLASS 매크로가 선언된 클래스 U혹은 A 접두사가 붙은 클래스 generated.h 헤더 include가 선언된 클래스 모듈명_AP.. 2021. 7. 23.
[UE4] 언리얼 C++ 프로젝트의 컴파일과 실행 과정 언리얼 엔진에서 C++ 클래스를 생성하면 C++ 프로젝트로 확장되며 VS(Visual Studio)와 연동 된다. VS에서 컴파일을 진행하게 되면 언리얼 프로젝트 폴더에 다양한 파일들이 생성된다. 초기에 만들어진 .uproject 파일은 게임 프로젝트를 언리얼 에디터로 불러 들이기 위한 정보가 텍스트로 저장되어 있다. C++ 프로젝트가 컴파일 되면 .uproject 파일에 모듈 관련 내용이 추가 된다. 언리얼에서 모듈이란 dll 파일을 말한다. dll 파일은 컴파일 시 Binaries 폴더에 UE4Editor-[ProjectName].dll 이라는 이름으로 생성된다. 언리얼 엔진이 C++ 프로젝트를 로드할 때 uproject에 적힌 모듈의 내용을 보고 Binaries 폴더에서 해당 모듈을 찾아 로드하게 .. 2021. 7. 23.
[UE4] 주요 기본 함수 및 타입 컴포넌트에 대한 포인터 타입을 선언하고, 해당 컴포넌트에 대한 메모리를 할당할 때 필요한 함수 -> CreateDefaultSubobject(): 템플릿 인자로 전달된 타입의 컴포넌트 포인터를 반환한다. 즉 컴포넌트를 생성하는 함수이다. 인자로 받는 문자열은 액터에 속한 컴포넌트를 구별하기 위한 해시 값 생성을 위한 용도. 따라서 중복되면 안된다. B 컴포넌트를 A 컴포넌트에 부착시킬 때 (B가 A의 하위 컴포넌트가 된다.) -> B->SetupAttachment(A) C++에서 해당 asset을 불러들일 때 필요한 함수 -> ConstructorHelpers::FObjectFinder MyAsset(AssetPath): 변수 MyAsset에 AssetPath로부터 가져온 에셋 오브젝트가 저장된다. As.. 2021. 7. 22.
[UE4] 언리얼 엔진 Pitch Yaw Roll 그래픽스에서 회전각을 나타내는 방법 중 오일러 각을 사용하는 pitch yaw roll이 있다. DirectX에선 다음과 같은 좌표계를 가졌고 x축 기준, y축 기준, z축 기준 회전각이 각각 pitch, yaw, roll이었다. 언리얼에선 좌표축이 다음과 같으며 DX와 마찬가지로 왼손 좌표계이다. 정면이 x, 우측이 y, 상단이 z이다. 축만 바뀌었을 뿐, 좌우 축을 기준으로 한 회전각은 pitch, 상하 축을 기준으로 한 회전각은 yaw, 앞뒤를 기준으로 한 회전각은 roll은 변함이 없다. 따라서 pitch는 y축 회전각, yaw는 z축 회전각, roll은 x축 회전각이 된다. x,y,z 신경쓰지 말고 상하 축을 기준으로 한 회전각은 yaw 이런 식으로 생각하는 것이 이해하기 쉽다. 2021. 7. 21.
[UE4] AController::Possess() overriding error // DEPRECATED(4.22, "Posssess is marked virtual final as you should now be overriding OnPossess instead") 해당 함수는 컨트롤러가 pawn을 possess할 때 호출되는 함수이다. 4.22부터 하위 클래스에서 오버라이딩을 못하도록 해놓았으므로, OnPossess() 함수를 대신 사용하라고 한다. 이름만 제외하면 시그내쳐는 동일하다. 2021. 7. 20.