Make Unreal REAL.
article thumbnail
이벤트 태그 전달을 통한 인벤토리 상호작용

Advanced Unreal Engine 5 Multiplayer Gameplay Programming 아이템과 겹칠 시 충돌 함수에서 캐릭터의 획득 함수를 바로 실행하거나, 키 입력에 인벤토리 관련 함수를 바로 바인딩하는 고전적인 방법 대신, 이벤트 태그를 전달해 상호작용 하는 방법에 대해 알아본다. 추가적인 Gameplay Ability를 만드는 대신 이벤트와 이벤트 태그를 활용하면, 어떤 능력에도 종속적이지 않은 독립적인 컴포넌트를 만들 수 있다. 우선 인벤토리 컴포넌트에 이벤트 태그 관련 헤더를 추가한다. 각 동작의 게임플레이 태그와 태그를 전달 받았을 때 수행될 콜백 함수를 선언한다. 게임 플레이 태그를 UPROPERTY로 만들어 에디터에서 설정하지 않고, static으로 만들어 다른 클래스에서..

article thumbnail
인벤토리 아이템 액터

Advanced Unreal Engine 5 Multiplayer Gameplay Programming 이번에는 월드에 실체화시킬 아이템 액터를 만들어 본다. ActionGameTypes.h 헤더에 아이템의 상태를 저장하는 열거형을 선언한다. 월드에서 아이템의 실물을 담당할 ItemActor C++ 클래스를 생성한다. 필요한 헤더 포함과 클래스 전방 선언을 해준 후, 함수들을 선언해준다. 월드에 실체화 될 아이템 액터가 구현해야 하는 콜백 함수들과 초기화 함수, 리플리케이션에 필요한 함수들을 선언한다. Equip / Unequip: 인벤토리에 존재하는 상태에서 장착과 해제만 한다. Drop: 인벤토리에서 제거한 후 월드에 실체화시켜 버려버린다. 아이템 실물에 필요한 변수들을 선언한다. 아이템 정적 데이터..

article thumbnail
인벤토리 컴포넌트

Advanced Unreal Engine 5 Multiplayer Gameplay Programming InventoryComponent C++ 클래스를 생성한다. 컴포넌트 리플리케이션 네트워크 리플리케이션에 대한 컴포넌트 셋업하기 입니다. docs.unrealengine.com 헤더를 포함하고 InitializeComponent(), ReplicateSubobjects(), GetLifetimeReplicatedProps() 함수를 오버라이드한다. ReplicateSubobjects() 함수는 액터 컴포넌트가 아닌, 서브오브젝트를 복제하고자 할 때 사용한다. 아이템 정적 정보 클래스를 통해 아이템 객체 배열인 InventoryList에 아이템을 추가하고 삭제하는 기능을 제공한다. 추가의 경우, 전달 받..

article thumbnail
인벤토리 구조체 선언

Advanced Unreal Engine 5 Multiplayer Gameplay Programming 인벤토리 아이템 객체로 사용할 InventoryItemInstance UObject C++ 클래스를 생성한다. 빌드 설정에 NetCore 모듈을 추가한다. 헤더를 추가하고 초기화에 사용할 Init() 함수를 선언한다. 객체가 네트워크를 통해 참조되기 위해서는 IsSupportedForNetworking() 함수를 오버라이드해야 한다. 리플리케이션에 필요한 GetLifetimeReplicatedProps() 함수를 오버라이드한다. 아이템 객체의 정적 데이터 클래스의 CDO를 반환하는 헬퍼 함수도 선언한다. CDO에서 아이템의 정적 정보를 가져오기 위한 클래스 정보와 장착 여부를 저장해본다. 모든 속성은 ..

article thumbnail
인벤토리 아이템 정적 데이터

Advanced Unreal Engine 5 Multiplayer Gameplay Programming 수정할 수 없는 정적 데이터와 수정할 수 있는 런타임 데이터를 설계하는 가장 쉬운 방법은, 클래스로 만들어 CDO(Class Default Object)와 객체로 관리하는 것이다. 언리얼 엔진은 모든 UClass에 대해 CDO을 생성한다. ActionGameTypes.h 헤더에 아이템의 정적 정보를 저장할 클래스를 선언하고, 우선은 이름만 저장하도록 해본다. 런타임 정보를 저장하는 아이템 객체에서는 정적 정보를 수정할 수 없도록 할 것이므로, EditDefaultsOnly로 설정한다. 방금 선언한 ItemStaticData 클래스를 부모로 하는 TestItem BP 클래스를 생성한다. 아이템 이름에 T..

article thumbnail
인벤토리 구조

Advanced Unreal Engine 5 Multiplayer Gameplay Programming 인벤토리 아이템은 다음으로 구성된다. 바꿀 수 없는 아이템의 고유 정적 데이터 총의 무게, 무기의 기본 데미지, ... 아이템 객체가 갖는 수정할 수 있는 런타임 데이터 남은 탄창 수, 무기의 내구도, ... 정적 데이터는 여러 개 존재할 필요가 없으므로, 항상 단일(Single) 객체로 존재한다. 같은 아이템은 같은 정적 데이터를 참조한다. 런타임 데이터는 아이템 객체별로 존재한다. 인벤토리 저장소는 인벤토리 Entry의 리스트로 구성된다. 인벤토리 Entry는 정적 데이터의 참조를 저장해 어떤 종류의 아이템인지 나타내고, 아이템 객체의 참조를 저장해 런타임 데이터를 저장한다. 아이템 객체는 OnEq..

검색 태그