분류 전체보기 121

[언리얼 C++] 컨테이너 클래스 TArray 사용법 (생성 및 삽입, 반복처리)

언리얼 엔진의 가장 간단한 컨테이너 클래스는 TArray입니다. TArray는 템플릿 클래스로 타입이 같은 다른 오브젝트들을 담을 수 있는 클래스입니다. TArray 컨테이너는 언리얼 엔진에서 가장 자주 쓰이는 컨테이너 클래스로 신속성, 메모리 효율성, 안전성을 염두에 두고 디자인되었습니다. TArray 타입은 두가지 프로퍼티로 정의되는데, 바로 엘리먼트 타입과 얼로케이터입니다. 이 글에서는 주로 사용되는 엘리먼트 타입의 TArray에 대해 다뤄보도록 하겠습니다. 엘리먼트 타입은 배열에 저장되는 오브젝트 타입입니다. TArray 컨테이너는 소위 동질성 컨테이너로, 속하는 엘리먼트들 전부 같은 타입이어야 합니다. 타입이 다른 엘리먼트를 하나의 TArray 컨테이너에 저장할 수는 없습니다. TArray 컨테..

[언리얼 C++] 스트링 처리

언리얼 엔진에서 사용가능한 스트링 클래스는 3가지가 존재합니다. 바로 FName, FText, FString 입니다. 이번 글에서 이 3가지 클래스에 대해 자세힝 알아보도록 하겠습니다. 1. FName 콘텐츠 브라우저에서 새 애셋 이름을 지을때, 다이내믹 머터리얼 인스턴스의 파라미터를 변경할때, 스켈레탈 메시에서 본에 접근할때, 모두 FName을 사용합니다. FName은 문자열 사용에 있어서 초경량 시스템을 제공하는데, 주어진 문자열이 사용된다 해도 데이터 테이블에 한번만 저장되는 것입니다. 또한, FName은 대소문자를 구분하지 않고 변경도 불가능하여, 조작할 수 없습니다. 이처럼 FName의 정적인 속성과 저장 시스템 덕에 키 값으로 FName에 접근하는 속도가 굉장히 빠릅니다. FName 서브시스템..

[언리얼 C++] 언리얼 오브젝트(UObject)

언리얼 엔진에는 게임 오브젝트를 처리하는 견고한 시스템이 존재합니다. 바로 언리얼 엔진 오브젝트의 베이스 클래스인 UObject 클래스입니다. UObject 클래스에서 파생되는 클래스에 UCLASS 매크로를 사용하여 태그를 해주면 해당 클래스는 UObject 처리 시스템에서 인식되게 됩니다. 1. UCLASS 매크로 UCLASS 매크로는 UObject에게 자신의 언리얼에서 기반으로 삼은 유형에 대해 설명해 주는 UClass로의 레퍼런스를 넘겨줍니다. 각각의 UClass는 Class Default Object, 줄여서 CDO라 불리는 오브젝트를 하나 유지합니다. CDO는 본질적으로 기본 "템플릿" 오브젝트로, 클래스 생성자에 의해 생성된 이후 변경되지 않습니다. 오브젝트 인스턴스에 대해 UClass와 CD..

[언리얼 C++] 이벤트

언리얼 엔진에서 이벤트는 여러 함수를 바인딩하여 모두 동시에 실행시킬 수 있는 델리게이트입니다. 이벤트는 멀티캐스트 델리게이트와 매우 유사합니다. (멀티캐스트 델리게이트에 대한 설명은 [언리얼 C++] 멀티캐스트 델리게이트 (tistory.com) 글을 참고하시기 바랍니다.) 이벤트도 멀티캐스트 델리게이트와 마찬가지로 아무 클래스에서나 함수 바인딩이 가능합니다. 하지만 이벤트는 멀티캐스트 델리게이트와 다른 점이 있습니다. 바로 멀티캐스트 델리게이트는 아무 클래스에서나 해당 델리게이트의 함수를 호출할 수 있는데, 이벤트는 해당 이벤트를 선언한 클래스만이 이벤트의 Broadcast(), IsBound(), Clear() 함수를 호출할 수 있습니다. 즉, 이벤트 오브젝트는 퍼블릭 인터페이스에 노출시켜도 Bro..

[언리얼 C++] 멀티캐스트 델리게이트

언리얼 엔진에서 멀티캐스트 델리게이트는 여러 함수를 바인딩시켜 바인딩된 모든 함수들을 동시에 실행시킬 수 있는 델리게이트입니다. 멀티캐스트 델리게이트는 싱글캐스트 델리게이트의 기능 대부분을 가지고 있습니다. - 오브젝트로의 약참조만 가지고 있습니다. - 구조체와 함께 사용이 가능합니다. - 쉽게 복사할 수 있습니다. - 로드/세이브가 가능하며 원격으로 트리거됩니다. 하지만 멀티캐스트 델리게이트는 보통의 델리게이트와 다른 점이 있습니다. 멀티캐스트 델리게이트의 함수 시그너처에서는 반환값을 사용할 수 없습니다. 그러므로 멀티캐스트 델리게이트에 바인딩시킬 함수들은 모두 void로 선언되어져야 합니다. 1. 멀티캐스트 델리게이트 선언하기 DECLARE_MULTICAST_DELEGATE(FMultiDele) //..

