언리얼/언리얼 C++ 20

C++ 클래스와 블루 프린트의 연결

언리얼 엔진뿐만 아니라 어느 정도 규모가 있는 작업을 하게 되면 프로젝트에 사용하는 데이터의 양이 매우 많아집니다.데이터의 양이 너무 많아지고 방대해지므로 C++ 코드만으로 모든 상황을 다루기 힘들어집니다.이런 상황에서 언리얼 엔진을 사용하는 경우 C++ 클래스뿐만이 아닌 블루 프린트를 사용하는 것은 당연합니다.또한 블루 프린트를 사용할 때 얻는 이점도 있으므로 C++과 블루 프린트를 사용하는 것에 익숙해질 필요가 있습니다. 그렇다면 어떻게 C++과 블루 프린트를 연결지어 사용할 수 있을까요?이를 위해 언리얼 엔진에서는 C++ 클래스에서 특별한 지시자를 사용하게끔 설계해주었습니다. 간단하게 표로 정리해보았습니다. 1) C++ 변수를 블루 프린트에서 노출 위와 같이 블루 프린트에서 변수를 노출시키는 지시자..

커스텀 로그

프로젝트를 만들면서 로그를 통해 프로그래밍의 문제가 발생하는 부분을 파악하거나 수정점을 찾을 수 있습니다.그리고 언리얼 엔진에서는 이런 로그 기능을 사용자가 직접 커스터마이징할 수 있게 지원합니다.이번 포스트에서는 언리얼 엔진에서의 커스텀 로그를 만드는 방법을 알아보겠습니다. 1) 기본설정커스텀 로그를 사용하기 위해서는 기본적으로 설정해야 하는 요소가 존재합니다.설정 요소는 다음과 같습니다. 프로젝트명.h 에서는 다음과 같이 작성합니다.DECLARE_LOG_CATEGORY_EXTERN( CategoryName, DefaultVerbose, CompileTimeVerbose );이때 CategoryName 인자는 출력할 커스텀 로그의 이름이 되고,DefaultVerbose 인자는 런타임동안 로그로 남겨질 ..

언리얼 향상된 입력 시스템

이번 포스트에서는 언리얼 엔진에서 기존에 사용하던 구형 입력 시스템을 대체하는언리얼 5.1부터 제공되는 향상된 입력 시스템(Enhenced Input System)에 대해 알아보겠습니다. 1) 간단한 정리향상된 입력 시스템은 언리얼 5.1부터 사용할 수 있으며 기존의 구형 입력 시스템을 대체합니다.장점으로는 사용자의 입력 설정 변경에 유연하게 대처할 수 있으며사용자의 입력을 구형 입력 시스템에서 하듯이 기존의 InputComponent를 체크하는 과정에서 전부 처리하는 것이 아닌총 4가지 단계로 세분화하고 각 설정을 독립적인 애셋으로 대체할 수 있다는 점입니다. 2) 처리 절차향상된 입력의 처리 절차는 다음과 같습니다.  3) 향상된 입력을 통해 얻는 이점그렇다면 향상된 입력을 통해서 얻는 이점은 무엇인..

언리얼 구형 입력 시스템

이번 포스트에서는 언리얼 엔진의 구형 입력 시스템에 대해 알아보겠습니다.언리얼 엔진 5.1 부터는 향상된 입력 시스템(Enhenced Input System)이 도입되었지만,그 이전의 버전에서는 구형 입력 시스템이 사용된 경우가 많기에 구형 입력 시스템도 알아두는 것이 좋습니다. 1) 구형 입력 시스템의 처리구형 입력 시스템에서 플레이어의 입력은 PlayerController를 통해 Pawn에 전달됩니다.Pawn은 나중에 관련 포스팅을 작성하겠지만,언리얼 오브젝트의 기본인 Actor에서 이동과 같은 움직임이 추가된 것이라고 생각해주시면 됩니다. 이때 들어온 입력은 PlayerController에서 처리하거나 Pawn이 처리하게끔 결정할 수 있지만,PlayerController에서는 입력외의 많은 정보를 ..

언리얼 엔진의 메모리 관리 (3) ~ 패키지

기존의 포스트에서 다룬 예제들을 보면, 하나의 프로젝트에 한두개의 언리얼 오브젝트가 포함되었습니다.하지만 프로젝트가 점점 커질수록 그 안의 데이터의 양은 점점 늘어나고,이는 곧 손으로 셀 수 없을 정도의 언리얼 오브젝트가 프로젝트에 포함되는 것을 의미합니다. 이런 상황에 대비하기 위해 언리얼 엔진은 언리얼 오브젝트를 효과적으로 저장하고 불러들이고자패키지 단위로 언리얼 오브젝트를 관리합니다. 이번 포스트에서는 언리얼 오브젝트의 관리 단위인 패키지와 그 휘하 단위들을 알아보겠습니다. 1) Package와 Asset패키지는 다수의 언리얼 오브젝트를 포장하는데 사용되는 언리얼 오브젝트입니다.그리고 모든 언리얼 오브젝트는 패키지에 소속되어 있습니다. 그리고 이런 패키지에 소속된 서브 오브젝트들을 Asset이라고 ..

