[Unreal Engine] Delegate
·
Game Programming/Unreal Engine
개요이번 포스팅에서는 언리얼 엔진에서의 이벤트를 처리하기 위한 기능 중 하나인 델리게이트(Delegate)에 대해 정리해보도록 하겠습니다.Delegate란? 델리게이트(Delegate)는 C++의 함수 포인터처럼 특정 함수를 등록해 호출할 수 있는 일종의 콜백 메커니즘입니다. 언리얼 엔진에서는 게임 이벤트를 처리하기 위해 델리게이트를 주로 사용합니다. 언리얼의 델리게이트는 C++의 델리게이트와 유사하면서도, 언리얼의 리플렉션 시스템과 결합되어 블루프린트에서 호출할 수도 있기에 코드와 비주얼 스크립트를 쉽게 연동할 수 있습니다. 델리게이트의 선언은 제공되어 있는 선언 매크로 중 하나를 사용하여 이루어집니다. 사용되는 매크로는 델리게이트에 바인딩되는 함수의 시그너처에 따라 결정됩니다.  아래의 표에서 델리게..
[Unreal Engine] 스마트 포인터 (C++ vs UE)
·
Game Programming/Unreal Engine
개요이번 포스팅에서는 기본적인 C++의 스마트 포인터와 언리얼 엔진에서의 스마트 포인터에 대해 정리해보도록 하겠습니다.C++ 스마트 포인터 (Unique, Shared, Weak)스마트 포인터는 메모리 관리를 자동화해 메모리 누수를 방지하고 객체의 수명을 관리하는데 유용합니다. Unique_ptr단일 소유권을 가지는 스마트 포인터입니다.소유권이 하나 뿐이므로, 복사가 불가 합니다.객체가 더 이상 사용되지 않는 경우 소멸되어 자동으로 메모리가 해제됩니다.#include // 스마트 포인터를 사용하기 위한헤더 #include using namespace std;class MyClass {public: MyClass() { std::cout ptr = std::make_unique(); ptr->..
[Unreal Engine] DataAsset, Lazy Loading
·
Game Programming/Unreal Engine
개요게임 개발에서는 대규모의 데이터를 효율적으로 관리하고 필요시 빠르게 접근할 수 있도록 하는 것이 중요합니다. 언리얼 엔진에서는 다양한 데이터 관리 방식을 제공합니다.  이번 포스팅에서는 Unreal Engine의 데이터 애셋(Data Asset)과 지연 로딩에 대해 정리해보겠습니다.DataAsset 개념Data Asset은 Unreal Engine의 UDataAsset 클래스를 상속받아 만든 사용자 정의 데이터 클래스입니다.이를 활용해 아이템, 캐릭터 스텟, 레벨 등 게임 내 다양한 속성을 외부 파일로 관리하고, 코드에서 해당 데이터를 간편하게 불러올 수 있습니다. 즉, DataAsset은 여러 데이터와 설정값을 관리하기 위해 사용되며, 코드를 수정하지 않고도 게임 데이터를 관리할 수 있다는 장점이 ..
[Unreal Engine 5] AI Controller
·
Game Programming/Unreal Engine
개요이번 포스팅에서는 몬스터 AI를 구현하기 위해 필요한 AI Controller에 대해 다루어보도록 하겠습니다.Controller언리얼 엔진의 Controller는 Pawn(폰) 또는 Character(캐릭터)처럼 폰에서 파생된 클래스를 빙의(Possess)하여 동작을 제어할 수 있는 액터입니다. 크게 사람이 조종하는 폰에 사용되는 PlayerController와 AI를 구현하기 위해 필요한 AI Controller로 구분되며, 두 컨틀롤러 모두 Possess 함수를 통해 Pawn(폰)의 제어권을 획득하고, Unpossess 함수로 소유권 해제가 가능합니다. 컨트롤러는 제어중인 폰에 발생하는 다수의 이벤트를 받으며, 기본적으로 Pawn(폰)과 1:1 대응 관계를 가집니다. 즉, 각각의 컨트롤러는 하나의..
[Unreal Engine 5] FABRIK IK
·
Game Programming/Unreal Engine
개요언리얼 엔진 TPS 관련 강의를 들으며 AimOffset을 추가했더니 위, 아래 방향을 바라볼 때 다음과 같이 무기를 부착하지 않은 손의 위치가 이상해지는 것을 확인할 수 있었습니다.사진을 자세히 보면 왼손의 위치가 총에 붙어있지 않고 허공에 떠있는 모습을 볼 수 있는데, 이를 맞춰주는 방법을 간단히 정리해보도록 하겠습니다. FABRIK IK FABRIK IK(Forward And Backward Reaching Inverse Kinematics)은 언리얼 엔진에서 사용되는 IK 솔버 중 하나로, 캐릭터의 뼈대를 자연스럽게 움직이기 위해 사용됩니다. 언리얼 엔진에서는 Control Rig나 Animation Blueprint에서 설정할 수 있으며, 주로 팔이나 다리 등이 목표 지점에 자연스럽게 도달..
[Unreal Engine 5] ENetRole
·
Game Programming/UE_Multiplayer
개요ENetRole은 멀티플레이어 게임 개발에서 중요한 역할을 하는 개념입니다. 이 개념은 네트워크에서 각 플레이어나 오브젝트가 어떤 역할을 하는지를 정의하며, 주로 서버와 클라이언트 간의 역할을 구분하는 데 사용됩니다. 예를들어 플레이어 2명이 연결된 멀티플레이어 게임의 경우 다음과 같이 여러 버전의 캐릭터가 존재합니다. 1. Client Controlling the Pawn(내가 조종 가능한 Pawn)2. Server(서버에 복사된 Pawn)3. Client Not Controlling the Pawn(상대방이 조종하는 Pawn) 특별하게 서버에서만 처리해야 하는 로직들이 있으며, 이를 구별하기 위해 ENetRole이라는열거형 타입이 존재합니다.ENetRoleENetRole::ROLE_None객체가 ..
[Unreal Engine] 리플렉션 시스템, CDO
·
Game Programming/Unreal Engine
개요언제나 자연스럽게 사용하지만 정확히 알지 못하는 언리얼 엔진의 리플렉션 시스템과 CDO(Class Default Object)에 대해 정리해 보았습니다. Reflection System리플렉션(Reflection)은 프로그램이 실행시간(런타임)에 자기 자신을 조사하는 기능입니다. 기존의 C++에서는 어떠한 형태의 리플렉션도 지원하지 않아 언리얼에는 자체적으로 C++ 클래스, 구조체, 함수, 멤버 변수, 열거형 관련 정보를 수집, 질의, 조작하는 별도의 시스템이 구축되어 있으며 이를 리플렉션 시스템(프로퍼티 시스템)이라고 부릅니다. 다음과 같이 언리얼 엔진 내의 여러 가지 시스템들이 이 리플렉션 객체에 의존하며,네트워크 리플리케이션블루프린트와 C++ 연동에디터의 디테일 패널자동 시리얼라이제이션가비지 컬..
[Unreal Engine 5] GameInstanceSubsystem
·
Game Programming/Unreal Engine
개요멀티플레이어 게임을 제작하기 위한 세션 관리를 어디서 할지 고민 중에 GameInstanceSubsystem에서 처리하면 좋다는 의견을 받아 GameInstanceSubsystem이 정확하게 어떤 것인지에 대해 정리해보았습니다.Subsystem, GameInstanceSubsystem언리얼 엔진의 서브시스템은 수명이 관리되는 자동 인스턴싱 클래스입니다. 클래스는 사용하기 쉬운 확장점을 제공하여, 프로그래머는 블루프린트 및 Python 을 바로 노출시킴과 동시에 복잡한 엔진 클래스 수정 또는 오버라이드를 피할 수 있습니다.  또한 자동으로 수명이 관리되기에 서브시스템은 플러그인을 만들 때 특히 유용합니다. 그 이유는 사용자는 플러그인을 게임에 추가하기만 하면 플러그인이 언제 인스턴싱 및 초기화될 지 정..