걍 심심해서 로블록스로 게임 만드는 중인데
유니티로 할때는 걍 전부 로컬 스크립트로
히트박스 콜라이더 터치고나 오브젝트들 탐지하고
개체 찾아서 피격처리하면 됐던걸로 응용해서
만드는데 이게 중간에 서버가 끼어있으니까
어떻게 해야할지 도무지 모르겠다
처음에는 싱글겜마냥 만들다보니
내가 플레이하는 로컬 클라이언트에서는 정상 작동되는데
서버 - 상대방 클라이언트에는 반영 안되길레
어찌 어찌 서버 이벤트 이용하는 법 찾아보고
내가 플레이하는 로컬에서 피격 판정 내리고
서버로 신호 보내서 다른 유저들 로컬 클라이언트에
체력깍고 갱신하는거 까지는 했는데
서버 핑이 있으니까
성대방 클라쪽에는 히트 이펙트에 안 닿았는데
피가 떨어지더라 ㅇㅇ
인터넷 검색, chatGPT 까지 검색해뵜는데
히트 이펙트 생성하면 이걸
서버 클라이언트에 동기화된 케릭터 위치 벡터에 맞게
그대로 갱신하고 거기서 히트 감지를 처리해야하는건가?
제일 좋은건
로컬, 서버 혼합하는데 제일 좋다는데
어떻게 해야하는건지 도저히 감이 안잡힌다...
대충 어떻게 하는건지 갈피라도 잡게 설명해줄 갈럼없냐??
유니티로 할때는 걍 전부 로컬 스크립트로
히트박스 콜라이더 터치고나 오브젝트들 탐지하고
개체 찾아서 피격처리하면 됐던걸로 응용해서
만드는데 이게 중간에 서버가 끼어있으니까
어떻게 해야할지 도무지 모르겠다
처음에는 싱글겜마냥 만들다보니
내가 플레이하는 로컬 클라이언트에서는 정상 작동되는데
서버 - 상대방 클라이언트에는 반영 안되길레
어찌 어찌 서버 이벤트 이용하는 법 찾아보고
내가 플레이하는 로컬에서 피격 판정 내리고
서버로 신호 보내서 다른 유저들 로컬 클라이언트에
체력깍고 갱신하는거 까지는 했는데
서버 핑이 있으니까
성대방 클라쪽에는 히트 이펙트에 안 닿았는데
피가 떨어지더라 ㅇㅇ
인터넷 검색, chatGPT 까지 검색해뵜는데
히트 이펙트 생성하면 이걸
서버 클라이언트에 동기화된 케릭터 위치 벡터에 맞게
그대로 갱신하고 거기서 히트 감지를 처리해야하는건가?
제일 좋은건
로컬, 서버 혼합하는데 제일 좋다는데
어떻게 해야하는건지 도저히 감이 안잡힌다...
대충 어떻게 하는건지 갈피라도 잡게 설명해줄 갈럼없냐??
밀리 액션 형식으로 만들고있는데 투사체 발사해서 피격 처리하는것도 구현해보고 싶음 그냥 적당히 피격 받는 쪽에서 ㅈ같네 피했는데 왜 맞지? 이런 느낌만 안들 정도 수준이면 좋을거같음.
해당 댓글은 삭제되었습니다.
니가 컴터에서 움직임 -> 이동좌표 -> 서버 -> 이동좌표 -> 상대방 클라이언트 반영이렇게 신호가 가야하니까실제 니가 움직이는거랑 서버에서 움직이는건 살짝 차이가 있음나도 여기서 골치 아픈게내가 플레이하는 클라이언트에서는 정상 히트 처리했음.(내 시야에서는 상대장 케릭터에 히트 박스가 닿음)근데 상대방 컴터에서는 히트박스에 안 닿음
이걸 보간처리한다? 뭐 이렇게 말하는거같은데 일단 내 클라이언트에서 히트 박스 닿은거 처리하고 그걸 서버 클라이언트에서 내 움직임과 동기화 되고있는 케릭터쪽에 이펙트를 생성하거 충돌감지하고 똑같이 닿았는디 확인하면 되는건가? 이게 어떻게 머리속으로 정상작동하는건지 도무지 상상할수가 없어서 좋은 솔루션 구하고자 갤에 질문한거 ㅇ
내가 알기로는 마인크래프트 같은 게임을 예시로 들자면, 클라이언트는 기본적으로 자유롭게 움직일 수 있는데, 서버랑 일정 이상 좌표값이 차이나면 그때 강제로 값을 보정함.
음... 이건 무슨 말인지는 알꺼같음 내 케릭터가 (0,0)에서 (10,0)으로 이돌할때 서버에 있는 케릭터는 내 로컬 케릭터보다 항상 x값이 작겠지 그러다 이게 값이 1이상 벌어지면 그때 서버에 케릭터를 강제로 로컬에서 송신해준 좌표로 옮긴다는거같은데
예전에 fps겜 히트처리 관련해서 읽은거 있는데 지금 찾으려니 안보이네 내용은 대충 플레이어가 움직이면 서버에서 보간법으로 플레이어가 n초 후 어느 좌표에 있을지 예측하고 내가 총을 쐈을때 예측된 위치의 적을 맞추면 적 본체로 히트처리한다는 내용이었음 근데 이것도 적이 급격하게 계속 움직이면 예측위치 오차가 커져서 여러 방법들 섞어야 된다고 함 - dc App
일단은 상대클라에서는 닿지않았는데 피가까인거면 서버에서 데이터를 순서대로 안줘서 생기는거 같음. 일단은 서버쪽에서 a클라에서 받은 입력을 순차적으로 "언제"입력했는지까지 연산해서 이 순서대로 b클라에서 반영하도록 해야할 듯.
그외에는 위 댓글이 말한거처럼 어떤 행동이 취소하거나 바꿀 수 없는 부분은 미리 예측해서 닿는 거면 그냥 클라에서 닿았을때 이펙트를 보여주고 실제로 서버상에서는 이미 닿은걸로 취급해서 피깎는 방법도 가능은 할 거 같은데 이게 단순한 fps면 가능한데 회복이나 빠르게 이동해서 닿는 시점을 유예하는 상황을 생각하면 좀 골치아플 듯
로블록스로 그냥 심심풀이로 만들고있는데 니가 해준 말이 정확히 이가 안되네...
일단 그냥 로블록스에 이벤트라는 기능이있어서 1. 본인 클라에서 조작해서 공격하면 내 클라에 있는 에셋 이펙트 복사해서 이펙트 생성 + 케릭터 트랜스폼 offset 트래킹 + 서버 신호전송 2. 서버에서 신호 받으면 서버에 접속해있는 다른 클라이언트 유저한테 다시 신호 재송신 3. 신호받은 유저들 클라이언트에 있는 에셋에서 이펙트 생성하고 내 케릭터 백터값에 offset 해서 트래킹 이렇게 해놓고 피격처리를 내 클라이언트에서 터치감지해서 체력깍는방식으로 했음
나는 아얘 유니티에서 다른 언어로 서버구현하는걸 생각했는데.. 로블록스라.. 일단은 1. 본인클라에서 공격함 1-1. 상대클라에서도 공격이펙트가 보임. 2. 본인클라에서터치감지해서 체력이 깍임 2-1. 상대클라에서 전달받아서 이펙트에 맞아서 체력이 깍여야 하는데 여기서 이펙트에 맞지 않았는데 맞는걸로뜨는거면 이유는 공격하고 이펙트에 맞을 때까지의 시간이
0.2초면 상대클라에서도 이펙트보이고 0.2초뒤에 피격해야하지않고 더 빨리 피격이벤트가 일어난 거거나 이러면 아마 이펙트는 늦게라도 생길거임 아니면 딱히 너가 말을 안해서 그냥 예상하는 건데 상대방이 움직여서 피격이펙트를 피했어도 본인클라에서는 움직임이 반영안된 채 공격해서 맞았다는 걸 전송해버려서 서로 엇갈린 문제인데 이거는 솔직히 해결방법이 너무다양함