언리얼
[Unreal] C++ error C2018 : '' 문자를 인식할 수 없습니다 오류 해결
아래와 같이 한글로 작성할 시 여러 오류가 뜨는데 이는 컴파일러가 한글을 인식못해서 발생하는 오류다 고급 저장 옵션에서 UTF-8로 변경해야 오류를 쉽게 해결할 수 있다, 만약에 파일 탭 클릭 후 보이지가 않는다면 아래 방법을 통해 설정하면 된다 UTF-8로 변경 후 빌드가 제대로 되는 모습이다
[Unreal] C++ 변환할 수 없습니다 오류 해결
SetRootComponent(GetCapsuleComponent()); UCapsuleComponent 뿐만 아니라 다른 컴포넌트들을 인식 못하기 때문에 발생하는 오류이다. 해당 컴포넌트 헤더파일을 추가해주면 된다 #include "Components/CapsuleComponent.h"
[Unreal] Reflection (리플렉션)
언리얼은 UHT(Unreal Header Tool) 을 이용해 클래스 계층 구조, 멤버 변수/함수 등의 정보를 UClass 에 저장한다. 이를 리플렉션이라고도 하고, 프로퍼티 시스템이라고도 부른다. 리플리케이션 시스템은 부가 기능으로, 리플렉션 시스템에 보이도록 했으면 하는 유형이나 프로퍼티에 주석을 달아두면 UHT 가 컴파일시 해당 정보를 수집하게 된다. 프로퍼티 시스템 계층 구조는 아래와 같다. (UField 아래에 UStruct, UEnum, UProperty 가 있음) #include "MyObject.generated.h" UCLASS(Blueprintable) class UMyObject : public UObject { GENERATED_BODY() public: MyUObject(); UP..
[Unreal] 비동기 에셋 로딩
UE4에서 애셋 비동기 로딩을 쉽게 하기 위한 신규시스템이 도입되었다. 데이터 로드 및 참조에 사용되는 방법은 일반적으로 두가지가 있다. FSoftObectPath와 TSoftObjectPtr FSoftObjectPath는 애셋의 전체이름이 저장된 스트링이있는 구조체이다. 애셋의 참조 정보와 생성 메소드들을 포함한다. 에디터에서는 UObject처럼 표시된다. TSoftObjectPtr은 FsoftObjectPath를 감싸는 TWeakObjectPtr 이다. 에디터 UI에서 특정 클래스만 선택되게끔 제한하도록 하는 역할. 블루프린트에서 애셋의 SoftReference로 표시 애셋 레지스트리와 오브젝트 라이브러리 애셋 레지스트리는 애셋에 대한 메타데이터를 저장하여, 검색 및 질의를 가능하게 한다. 에디터에서..
[Unreal] 미니맵 및 캐릭터 위치 표시
화살표 스프라이트 세팅 우선 화살표 스프라이트를 준비해준다, 구글에서 대충 이미지를 다운로드 받아 폴더에 드래그 앤 드롭해주면 Texture 형태로 로딩될텐데 그 후 우클릭 > Paper2D > Sprite 눌러서 생성해준 후 아래 부분을 세팅한다. 세 가지의 컴포넌트가 필요하다 SpringArmComponent PaperSpriteComponent USceneCaptureComponent2D C++로 추가해줬다 .h 파일에 추가 UPROPERTY(EditAnywhere, Category = Minimap) USpringArmComponent* SpringArm; UPROPERTY(EditAnywhere, Category = Minimap) USceneCaptureComponent2D* SceneCapt..
[Unreal] Level Blueprint 를 C++로 접근하기
기본적으로 Level Blueprint는 ALevelScriptActor, 즉 Actor 형식이다. 이를 상속받아 새로운 Level Actor를 생성한다. 자신의 LevelScriptActor에서 추가한 함수가, Level Blueprint에서도 보일 수 있게 수정할 수 있다. 다음은 Actor들의 Reference를 받아 Destroy 시키는 DestroyActors 함수이다. 자신의 LevelScriptActor에서 작성한 함수가 Level Blueprint에서 보이려면 UFUNCTION과 Specifier 작성 필수이다. 눈에 띄는건 DestroyActors의 UPARAM(ref) 이라는 매크로인데, 이는 함수가 받는 인자가 Blueprint 상에서는 왼쪽 에서 와야 한다는 뜻이다. ( -> 즉 U..
[Unreal] Reflection (리플렉션)
언리얼은 UHT(Unreal Header Tool) 을 이용해 클래스 계층 구조, 멤버 변수/함수 등의 정보를 UClass 에 저장한다. 이를 리플렉션이라고도 하고, 프로퍼티 시스템이라고도 부른다. 리플리케이션 시스템은 부가 기능으로, 리플렉션 시스템에 보이도록 했으면 하는 유형이나 프로퍼티에 주석을 달아두면 UHT 가 컴파일시 해당 정보를 수집하게 된다. 프로퍼티 시스템 계층 구조는 아래와 같다. (UField 아래에 UStruct, UEnum, UProperty 가 있음) #include "MyObject.generated.h" UCLASS(Blueprintable) class UMyObject : public UObject { GENERATED_BODY() public: MyUObject(); UP..
[Unreal] GetClass 와 StaticClass 의 차이
GetClass vs StaticClass StaticClass 는 컴파일 타임에서 UClass 타입의 정보를 얻어오는 것이며, GetClass 는 런타임에서 실제 객체의 클래스를 조회할때 사용된다. AMyActor* ActorPtr = NewObject(...); UObject* ObjPtr = Actor; UClass* MyActorClass = AMyActor::StaticClass(); // AMyActor UClass* ObjectClass = UObject::StaticClass(); // UObject UClass* ActorPtrClass = ActorPtr->GetClass(); // AMyActor UClass* ObjPtrClass = ObjPtr->GetClass(); // AMyA..
[Unreal] 업/다운캐스팅 (Cast 함수) 동작 원리
실제로 언리얼의 Cast 는 다음과 같이 구현되어 있다 : // Dynamically cast an object type-safely. template FORCEINLINE To* Cast(From* Src) { return TCastImpl::DoCast(Src); } 내부적으로 TCastImpl 을 부르고 있다 template struct TCastImpl { // This is the cast flags implementation FORCEINLINE static To* DoCast( UObject* Src ) { return Src && Src->GetClass()->HasAnyCastFlag(TCastFlags::Value) ? (To*)Src : nullptr; } FORCEINLINE sta..
[Unreal] 메모리 관리
메모리 관리는 안정성이 높고 버그가 없는 프로그램을 작성하는 과정에서 늘 중요한 주제다. dangling pointer는 이미 메모리에서 지워진 대상을 참조하는 포인터이며, 추적하기 어려운 버그를 만드는 대표적인 사례다. UE4의 UObject 참조 카운팅 시스템은 UObject 클래스로부터 파생된 액터와 클래스의 메모리를 관리하는 기본적인 수단으로, 이를 통해 UE4 프로그램 내에서 메모리가 관리된다. 만약 UObject에서 파생하지 않은 C++ 클래스를 작성한다면 TSharedPtr/TWeakPtr 를 사용하면 된다. 이번 글에선 메모리 관리와 코드 디버깅 방법을 설명한다. 메모리 관리 기능의 도움을 받으면 메모리 해제를 잊는 실수를 걱정하지 않아도 된다. 메모리 관리를 하는 프로그램에서는 동적으로 ..