버그 해결을 위한 모든 질문을 던져
0 votes
60 views
안녕하세요

실시간 대전 게임 제작을 공부해보는 중에 질문드립니다

클래시 로얄을 모방해보고 있는데요(1:1 대전)

 

일단 유저 간 캐릭터의 위치를 동기화를 하는 방법으로 프레임 동기화 방식을 시도하고 있습니다

(프레임 수를 카운트해서 같은 프레임카운트일 때 완전히 같은 연산을 하도록 하는 방식)

일부러 유니티 내장 네트워크 동기화 기능을 쓰지 않았습니다(network transform? 등등)

 

그렇게 시도 중인데 유니티의 transform.position / transform.localposition 값이 float이다 보니 구동 플랫폼에 따라 계산값이 조금씩 차이가 납니다

같은 프레임에서

1.00000001 와 0.9999999 이런 식으로 달라지는 경우가 생겨서

점점 위치값이 차이가 나서 대전 결과도 달라집니다.

길찾기 알고리즘을 잘못 짰나도 생각해봤지만 NaviMesh를 적용해 봐도 nextPosition 값 자체가 다르더군요..

 

제가 동기화 코드를 잘못 짰나도 의심해봤지만 유니티 에디터 <->유니티 에디터 간에는 서로 움직임과 게임 결과가 동일합니다

 

유니티 에디터 <-> 안드로이드/아이폰 간에만 값이 달라집니다.

동기화 시 이런 부분을 어떻게 해결하시는지 조언해주실수 있을까요?
asked (3 point)
수정됨 , 60 views

1 답변

+1 vote
매우 정상입니다.

부동소수점은 정밀도 오차를 가지고 있다는 건 아실겁니다.

CPU, 혹은 컴파일러에 따라서 오차 이하의 값을 반올림하거나 버림을 하거나 하는 차이에 의해서 이런 현상이 일어난다고 합니다.

업체마다 기준이 제각각인듯...
answered (132 point)

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

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

424 질문
564 answers
572 댓글
38,391 users