언리얼 엔진의 메모리 관리 (2) ~ 직렬화

저번 포스팅에서는 언리얼 엔진이 메모리를 관리하는 방법 중 하나인 가비지 컬렉터에 대해 알아보았습니다.이번 포스팅에서는언리얼 엔진에서 메모리, 그 중에서도 오브젝트를 관리하는 방법 중 하나인 직렬화에 대해 알아보겠습니다. 1) 직렬화(Serialization)란?직렬화는 오브젝트나 연결된 오브젝트의 묶음을 바이트 스트림으로 변환하는 과정을 의미합니다.이때 직렬화는 바이트 스트림에서 오브젝트로 변환하는 과정도 포함해서 의미합니다. 직렬화로 얻을 수 있는 장점은 다음과 같습니다. 1) 현재 프로세스의 상태를 저장하고 필요한 경우에 복원이 가능합니다.2) 현재 인스턴스의 정보를 복사하여 다른 프로그램에 전송이 가능합니다.3) 네트워크를 통해 현재 프로세스의 상태를 다른 컴퓨터에서 복원이 가능합니다.4) 데이터..

언리얼 엔진의 메모리 관리 (1) ~ 가비지 컬렉션 시스템

이전의 포스팅에서 언리얼 엔진은 C++을 사용함으로서장점은 장점대로 취하면서, 단점은 현대 객체지향 언어의 특성을 사용하여 극복한다고 말씀드렸습니다. 특히, 포인터를 사용함으로써 발생하는 문제는 메모리에 직접적인 손상을 가할 수가 있기에 매우 중요하게 다뤄야 합니다.포인터를 사용함으로써 발생하는 문제는 크게 다음의 3가지로 분류할 수 있습니다. 1) 메모리 누수 : delete가 되지 않아 heap에 메모리가 그대로 남겨짐 이로 인해 지속적인 자원 낭비 발생2) 허상 포인터 : nullptr는 아니지만, delete된 오브젝트의 주소를 가리키는 포인터3) 와일드 포인터 : 값이 초기화되지 않아 엉뚱한 주소를 가리키는 포인터 이번 포스팅에서는 언리얼 엔진이 현대적인 객체지향 언어의 특징, 그 중에서도 가비..

언리얼 C++ - 구조체

C++을 통해 동작하는 무언가를 만들게 되면, 대부분의 상황에서는 클래스를 사용합니다.클래스라는 거대한 틀에서 찍어낸 인스턴스라는 객체를 사용하여 프로그램을 구성하는 것이 객체지향 프로그래밍의 기본구조이기 때문입니다. 그런데, 다른 코드 예시를 살펴보면 눈에 띄는 구조가 하나 있습니다.구조체(Struct)라는 것인데, 살펴보면 클래스와는 그렇게 큰 차이가 없는 듯 합니다.하지만, 클래스처럼 구조체 역시 프로그램의 구성에 있어서 매우 유용하고 중요한 개념입니다. 이러한 구조체를 언리얼 엔진에서는 어떻게 사용하는지 한번 알아보겠습니다. 1) 구조체에 대하여구조체는 클래스와 마찬가지로 자신만의 멤버를 갖게 됩니다.하지만 클래스가 멤버와 더불어 수행하는 동작만을 갖고 있다면구조체는 오로지 멤버에만 집중하는 것이..

언리얼 C++ - 자료 구조 ~ TMap

https://monstrosite.tistory.com/44 언리얼 C++ - 자료 구조 ~ TSethttps://monstrosite.tistory.com/43 언리얼 C++ - 자료 구조 ~ TArray언리얼 엔진은 자체 제작한 자료 구조 라이브러리 줄여서 UCL(Unreal Container Libarary)를 제공합니다.이는 언리얼 엔진을 안정적으로 지원하며monstrosite.tistory.comTSet에 이은 언리얼 C++의 자료구조 마지막 포스트입니다.이번 포스트에서는 TMap에 대해 알아보도록 하겠습니다. 1) TMapTMap에는 std::map이 대응됩니다. 이번에도 std::map과 TMap과의 차이점을 한번 알아보겠습니다.우선 std::map의 특징을 간단하게 적어보겠습니다.set과..

언리얼 C++ - 자료 구조 ~ TSet

https://monstrosite.tistory.com/43 언리얼 C++ - 자료 구조 ~ TArray언리얼 엔진은 자체 제작한 자료 구조 라이브러리 줄여서 UCL(Unreal Container Libarary)를 제공합니다.이는 언리얼 엔진을 안정적으로 지원하며 다수의 오브젝트 처리에 유용하게 사용할 수 있습니다.monstrosite.tistory.com위의 포스팅에서 이어지는 이번 포스팅에서는 언리얼 C++의 자료구조 중 하나인 TSet에 대해 알아보겠습니다.TSet 역시 TArray와 마찬가지로 언리얼 엔진에서 제공되어 많이 사용되는 자료구조입니다. 1) TSetTArray는 std::vector와 큰 차이점이 존재하지 않았습니다.그러나 TSet은 std::set과는 큰 차이점이 존재하는데, 이..