나는 재미를 위해 간단한 작은 MOBA를 만들고 있습니다. 나는 모든 것을 싱글 플레이어로 만들고 있었고, "아마도 멀티 플레이어를 추가해야한다"고 깨달았습니다.
나는 전에 네트워킹으로 아무것도 한 적이 없었으므로 Lidgren 을 게임에 통합하는 방법을 배우는 것은 재미 있고 굉장했습니다. 문제는 내가하는 한 주류 게임이 충분히 강력하지 않기 때문에 내가하는 일이 잘못되었다는 것을 거의 알고 있다는 것입니다. 그러나 무엇이 잘못 되었습니까?
내가하고있는 것은 기본적으로 플레이어가 행동을 할 때마다 서버에 "이봐, 방금 했어요"라는 메시지를 보냅니다. 서버와 클라이언트 모두 동일한 시뮬레이션을 실행하고 있습니다. 그런 다음 서버는 다른 모든 클라이언트에게 그 사람이 그 일을했다는 메시지를 보냅니다.
플레이어가 어떤 일을 할 때 대부분의 경우를 제외하고는 클라이언트가 멋지다고 생각하고 스스로 진행합니다. 따라서 마우스 오른쪽 버튼을 클릭하여 해당 위치로 이동하면 해당 플레이어의 클라이언트가 그 사람을 거기로 이동하기 시작한 다음 서버에 메시지를 보냅니다.
그래서 기본적으로:
- 1 번 선수가 주문을 시전하여 6 초 동안 100 % 더 빠르게 움직입니다.
- Player 1의 로컬 클라이언트는 해당 버프를 Unit 객체에 추가합니다
- 플레이어 1의 클라이언트는 "이 주문을 던졌습니다."라는 메시지를 서버에 보냅니다.
- 서버는 자신이 그 주문을 발동 할 수있는 충분한 마나를 가지고 있는지 확인하고, 그렇다면 해당 버프를 해당 서버의 해당 유닛 오브젝트 사본에 추가합니다
- 서버는 다른 모든 클라이언트에게 "이 사람은이 주문을 던졌습니다"라는 메시지를 보냅니다.
- 다른 모든 클라이언트는 메시지를 수신하고 "ah okay cool"으로 가서 해당 버프를 해당 플레이어의 로컬 유닛 오브젝트에 추가합니다.
나는 큰 게임이 멀티 플레이어를 어떻게하는지 알기 위해 물건을 훑어 보았고,이 물건에 손을 대기 시작한 누군가에게는 혼란 스럽지만 소스 엔진 은 모든 변경 사항이 포함 된 패킷을 모든 진드기? 다시 말하지만,이 물건에 완전히 새로운 것이지만 실제로 그 많은 데이터를 자주 밀어 넣을 수 있습니까?
이것이 조금이라도 유감 스럽지만 미안하지만, 기본적으로 더 간단한 시스템이 왜 옳은 방법이 아닌지 궁금해하고 있습니다.