나선형 타워에서는 "떨어졌다"를 판정하기가 의외로 어렵습니다
로블록스에 ASMR 컨셉 오비(장애물 점프) 게임을 만들었습니다. 발판마다 소리가 다른 게 컨셉이에요.
뽁뽁이는 톡, 키캡은 딸깍, 슬라임은 밟으면 느려지고, 크런치 슬라임은 금이 가다 바사삭 부서집니다. 같은 발판을 밟아도 음높이가 조금씩 흔들리게 해서 반복해도 물리지 않게 했고요.
만들면서 예상 못 한 데서 막혔는데, 추락 판정이었습니다.
1. 보통 추락 판정은 아주 간단합니다
일반적인 타워 게임에서 “떨어졌다”를 판정하는 건 쉽습니다. 대개 이렇게 하죠.
플레이어 Y좌표가 어떤 값보다 낮아지면 → 추락 → 체크포인트에서 부활
아래가 허공이거나 용암이니까, 높이 하나만 보면 됩니다.
2. 그런데 나선형에서는 아래가 허공이 아닙니다
이 게임은 타워를 나선형으로 빙 돌면서 올라갑니다. 문제가 여기서 생겼어요.
발판에서 떨어지면 어떻게 될까요? 허공으로 안 떨어집니다. 한 바퀴 아래를 도는 자기가 아까 지나온 트랙 위에 착지합니다.
그래서 이런 상황이 벌어졌어요.
- 플레이어가 8스테이지에서 실수해서 떨어짐
- 5스테이지쯤의 발판 위에 무사히 착지
- 게임은 “추락”으로 인식 못 함 — 멀쩡히 발판 위에 서 있으니까
- 플레이어는 8스테이지에서 다시 시작하는 대신, 5스테이지부터 다시 올라와야 함
버그로 죽지도 않고, 에러도 안 나고, 그냥 조용히 억울한 상황이 만들어집니다. 게다가 높이 기준선을 낮춰도 해결이 안 돼요. 타워를 도는 구조라 어떤 층의 발판 높이가 다른 층의 “추락선”과 겹치거든요.
3. 높이가 아니라 “어디서 왔는가”를 봐야 했습니다
결국 판정 기준을 바꿨습니다. 절대 높이 대신 현재 진행 중인 스테이지를 기준으로 판단하도록요. 지금 8스테이지를 하고 있는데 그보다 충분히 아래로 내려갔다면, 발판 위에 서 있든 말든 추락으로 처리하고 체크포인트로 되돌립니다.
핵심은 **“바닥에 닿았는가”가 아니라 “진행 상태에서 벗어났는가”**로 질문을 바꾼 거예요.
💡 만들면서 배운 것 & 주의할 점
- 팁: 난이도는 한 가지 축만 건드리면 티가 잘 안 납니다. 저는 12스테이지에 걸쳐 세 가지를 동시에 조절했어요. 발판 크기를 8에서 4로 줄이고, 간격을 5에서 8로 벌리고, 부서지는 발판의 유예 시간을 1.0초에서 0.45초로 줄였습니다. 하나씩 보면 미묘한데 합치면 확실히 어려워집니다.
- 주의할 점: 흔한 로직을 가져다 쓸 때는 그 로직이 전제하는 지형을 확인하세요. “Y좌표로 추락 판정”은 아래가 비어 있다는 걸 전제합니다. 나선형·다층 구조·실내처럼 아래에 뭔가 있는 지형에서는 그 전제가 깨져요. 저는 이걸 몰라서 “왜 가끔 부활이 안 되지”를 한참 헤맸습니다.
정리
이 버그가 기억에 남는 이유는 코드가 틀린 게 아니었기 때문입니다. 추락 판정 코드 자체는 교과서적으로 맞았어요.
다만 그 코드가 가정한 지형과 제가 만든 지형이 달랐던 거죠. 게임 로직 버그 중엔 이런 종류가 꽤 있는 것 같습니다.
태그: #로블록스, #Roblox, #Luau, #게임개발, #오비게임, #ASMR, #버그수정, #클로드코드, #Rojo, #인디게임