2024/05 12

이동 동기화

멀티플레이 게임에서는 모두 같은 화면을 볼 수 있어야 하기 때문에 오브젝트들의 위치를 실시간으로 맞춰주어야 한다. 동기화 작업에는 크게 두가지 경우가 있다.하나는 클라이언트에서 먼저 움직인 뒤 서버에 확인을 받는 것이고다른 방법은 서버에 허락을 받고 움직이는 것이다. 반응성이 중요한 Fps같은 게임들은 주로 첫번째 방식을 사용하고, 비교적 덜 중요한 MMORPG같은 게임들은 주로 두번째 방법을 사용한다고 한다. 나는 두번째 방법을 사용했다. 매 프레임마다 서버와 패킷을 주고받을수는 없기 때문에 위치, 방향 정보 등을 이용해 위치를 예측하고, 어긋났다면 다시 조정해주는 등의 작업이 필요하다. 처음에 패킷을 설계할때는 이동 방향, 바라보는 방향 정보만 서로 주고받도록 했더니 플레이어가 움직일수록 위치가 어긋..

C# 서버 2024.05.06

플레이어 입장, 퇴장

실시간 멀티플레이 게임은 서로의 모습이 보이는것이 기본이다.하지만 이 기본부터가 쉽지가 않다.서버와 클라의 오브젝트 정보들을 동기화하기 위해서 서로 오브젝트들의 정보를 관리하는 클래스가 필요하고, 클라에서는 씬마다 존재하는 오브젝트들이 다르기 때문에 서버에서는 이것을 GameRoom이라는 클래스로 클라의 씬에 대응되도록 관리하였다.또 자신의 컨트롤러와 다른 플레이어의 컨트롤러를 분리하는 등 필요한 작업이 많았다. 저번에 이어서 클라에서 씬 전환 완료 패킷을 서버로 보내면 서버에서는 해당 씬에 대응하는 Room에 플레이어를 입장시키고, 입장시키면 Room에서는 클라에 본인에게 자신의 정보(Enter 패킷)를 보낸다.그리고 이미 해당 Room에 있는 플레이어들의 정보를 보내준다(Spawn패킷). 그리고 이미..

C# 서버 2024.05.05