UE5

서버 연동 프로젝트 KU - 2. 맵 이동 로직 구현(1)

게임 개발 2024. 5. 17. 19:21
1. 싱글 멀티 영역 구분
2. 플러그인 제작
3. 게임 인스턴스 상속

 

싱글 멀티 영역 구문 맵이동

1. 로비 만듦
2. 싱글플레이 영역과 멀티플레이 로비 영역 구분
 
위 로직을 델리게이트를 이용하여 코드를 작성하였다.
 

CreateSessionCompleteDelegate(FOnCreateSessionCompleteDelegate::CreateUObject(this, &ThisClass::OnCreateSessionComplete)),
FindSessionsCompleteDelegate(FOnFindSessionsCompleteDelegate::CreateUObject(this, &ThisClass::OnFindSessionsComplete)),
JoinSessionCompleteDelegate(FOnJoinSessionCompleteDelegate::CreateUObject(this, &ThisClass::OnJoinSessionComplete))

델리게이트 초기화
 
해당 로직 예)
JoinGameSession() 과 같이 델리게이트 래핑함수를 만들었다.
래핑함수에서 실행 조건을 세팅해주고, 델리게이트에서 해당 함수를 호출해 준다.
OnlineSessionInterface.IsValid() 여부를 다시 한 번 확인한다.
이후 플레이어와 서버를 연결해주는 로직을 실행한다.
 
 

플러그인 제작

 

플러그인에 플러그인 추가하기
1.

	"Plugins": [
		{
			"Name": "OnlineSubsystem",
			"Enabled": true
		},
		{
			"Name": "OnlineSubsystemSteam",
			"Enabled": true
		}
	]

 
2.

 
 

자체 하위 시스템 만들기

 
멀티플레이어 세션 기능 포함한 클래스 만들고, 자체 하위 시스템을 제작하였다.
해당 하위 시스템은 게임 인스턴스의 하위 시스템이다.
 
게임 인스턴스 하위 시스템은 어떻게 동작하는지 이야기 해보겠다.
 
일단, 해당 프로젝트는 멀티플레이어 게임이다.
그럼 멀티플레이어 게임 세션을 처리하기 위한 새로운 클래스를 만들 때
근본적인 질문은 어떤 부모 클래스를 선택해야 할까?
게임 세션을 처리할 때 꽤 좋은 옵션 중 하나인 게임 인스턴스 클래스이다.
 
만약 프로젝트에 게임 인스턴스 클래스를 만들면
게임 생성 시 게임 인스턴스가 생성되고
게임이 종료될 때까지 파괴되지 않는다는 점을 숙지하면 좋다.
 
게임 인스턴스는 레벨 간에 지속되므로 다른 레벨로 이동하더라도 동일한 상태를 유지할 수 있다.
따리서 멀티플레이어 세션 기능이 포함된 부모 클래스로 꽤 좋은 옵션이다.
 
해당 프로젝트는
로비 맵, 싱글 플레이 맵, 메뉴 맵 등 다양한 맵을 이동하는 프로젝트이기 때문이다.
 
그럼 어떤 클래스가 게임 인스턴스 클래스를 상속받는 것이 좋을까?
바로 캐릭터 클래스이다.
맵 바뀔 때 마다 캐릭터의 정보가 초기화된다면 꽤나 골치아픈 일이 벌어질 것이다.
 
또 게임 인스턴스는
언리얼 에서 하위 시스템에 대해서 수명을 자동으로 관리해주는 인스턴스화된 클래스이다.
(자세한 것은 언리얼 공식문서의 Programming Subsystem을 찾아보길 바란다.)
게임 인스턴스가 종료되면
게임 인스턴스 하위 시스템(상속 받은 자녀 클래스)의 초기화 함수가 호출된다.
또한 게임 인스턴스는 같은 엔진 클래스를 덮어쓰지 않도록 돕고,
이미 사용중인 클래스 API를 추가하지 않도록 돕는다.
 
즉 해당 게임 인스턴스를 상속받은 하위 시스템을 만든 이유 중 핵심은
게임 인스턴스가 생성된 후 게임 인스턴스 하위 시스템이 생성되며,
게임 인스턴스가 종료될 때 파괴되고 GS로 수집되기 때문이다.
따라서 이러한 점들은 세션 기능을 포함하는 데 사용할 수 있는 훌륭한 클래스이기 때문이다.
 
때문에 이러한 게임 인스턴스의 특성을 이용해서 프로젝트 차후 계획의 적합성에 맞게
게임 인스턴스를 상속받은 클래스를 제작했다.
 
 

여기서 유의할 것이 멀티플레이어세션을 꼭 누르자.
멀티플레이 만들고 있으니까...
 
 

잊지말고 체크하자