게임 프로그래머의 만담, 게임코디 2nd
0 투표
1.5k views 만담 (5p) , 1.5k views
리플레이 기록을 남길때는 타임스케일을 15정도로 올려서 빠르게 기록하고

리플레이를 플레이할때 타임스케일을 1로하여 플레이하고있습니다.

 

기록되는 것들은 이동할 목적지와 해당 목적지가 찍히게된 시간입니다.

이렇게 기록되야하는 정보들을 발생한 시간과 함께 저장한뒤 불러오는 방식입니다.

그냥 이동만하는 기록은 딱히 문제없이 잘 작동하는데 리플레이로 스킬을 불러오면 그 때부터 조금씩 어긋나기 시작하더군요.

 

여기서 가장 핵심으로 드리고 싶은 질문은

리플레이 기록을 이벤트가 발생하는 순간 시간과 값들을 저장하는데 이 방식이 아닌 다른방식을 쓰는게 옳은걸까요?

다른 방식이 있다면 어떤 방식이 있는지 궁금합니다.

만담에 대한 답글을 하려면 로그인 또는 가입해야합니다.

3 answers

0 투표
유니티 피직스는 결정론적 시스템이 아니기 때문에 오차가 생길겁니다.
답글 (2.1kp)
0 투표
리플레이 기록을 남길때 타임 스케일 15로 올려서 빠르게 기록 한다는게?? 플레이 중간에 기록을 남기는게 아닌가요?

보통은 이벤트로 충분한데 조금씩 어긋난다는건 delta타임이 제대로 계산 안되고 있거나 이벤트 중에서 누락된 값이 있는게 아닌가 의심됩니다.
답글 (110p)
+1 vote

네 다른 방식을 쓰셔야합니다. 

아랫분이 말씀하신것을 좀더 풀어서 설명하자면 

시간값을 저장하신 순간의 계산 값과

리플레이 하는 순간의 계산값이 다르기때문이죠.

 

조금 더 설명을 자세히 드리자면 

플레이어 이동중 멈추는 지점이 Timedelta 값이 1초일때 체크하는 로직을 짜게 되었을떄 

Timedelta값이 정말 1.00000000 으로 정확히 그자리에 멈추게 될까요?  

이미 답을 아시는것처럼 "아니오" 입니다. 

사람이 눈치 채지 못할만큼 아주 작은만큼 다르겠죠. 

이것들이 누적되면 사람눈에 보이게 됩니다. 

 

고정소수점을 가지고 게임을 만드셔야 하는 방법이 있습니다. 

조금 더 자세한 내용을 알아보시려면 

Deterministic algorithm 을 찾아보시면 좋을듯 합니다. 

 

더 좋을 리플레이 구현 방법을 아시는분은 저도 좀 알려주시면 되겠습니다. 

 

답글 (168p)
수정됨

게임 프로그래머의 만담 커뮤니티, 게임코디 입니다

온종일 코드와 씨름하는 우리들의 외로움을 삭이고자 합니다