2024. 4. 19. 19:23ㆍ내일배움캠프
4월 19일
어제와 오늘 통틀어서 버그를 고치는데 힘을썼다.
오늘은 버그를 픽스하는 과정을 TIL에 담아보려한다.
버그픽스
기존에 만든 게임에서의 맵은 4개의 타일맵을 배치해놓고 플레이어가 가는 방향으로 맵을 계속 넘겨주어
맵이 무한하게 펼쳐지도록 만들어 두고 사용하고 있었다.
하지만 보는것처럼 시작하자마자 정확하게 대각선으로 달리게되면 재배치가 정상적으로 작동하지 않아서
맵이 깨져보이는 버그가 발생하게된다.
맵을 재배치해주는 로직을 살펴보자
일단 타일맵 자기 자신의 위치를 myPos로 player 오브젝트의 포지션을 playerPos로 받아
둘을 빼줘서 X와 Y의 절대값을 받고있다.
그리고 dirX , dirY는 플레이어가 어느 방향으로 나아간건지 알아야한다 그래야 위든 아래든 왼쪽이던 오른쪽이든
맵을 재배치해줄수가 있기 때문이다
그렇게 필요한 변수를 만들어준뒤 diffX diffY 둘중에 어느 값이 더 큰지 확인후 X가 크다면 현재 플레이어가 나아가고있는 X 방향으로 Y가 크다면 Y방향으로 맵을 재배치 해주고있는데
이 로직은 플레이어가 시작부터 대각선으로 나아간다면
요모양 요꼴로 맵이 산산조각이 나버리게 된다.
혹시나 하는 마음에 else문을 적어봐도 으으음 오히려 더 예상치도 못한 곳에서 맵이 산산조각이 나버리는 문제가 발생해버렸다.
역시 로직을 전부 갈아 엎는게 좋겠다고 생각하고 게임 맵도 다시 만들기로 결심했다.
기존의 게임맵은 4개의 타일맵으로 왔다갔다 했다면 이번에는 9개의 타일맵으로 플레이어가 가는 방향쪽으로 타일맵을 움직여줄 생각이다.
물론 플레이어가 타일 바깥으로 나갈때 어느 방향으로 나갔는지도 각도를 이용해서 계산을 해주려고 한다.
일단 9개인 타일맵을 2차원 배열로 만들어주자.
그리고 타일들은 각자 자신이 2차원 배열의 0,0에 있는 타일인지 0,1에 있는 타일인지를 curIndex_I와 J에 담아준다.
tileIndex의 타일오브젝트의 이름을 받아서 i에는 앞글자 j에는 뒷글자를 담아두면 쉽게 자기 자신이 어느 타일인지 알 수 있다.
그리고 플레이어가 타일맵 바깥으로 나갔을때 플레이어가 타일맵의 어느 각도로 나갔는지에 대한 각도를 구해주도록하자
player의 좌표와 타일자신의 좌표를 빼면 방향이 나오고 그 방향을 가지고 angle을 구해주자
그리고 y축과 방향의 외적의 z축으로 부호를 결정하고 최종적으로 angle에 곱해주어 각도를 구해주자
이렇게 각도까지 구해주면 그 다음부터는 노가다이다.
이런식으로 위쪽으로 왼쪽으로 나갔을때의 각도들을 조건으로 주고 아래와 오른쪽도 마찬가지
안쪽에는 이렇게 재배치 로직을 만들어주자 처음 조건으로는 배열의 index범위를 벗어나지 않게 하기위한 예외처리를 해주고 안쪽 반복문에는 혹시라도 이미 옮긴 타일을 한번 더 옮기지 않도록 거리차이가 각 조건에 맞는 거리일때만 재배치 해도록 만들어주자
해당 로직대로라면 1,1위치한 타일에서 오른쪽인 1,2의 타일로 가려고한다면?
이렇게 왼쪽에 있는 부분을 오른쪽으로 보내주고?
위쪽으로 간다면 2,0 2,1 2,2 부분을 위쪽으로 보내줄것이다.
바로 대각선으로 달린다고 하더라도 결국 트리거 충돌을 벗어날때 1,1 뿐만아니라 0,1 1,2 부분에서도 해당 로직을 수행해주기 때문에 문제 없이 맵이 잘 재배치 된다.
이틀에 걸친 고민과 수많은 시행착오를 겪어 결국 고쳐냈다
기존의 로직에서 뭔가 해보고 싶었는데 생각대로 되지않아 다른 로직으로 교체한것이 좋은 선택이었던거 같다
4월 19일 TIL은 여기서 마치도록 하겠다
'내일배움캠프' 카테고리의 다른 글
240423-TIL (0) | 2024.04.23 |
---|---|
240422-TIL (0) | 2024.04.22 |
240417-TIL (0) | 2024.04.17 |
240416-TIL (0) | 2024.04.16 |
240415-TIL (0) | 2024.04.15 |