이동 기능 구현 이렇게 하려는데 이거 맞음?
1.client : 키 입력 -> 소켓으로 키 입력 전송
2.server : 키 입력 정보 받음 -> 해당 id를 가진 player의 좌표 수정 -> broadcast로 모두에게 해당 플레이어의 좌표가 수정되었다는 정보 전송
3.client : 수정된 플레이어의 좌표 반영하여 모든 플레이어 화면 수정
이렇게 하는거 맞음? 그런데 이러면 유저수 한명한명 늘어날 때마다 서버 과부하 엄청날거 같은데 최적화 시키는 다른 방법 없음??
찾아보니까 이동 할 때 클라이언트가 전송 후 서버에서 응답오기 전에 클라이언트에서 미리 위치를 바꾸는 방법도 있다는데 그거 말고 다른 방법 있나 궁금해서 질문 올려봄..
그러면 키 입력할때마다 서버가 검증 과정을 거쳐야하니 통신 횟수와 연산량이 늘어나지 않을까? 차라리 이렇게 해라, 일정 시간마다 클라이언트랑 서버랑 플레이어 위치를 대조해서 맞으면 통과 틀리면 서버 데이터로 복구. 핵이나 응답 시간 문제가 아니면 왠만해선 통과될듯.
아 키 입력할때 마다 서버 데이터만 변경하고, 클라이언트로는 전송 안해주고, 0.1초 같은 짧은 시간마다 모든 클라이언트들에게 모든 사람들의 위치를 전송해서 올바르게 초기화해라. 이 말 맞음?? 그렇게 하면 훨씬 줄어들겠구나 ㄹㅇ ㄳㄳ
아니, 그 말도 비슷한데 좀 다름 내 말은 서버가 굳이 키 입력을 처리해야하는가? 임. 이건 클라이언트도 할 수 있잖아. 그리고 클라이언트 하나만 잘못되었다면 올바른 클라이언트의 데이터를 정정해야할 필요가 없지. 더 자세한 건 인디 게임 갤러리 같은데 가서 물어봐라.
여기서도 설명할 수는 있지만 내가 바빠서 안됨.
ㄳㄳ
그래서 범위로 나눠서 해당 범위 내에 플레이어 정보만 받게함
또는 키입력 때가 아닌 맵을 격자로 나눠서 격자 이동때만 정보전송
아 사실 키입력으로 하려고 했던 이유가 의도적으로 잘못된 좌표 전송했을 때 처리 못할까봐 그런건데 격자로 하면 인접하지 않은 곳으로 이동하면 예외처리 하면 되는구나 그리고 범위 나눠서 눈에 보이는 정보만 받게 하는 것도 생각 못했었는데 ㄳㄳ
그런데 그렇게 하면 다른 사람 입장에서는 격자 이동할 때만 이동하는 걸로 보이는거죠?
격자 크기에 다르지 않을까?
또는 출발 신호만 서버에 보내고 클라, 서버에서 각자 위치 계산하면서 싱크 맞추기?
감사합니당
mmorpg류인거같은데 키입력은 잘 안받고 보통 일정 시간당 실시간 좌표만 받음. 그리고 범위 밖일수록 업데이트 주기를 늘리고.
감사합니당 그런식으로 해봐야겠네오 ㄳㄱㄳ
스타는 그렇게 동작할걸? 현대 컴퓨터 존나 빠르다
키보드 입력값대기해서 이동처리히면 됨
client authoritative vs server authoritative game
https://docs-multiplayer.unity3d.com/netcode/current/learn/dealing-with-latency/
https://www.gabrielgambetta.com/client-server-game-architecture.html
고마워용