UE5 55

멀티플레이어의 기본 -데디케이트 서버와 리슨 서버

멀티플레이어의 이해 게임을 하면서 '멀티플레이어'라는 용어를 많이 들어봤을 것이다. 이 용어가 개발자에게는 어떤 의미냐 하면, 실제로 멀티플레이어를 구현하기 위해서는 서버와 서버에 연결된 클라이언트 사이의 네트워크를 통해 전송되는 일련의 명령을 의미한다. 이를 통해 구현해내면, 개발자는 플레이어에게 다른 플레이어들과 세계를 공유하는 경험을 제공할 수 있다. 서버와 클라이언트 사이의 이러한 양방향 통신의 한 예로는 플레이어가 게임 중에 무기를 발사하려고 시도하는 시점을 들 수 있다. 플레이어가 마우스 왼쩍 버튼을 누르고 있으면, 클라이언트가 서버에 무기 발사를 원한다는 의사를 전달한다. 서버는 다음 항목을 확인해 플레이어가 무기를 발사할 수 있는지 확인한다. 플레이어가 살아 있는가? 플레이어가 무기를 장착..

UE5 2024.01.01

Survival - UE5 - Multiplayer의 작동

이 서바이벌 게임의 multiplayer로 복제되는 방식으로 설계되었다. 우선, 멀티플레이어에 대해 가장 먼저 알아야 할 것이 있다. 언리얼 엔진 내에서 멀티플레이어 게임을 프로그래밍하거나 만들 때, 따라야할 몇 가지 규칙이 있다. 만약 그 규칙을 따르지 않으면, Player1이 동작하는 모든 것이 Player2의 화면에서는 복제되지 않아 그저 멀대같이 서있는 하나의 캐릭터로만 보일 뿐이다. 이러한 문제는 멀티플레이어 게임을 제작할 때 종종 겪는 시행착오이다. UE 내에서는 멀티플레이어 작업을 수행할 때 준수해야하는 특정 규칙들이 있고, 이러한 규칙들을 잘 이해하면 원하는 종류의 멀티플레이어 게임을 거의 만들 수 있다. 실제로 언리얼 편집기 내에서는, 언리얼이 가지고 있는 두 가지 다른 유형의 멀티플레이..

UE5 2023.12.31

Delegate 사용방법

델리게이트란? C++ 오브젝트 상의 멤버 함수를 가리키고 실행시키는 데이터 유형이다. 델리게이트로 C++ 오브젝트 상의 멤버 함수 호출을 일반적이고 유형적으로 안전한 방식으로 할 수 있다. 델리게이트를 사용하여 임의의 오브젝트의 멤버 함수에 동적으로 바인딩시킬 수 있으며, 그런 다음 그 오브젝트에서 함수를 호출할 수 있다. 호출하는 곳에서 오브젝트의 유형을 몰라도 무관하다. 델리게이트 오브젝트는 복사시에도 안전성이 보장된다. 델리게이트는 값으로의 전달이 가능하나, heap 영역에서 메모리를 할당하기 때문에 보통 추천할 만 하지는 않다. 가급적이면 델리게이트는 항상 참조로 전달하는 것이 좋다. 델리게이트는 싱글 - 캐스트 (형변환)와 멀티-캐스트 모두 지원되며, 디스크에 안전하게 Serialize 시킬 수..

UE5 2023.12.05

언리얼 내의 포인터

관리되지 않는 메모리와 관리되는 메모리 관리되지 않는 메모리는 malloc()/free() , new/delete가 있으며, 관리되는 메모리는 NewObject와 ConstructObject 사용이 있다. 또한 이들을 수동 메모리 해제를 위해 언리얼은 UObject::ConditionalBeginDestroy() 멤버 함수를 호출한다. 오브젝트 추적에 대한 용이함으로는 스마트 포인터와 TScopedPointer를 사용하여 가능하다. 언리얼 스마트 포인터 언리얼 스마트 포인터란? C++11의 스마트 포인터의 디자인을 커스텀하여 구현(implementation. SW공학 내의 구현 의미)한 것으로, C++의 스마트 포인터 라이브러리는 일반 객체를 위한 라이브러리이므로, 언리얼 오브젝트에 사용하기에..

UE5 2023.11.02

