버그 해결을 위한 모든 질문을 던져
0 votes
256 views
포톤 서버를 이용해서 물리 기반의 3D 레이싱 게임을 만들고있습니다. (조작 없는 감상형 레이싱이기 때문에 각 개체는 끝없이 움직입니다.)

근데 핸드폰 단말 별로 동기화가 너무 안맞아서 문제가 발생했습니다.

현재는 호스트와 단말 기준으로 일정 거리 이상 차이가 나면 텔레포트 시켜주는 방식으로 설정해놓았는데, 이렇게하니까 툭툭 끊기는 현상이 너무 빈번하게 발생합니다.. 텔레포트 시켜주는 거리를 늘리면 너무 많은 거리를 한번에 텔레포트해서 이상하구요,,

사이트 뒤져보고 호스트에서만 처리하고 결과를 각 단말로 뿌려주는 방식으로도 해봤는데, 이 방법은 정보를 못받아온 단말은 아예 멈춰버리더라구요..

 

혹시 조금이라도 동기화를 더 맞출 수 있는 방법이나, 부자연스러워 보이는 텔레포트 현상을 개선할 수 있는 다른 방법이 있을까요 ?

부탁드리겠습니다..
asked (2 point)
수정됨 , 256 views
보통 근소한 차이는 보간으로 처리하지 않나요?

4 answers

0 votes

네트워크는 잘 모르지만.. 추측항법 같은거 쓰면 되지 않을까싶은데요..??

https://blog.daum.net/pg365/112

answered (215 point)
답변 감사합니다 ! 하지만 추측항법도 현재 위치랑 안맞으면 맞춰줘야해서 텔레포트하는 현상이 지속될것같아요 ㅠㅠ 동기화를 최대한 맞추거나, 안맞아도 텔레포트가 아닌 다른 방법으로 부드럽게 동기화를 맞춰주는 방식이 필요할것같습니다..ㅠㅠ  답변 주셨는데 죄송합니다 ㅠㅠ
0 votes
PUN을 쓰고 계시겠지만, 이 내용 살펴보시면 좋은 키워드를 구하실 수 있을 것입니다.

https://doc.photonengine.com/ko-KR/bolt/current/in-depth/interpolation-vs-extrapolation

어디선가 오버워치에서 쓰인 방법에 대해 설명된 글을 본적이 있는데 못 찾겠네요.
answered (54 point)
참고해보겠습니다 답변 감사합니다 !
+2 votes
두 지점을 부드럽게 이동하게 하려면 데드레커닝(추측항법)에 곡선 알고리즘을 같이 써야 합니다.

베지어 곡선+데드 레커닝을 조합하면 순간이동이 아닌 부드럽게 움직이는 모습을 만들어낼 수 있죠.

자동차의 이전 위치와 현재 위치까지 베지어 곡선을 통해 부드러운 가상의 경로를 만들고 그 사이를 짧은 시간동안 이동하게 하는 겁니다.

베지어 곡선의 각 점들을 어떻게 배치하냐가 중요한데 자동차의 현재 속도를 기반으로 각 점의 위치를 계산하면 완만한 곡선 경로를 만들 수 있습니다.

 

만약 트랙이 있고 그 위에서만 움직여야 한다면 조금 더 어려워 지는데요,

각 클라이언트에 맵의 경로 정보가 존재할 테니

각 경로 좌표들을 부드럽게 통과해 목표한 좌표까지 갈 수 있도록 알고리즘을 구성해야 합니다.

그렇지 않으면 트랙을 벗어나서 중간에 장애물을 가로질러 가게 되는 현상이 발생하게 되죠.

 

그리고 단순히 감상만 하는 것이라면 이미 언급하셨지만

실시간 동기화를 할 필요 없이 초반에 정보를 다 받아오고

그걸 토대로 각 단말기에서 시뮬레이션 하는 형태가 좋지 않을까 합니다.

정보를 못 받아온다는 것은 실시간이어도 마찬가지 상황이기 때문에 이래나 저래나 문제되는건 똑같지 않을까요?

저도 예전에 비슷한 게임을 만든적이 있었는데 저런식으로 초반에 결과정보까지 다 받아오고 각 클라에서 돌렸습니다.

레이싱팀의 감독이 되어서 매니징하는 게임이었는데 조작이 필요 없이 결과만 감상하는 형태였기 때문에

중간에 각종 연출도 넣을 수 있고 그랬습니다.
answered (132 point)
수정됨
와.. 댓글 감사합니다 ! 한번 시도해보겠습니다 정말 감사합니다.
0 votes
호스트와 단말은

플레이 영상으로 정확히 실시간 동기화될 필요는 없으니, (조작없는 감상의 경우)

호스트가 먼저 시작하고,

단말은 호스트가 보낸 정보를

어느정도 필요한만큼 쌓아둔뒤 시작하는 것도

하나의 방법일듯 합니다,

 

이미 그렇게 하고 있으실수도 있겠지만 ㅎㅎ,,,

일단 생각이 나서, 댓글달아보았습니다
answered (28 point)
네 ㅠㅠ 이렇게 하고있는데 해결이 안되네요 .. 답변 감사합니다 !

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

507 질문
654 answers
643 댓글
118,130 users