모든 블록은 단단해요 – 아닐 때만 빼고요
우리 클라이언트 메셔에는 철칙이 있어요. 공기가 아닌 블록은 전부 렌더링되고 충돌도 있다는 거예요. 끝. 이렇게 단순화한 덕분에 메시 생성이 빠르고 코드도 간단해요. 바로 이 규칙을 깨고 싶어 하는 기능이 나타나기 전까지는요.
에너지 문. 에너지 울타리에 문을 달고 싶었어요. 플레이어와 친근한 NPC는 그냥 걸어서 지나갈 수 있지만, 야생 동물은 지나갈 수 없는 반짝이는 막이에요. 눈에는 보이지만 어떤 상대에게는 벽이 아닌 블록이죠. 우리 구조가 전혀 예상하지 못한 것이었어요.
해결책은 두 부분이에요. 클라이언트에서는 메셔에 처음으로 의도적인 예외를 뒀어요. 문 블록은 렌더링은 되지만 충돌 메시에서는 빠져서, 플레이어는 그냥 걸어서 지나가요. 서버에서는 진짜 로직이 돌아가요. 생물의 이동 시스템이 걸음마다 에너지 장벽이 길을 막고 있는지 확인해요. 야생 동물과 적은 돌아서고, 동료와 플레이어는 지나가요. 이 확인은 야생 동물, 동료, 행성 적 이렇게 세 이동 시스템 모두에 넣어야 했어요. 그렇지 않으면 한 종류의 생물만 문을 “몰랐을” 테니까요.
솔직한 각주: 날아다니는 생물은 울타리 위를 그냥 미끄러지듯 넘어가요. 버그가 아니라 문서에 적어 둔 한계예요. 울타리는 원래 나는 것을 막지 못하니까요. 이런 의도적인 빈틈은 숨기기보다 적어 두는 쪽이 좋아요.
남는 교훈은 이거예요. “공기가 아닌 건 전부 단단하다” 같은 구조 규칙은 단순하기 때문에 값져요. 다만 그 유일한 예외가 어디에 있는지, 그리고 왜 거기에 있는지는 알고 있어야 해요.
댓글