들어가며
이번에도 좀 만들다 보니 머리가 아프네요. 아직 개발 초기인데 벌써 이러면 어떡하나 걱정이 듭니다.
사실 글도 이렇게 12시 돼서 하지 말고 아침, 오후에 올리고 싶은데 맘대로 안되네요
오늘 만들 것
롤백시스템을 완벽하게 버그 없이 만들 것입니다.
기존 롤백 시스템은 모든 MoveCompo에서 각자 인풋을 받으며,
자신이 움직인 정보를 각자 스택에 저장 후, 인풋 받았을 때 그 스택에서 하나씩 꺼내 움직이는 방식이었습니다.
때문에 플레이어가 오브젝트를 민 후, 움직였다가, 롤백을 하면
오브젝트와 플레이어가 따로 롤백하는 문제가 생겼습니다.
그래서 Manager에서 플레이어가 움직일 때마다 움직인 모든 물체와, 그 방향 정보를
저장해서 한꺼번에 같이 관리하는 방식으로 만들 것입니다.
RollBackData
롤백 방향과, 움직일 MoveCompo를 저장하는 Struct입니다.
RollbackManager
변수선언은 우선 이 정도로 해줍니다.
오브젝트의 움직임 쿨타임이 0.12초인데, 롤백 쿨타임을 주지 않으면 오브젝트가 움직이지 않으면서꼬이는 사태가 발생하여 0.13초로 쿨타임을 주었습니다._rollbackStack에 List <RollBackData>가 들어가는데, 그 리스트에 한턴에 움직인 모든 오브젝트의 정보가들어갈 예정입니다.저장할 때 사용할 더미용리스트도 있습니다.
한턴이 끝나고, 다른 한턴이 시작할 때 호출될 함수입니다.
리스트를 스택에 넣고, 다시 초기화해 주는 함수입니다.
이때 초기화를 new가 아닌 Clear로 넣어놨었는데, 이 때문에
초기화가 제대로 되지 않아서 오류를 찾지 못해 고생을 좀 했습니다.
예전에 한번 힙, 스택개념에 데고 정확하게 알고 있다고 생각했는데 아녔습니다.
이번 기회에 다시 한번 제대로 알게 되었습니다.
롤백 데이터를 더미 리스트에 추가하는 함수입니다.
데이터를 받아와 Struct로 세팅해 주고 리스트에 추가해 주는 간단한 코드입니다.
z키, 인풋을 받았을 때 롤백을 실행해 주는 함수입니다.
Stack에서 리스트를 하나 꺼낸 후, foreach로 돌려서 하나하나 움직임을 주는 함수입니다.
완성본
그리하여 완성된 버그가 없?는 롤백 시스템입니다.
친구가 수십 번을 했음에도 버그가 안 났으니 없는 거 아닐까요..?
마치며
밀면서 벽에 닿으면 겹쳐버리는 현상이 생깁니다. 이제부터 이걸 막아볼 차례입니다.
매번 하는 말이지만 아직 해야 할 메인 시스템이 한창이니 열심히 달려야겠습니다.
'개발일기 > VIY' 카테고리의 다른 글
[개발일지] VIY 메인 시스템 개발 #06 (12) | 2024.11.13 |
---|---|
[개발일지]VIY Push 버그 수정 #05 (2) | 2024.10.30 |
[개발일지] VIY Push시스템 만들기 #03 (5) | 2024.10.29 |
[개발일지] VIY 롤백시스템 #02 (3) | 2024.10.26 |
[개발일지] VIY 타일기반 움직임 시스템 #01 (2) | 2024.10.26 |