일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 스택
- 누적 합
- 알고리즘
- 트리
- 수학
- 구현
- BFS
- 재귀
- 시뮬레이션
- VR
- 다이나믹 프로그래밍
- 브루트포스
- 문자열
- 유니티
- Unreal Engine 5
- 그리디 알고리즘
- 정렬
- ue5
- DFS
- 그래프
- 백준
- 다익스트라
- Team Fortress 2
- c++
- XR Interaction Toolkit
- 우선순위 큐
- 자료구조
- 유니온 파인드
- 백트래킹
- 투 포인터
- Today
- Total
1일1알
이동 동기화 본문
멀티플레이 게임에서는 모두 같은 화면을 볼 수 있어야 하기 때문에 오브젝트들의 위치를 실시간으로 맞춰주어야 한다.
동기화 작업에는 크게 두가지 경우가 있다.
하나는 클라이언트에서 먼저 움직인 뒤 서버에 확인을 받는 것이고
다른 방법은 서버에 허락을 받고 움직이는 것이다.
반응성이 중요한 Fps같은 게임들은 주로 첫번째 방식을 사용하고, 비교적 덜 중요한 MMORPG같은 게임들은 주로 두번째 방법을 사용한다고 한다.
나는 두번째 방법을 사용했다.
매 프레임마다 서버와 패킷을 주고받을수는 없기 때문에 위치, 방향 정보 등을 이용해 위치를 예측하고, 어긋났다면 다시 조정해주는 등의 작업이 필요하다.
처음에 패킷을 설계할때는 이동 방향, 바라보는 방향 정보만 서로 주고받도록 했더니 플레이어가 움직일수록 위치가 어긋나는 현상이 발행했다.
예를들어 클라이언트에서 A방향을 패킷으로 전송한 직후에 방향을 B로 바꿨다면 다음 패킷을 보내기 전까지 서버에서는 A방향을 향하고 있지만 클라이언트에서는 B방향을 바라보고 있다. 이런 상황이 계속 누적되다보면 위치가 계속 어긋나게 된다.
그래서 이방법은 안되겠다 하고 패킷 설계를 다시했다.
클라이언트에서는 이동 방향, 바라보는 방향, 위치 정보가 포함된 패킷을 보낸다.
서버에서는 이 패킷을 받아서 클라 위치, 이동 방향, 이전 패킷을 받은 시간 정보를 이용해서 다음 클라이언트의 위치를 예측하고 서버에 있는 플레이어의 위치 정보를 예측한 위치값으로 변경한다.
그리고 예측한 위치값을 해당 플레이어가 속해있는 Room의 모든 플레이어에게 보내준다.
서버에서는 Id, 예측한 위치, 바라보는 방향 정보가 포함된 패킷을 보내준다.
패킷을 받은 클라이언트에서는 현재 위치와 패킷으로 받은 위치 정보를 이용해서 이동할 방향을 설정하고 움직여준다.
'유니티 > C# 서버 연동 유니티 포트폴리오' 카테고리의 다른 글
캐릭터 애니메이션, 콤보공격, 스킬, 몬스터 피격모션 (0) | 2024.05.09 |
---|---|
몬스터 AI, 스탯 (0) | 2024.05.08 |
플레이어 입장, 퇴장 (0) | 2024.05.05 |
게임 입장 (0) | 2024.05.04 |
서버 - Unity클라 통신 테스트 (0) | 2024.05.03 |