• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

3D fps 제작 중 질문이 있습니다.

24.03.26 17:27 작성 조회수 106

0

모든 계산은 서버에서 하고

실제로 클라이언트는 보여주는 역할만 한다고 배웠습니다.

여기서 궁금한점이 있는데

유니티는 collider를 만들어서 충돌처리를 하는데

서버는 따로 유니티를 통해 키는것이 아니라서 collider게산이 쉽지 않을 것 같다는 생각이 들었습니다.

 

총의 충돌판정을 검사할 때 총알의 현재위치와 총알의 이전위치를 이용해서 선을 만든 후 충돌처리를 하려고 하는데

 

여기서 플레이어의 머리 몸통 다리 팔을 각각 collider로 나누고싶다면

 

  1. 직접 서버에서 머리 몸통 팔 다리 위치와 collider를 구상하고 collider를 직접 구현하고.. Raycast를 직접 구현해서 사용한다

  2. 충돌 계산 및 유니티 기능 이용을 목적으로 하는 클라이언트를 따로 제작한 후 각 위치에 collider를 직접 생산하고 유니티에 있는 기능을 이용한다.

  3. 플레이어의 모든 위치는 동기화 되어있을테니 총알을 쏜 당사자의 컴퓨터에서 충돌판단을 한 후 서버로 충돌여부를 전달한다

보통 어떤 방식이 맞는건가요? 흔히 실무자들이 말하는 모든 계산을 서버에서 한다는 말이 당장 개개인의 클라이언트에선 collider조차 만들지 않는다는 느낌인건가요?

 


 

그리고 만약 점프를 한다면

점프에서 계산마다 올라가고 내려가는걸 서버에서 직접 계산한 후 (9.8중력, 이동속도 등..) 각 플레이어에 동기화시켜주는게 맞는걸까요?

아니면 각 클라이언트의 Rigidbody를 이용해서 계산된 높이값을 서버로 전달하는게 맞는걸까요?

 

로컬상 이동 - 서버로 전달 - 동기화

로컬상 이동명령 - 서버에서 이동계산 - 동기화 및 블랜딩

 

이 강의에선 2번케이스 같은데 3d게임은 1번이 더 나은 것 같기도 하고 해서 질문드립니다.

답변 1

답변을 작성해보세요.

0

그냥 간단히 FPS 게임은 MMORPG와 개념이 다릅니다.
서버에서도 나름 물리적인 연산을 다 할 수 있게 준비가 되어 있어야 하고.
다만 그렇다고 클라처럼 아주 100% 세밀하게 연산하는 것은 힘들기 때문에
클라 판정을 먼저 하고 서버에서 러프하게 체크를 하거나
서버에서도 꽤 틱을 자주 (ex. 20프레임) 돌면서 체크해야 합니다.
당연히 FPS에선 클라에서도 충돌체를 사용해야 합니다.