일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- BFS
- 문자열
- 다익스트라
- 구현
- 백트래킹
- 유니온 파인드
- 자료구조
- 정렬
- 시뮬레이션
- 스택
- Unreal Engine 5
- ue5
- 다이나믹 프로그래밍
- 유니티
- 누적 합
- 브루트포스
- c++
- XR Interaction Toolkit
- 수학
- 그리디 알고리즘
- 알고리즘
- VR
- DFS
- 그래프
- 트리
- 투 포인터
- 재귀
- Team Fortress 2
- 백준
- 우선순위 큐
- Today
- Total
목록2024/05 (22)
1일1알
멀티플레이 게임에서는 모두 같은 화면을 볼 수 있어야 하기 때문에 오브젝트들의 위치를 실시간으로 맞춰주어야 한다. 동기화 작업에는 크게 두가지 경우가 있다.하나는 클라이언트에서 먼저 움직인 뒤 서버에 확인을 받는 것이고다른 방법은 서버에 허락을 받고 움직이는 것이다. 반응성이 중요한 Fps같은 게임들은 주로 첫번째 방식을 사용하고, 비교적 덜 중요한 MMORPG같은 게임들은 주로 두번째 방법을 사용한다고 한다. 나는 두번째 방법을 사용했다. 매 프레임마다 서버와 패킷을 주고받을수는 없기 때문에 위치, 방향 정보 등을 이용해 위치를 예측하고, 어긋났다면 다시 조정해주는 등의 작업이 필요하다. 처음에 패킷을 설계할때는 이동 방향, 바라보는 방향 정보만 서로 주고받도록 했더니 플레이어가 움직일수록 위치가 어긋..
실시간 멀티플레이 게임은 서로의 모습이 보이는것이 기본이다.하지만 이 기본부터가 쉽지가 않다.서버와 클라의 오브젝트 정보들을 동기화하기 위해서 서로 오브젝트들의 정보를 관리하는 클래스가 필요하고, 클라에서는 씬마다 존재하는 오브젝트들이 다르기 때문에 서버에서는 이것을 GameRoom이라는 클래스로 클라의 씬에 대응되도록 관리하였다.또 자신의 컨트롤러와 다른 플레이어의 컨트롤러를 분리하는 등 필요한 작업이 많았다. 저번에 이어서 클라에서 씬 전환 완료 패킷을 서버로 보내면 서버에서는 해당 씬에 대응하는 Room에 플레이어를 입장시키고, 입장시키면 Room에서는 클라에 본인에게 자신의 정보(Enter 패킷)를 보낸다.그리고 이미 해당 Room에 있는 플레이어들의 정보를 보내준다(Spawn패킷). 그리고 이미..
처음 LobbyScene에 입장하면 서버와 연결을 시도한다.연결된 상태에서 이름을 입력하고 Enter Game을 누르면 서버에 접속 요청 패킷을 보낸다.서버에서는 해당 패킷을 받으면 전달된 이름을 받아서 플레이어 정보를 만들어 저장해놓고, 입장하라는 패킷을 클라이언트에 보내준다. 클라이언트는 접속 허락 패킷을 받으면 씬 전환을 하고, 씬 전환이 완료되면 완료되었다는 패킷을 보낸다. 여기까지가 오늘 구현한 내용이고앞으로 할 작업은 서버에서 씬 전환 완료 패킷을 받으면 위에서 저장해놓은 플레이어 정보와 해당 씬에 있는 오브젝트들의 정보를 클라이언트에 보내주고, 클라이언트에서는 해당 정보를 받아서 오브젝트들을 생성하는 것 이다. 서버를 켜지 않았을 경우 서버를 켰을 경우