언리얼 게임 모드 클래스

언리얼에서 게임을 구현하는 다양한 기능은 플러그인, 모듈 등을 통해서 추가할 수 있다. 하지만 게임 구현의 주춧돌은 역시 게임 모드 클래스이다. 언리얼 게임 모드 클래스 게임에 일시 정지 기능을 추가하고 싶은 경우를 생각해보자. 게임을 일시 정지시키기 위한 모든 로직 및 구현 내용이 하나의 클래스 안에 배치돼야 할 것이다. 게임 모드 클래스는 플레이어가 게임에 입장하면 게임 흐름을 처리하는 역할을 담당하게 된다. 게임 흐름은 게임에서 발생하는 모든 상황(ex. 일시정지, 플레이, 재시작 등 게임 흐름 행동)이 될 수 있다. 이와 비슷하게 멀티플레이어 게임에서는 네트워크와 관련된 게임플레이 로직이 한 곳에 배치돼야 한다. 게임 모드 클래스는 바로 이런 역할을 담당한다. 게임 모드는 게임 로직을 실행하고 플..

UE5 2023.10.27

UE5 멀티스레딩과 enum을 이용한 상태 변환

멀티스레딩을 이용하면 여러 함수가 동시에 호출되는 것이 가능하다. 해당 언리얼 엔진 문서를 참고하였음 https://docs.unrealengine.com/5.1/ko/animation-optimization-in-unreal-engine/ https://docs.unrealengine.com/5.3/ko/animation-optimization-in-unreal-engine/ 애니메이션 최적화 애니메이션 블루프린트의 퍼포먼스를 높이는 최적화 기법에 대한 설명입니다. docs.unrealengine.com 애니메이션 최적화에 가장 좋은 방법은 멀티스레드를 이용하는 것이다. 여기서 잠깐, 멀티 스레드의 개념 이전에 알아 두어야 할 것이 있는데, 스레드 개념이다. 스레드란 무엇인가? 일반적으로 많이 쓰는 운..

UE5 2023.10.22

UFUNCTION() 응용을 위한 가이드

블루프린트는 프로그래머와 디자이너의 협업이 가능하도록 해줄 때 편리하다. unreal은 디자이너도, 프로그래머도 둘 다 사용이 가능하다는 점에서 큰 이점이 된다. 이에 대한 예시로 디자이너가 새로운 유형의 무기를 구현할 때, 프로그래머가 무기에 대한 클래스를 만들어 놓고 Fire() 함수 등 조작할 수 있는 중요한 몇가지의 함수를 블루프린트로 만들어 가시화 해놓으면, 디자이너가 코드를 읽어야 할 필요는 없다. 프로그래머도 디자이너에게 코드를 맡길 필요가 없다. 총 발사 속도를 다시 코딩하고 게임을 컴파일 시킬 필요도 없다. 디자이너는 블루프린트를 이용해 직접 발사속도 및 스태틱 매쉬만 변경해주면 된다. 이는 디자이너 프로그래머 모두에게 시간 절약이 될 수 있다. 근데 프로그래머에게도 BP를 사용할지 C+..

UE5 2023.10.16

Physics Field System _ RPG 부서지는 물체

게임에서는 부서지는 물체와 부서지지 않는 물체가 구분된다. 이러한 사소한 물리 시스템의 적용이 플레이어의 몰입감을 높여준다. 붉은 사막 트레일러에서 이를 찾아볼 수 있다. 플레이어가 전투 중, 나무로 만든 구조체와 부딪히니, 박살이 나는 것을 확인할 수 있다. 이는 비단 나무 뿐만이 아닌, 항아리가 될 수도 있고, 혹은 이러한 물리 시스템을 이용해서 끊겨있는 다리를 대신 해 나무를 부셔서 다리 대용으로 이용하도록 플레이어를 유도하면 플레이어가 게임에서 느끼는 몰입감은 배가 될 것이다. 결국 플레이어가 얼마나 오랫동안 게임에 머무르느냐는 이러한 사소한 디테일에 따라 달린 것이라고 생각한다. 가상 세계에서 플레이어가 상상했던 그 이상의 디테일을 접할 기회를 자꾸 제공하면 플레이어는 해당 가상 세계에서의 몰입..

UE5 2023.10.16