[언리얼 C++] 다이내믹 델리게이트

언리얼 엔진에서 다이내믹 델리게이트는 serialize가 가능하면서 리플렉션도 지원하는 델리게이트입니다. 언리얼 엔진에서 델리게이트는 C++ 객체에서만 사용할 수 있는 델리게이트와 C++과 블루프린트 객체가 모두 사용할 수 있는 델리게이트로 나뉩니다. 블루프린트 객체는 멤버 함수에 대한 정보를 저장하고 로딩하는 직렬화 매커니즘이 들어있기 때문에 일반 C++ 언어가 관리하는 방법으로 멤버 함수를 관리할 수 없습니다. 그래서 블루프린트와 관련된 C++ 함수는 모두 UFUNCTION 매크로로 선언해서 사용해줘야 합니다. 이렇게 블루프린트 객체와도 연동하는 델리게이트를 다이내믹 델리게이트라고 합니다. 다이내믹 델리게이트는 이러한 동작원리 때문에 일반 델리게이트보다 다소 느릴 수 있습니다. 1. 다이내믹 델리게이..

[언리얼 C++] 싱글캐스트 델리게이트

델리게이트는 C++ 오브젝트 상의 멤버 함수를 가리키고 실행시키는 데이터 유형입니다. 델리게이트를 사용하여 C++ 오브젝트 상의 멤버 함수를 안전한 방식으로 호출할 수 있습니다. 델리게이트를 사용하여 오브젝트의 멤버 함수에 동적으로 바인딩 시킬 수 있으며, 해당 함수를 다른 오브젝트에서 호출할 수 있습니다. 호출하는 오브젝트에서 멤버 함수가 정의된 오브젝트의 유형을 몰라도 가능합니다. 델리게이트 오브젝트는 값 복사를 해도 안전하지만 추천하지는 않습니다. Heap에 메모리를 할당해야 하기 때문입니다. 그래서 가급적이면 델리게이트는 항상 참조 전달을 해줘야 합니다. 델리게이트의 종류에는 싱글캐스트와 멀티캐스트가 존재하고, 디스크에 안전하게 Serialize 시킬 수 있는 다이내믹 델리게이트 또한 존재합니다...

[언리얼 C++] 타이머 사용하기

언리얼 엔진에서는 게임플레이 타이머를 제공해줍니다. 게임플레이 타이머는 설정된 주기마다 동작을 수행하는 타이머 구조체입니다. 타이머를 통해 딜레이 이후 또는 일정 시간에 걸쳐 동작을 수행하도록 스케쥴을 잡을 수 있습니다. 그래서 타이머를 사용해서 게임에 여러가지 효과를 구현할 수 있습니다. 예를 들어, 플레이어가 사용한 버프가 지속시간 이후에 사라지는 것 등이 있을 것입니다. 1. 타이머 관리 타이머는 글로벌 타이머 매니저에서 관리합니다. 글로벌 타이머 매니저는 게임 인스턴스 오브젝트와 각 월드에 존재합니다. 타임 매니저와 함께 타이머를 셋업하는 데 사용되는 주 함수는 SetTimer와 SetTimerForNextTick 두 가지가 있는데, 둘다 다양한 파라미터로 셋업할 수 있도록 다수의 오버로드로 선언..

[언리얼 C++] UMG와 UI - 위젯 인터렉션 C++로 제작하기

1. 위젯 블루프린트 생성 위젯 인터렉션을 제작하기 위해서 먼저 위젯 블루프린트를 생성해 줘야 합니다. 위젯 블루프린트 생성은 (UMG와 UI - Viewport에 위젯 띄우기) 글을 참고하시면 됩니다. 2. 위젯 블루프린트 꾸미기 위젯 블루프린트 클래스를 생성하고 더블클릭하면 블루프린트 디자이너 창이 열리며, 여기서 메뉴 레이아웃을 만들 수 있습니다. 언리얼 엔진에서 여러가지 공용 위젯들을 제공해주는데, 예제에선 버튼과 텍스트 블록을 배치해 보았습니다. 그런 다음 블루프린트의 클래스 세팅에서 C++ 클래스를 부모 클래스로 지정해주었습니다. (UMG와 UI - Viewport에 위젯 띄우기) 글에서와 마찬가지로 UIMainHUD 클래스를 부모 클래스로 지정해주었습니다. 3. 위젯 인터렉션 제작하기 cla..

[언리얼 C++] UMG와 UI - Viewport에 위젯 띄우기

1. 모듈 추가 PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "UMG" }); PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" }); 언리얼 엔진에서 UMG와 인터페이스를 사용하기 위해서 일단 프로젝트의 Build.cs 파일에서 위에 해당하는 모듈들을 추가해 줘야 합니다. 2. 위젯 블루프린트 생성 유저 인터페이스 카테고리에서 위젯 블루프린트 클래스를 찾을 수 있습니다. 해당 블루프린트 클래스를 생성하고 더블클릭하면 블루프린트 디자이너 창이 열리며, 여기서 메뉴 레이아웃을 만들 수 있습니다. ..