웹 물리 엔진 Matter.js로 구현한 머지 퍼즐의 과학
최근 웹 브라우저 게임의 기술적 수준이 급격히 향상되면서, 별도의 설치 없이도 고성능 물리 연산이 가능해졌습니다. Merge Army는 오픈소스 2D 물리 엔진인 **Matter.js**를 사용하여 현실적인 움직임을 구현했습니다. 단순한 '매칭'을 넘어 왜 '물리'가 중요한지, 그 기술적 배경을 살펴봅니다.
1. 강체 역학(Rigid Body Dynamics)의 적용
Merge Army의 모든 유닛은 변형되지 않는 고체, 즉 '강체'로 정의됩니다. 유닛이 충돌할 때 모양이 찌그러지지 않고 튕겨 나가는 것은 엔진이 매 프레임 물체의 속도, 위치, 회전각을 실시간으로 계산하기 때문입니다. 이러한 강체 역학은 플레이어에게 물체가 실제로 그 자리에 존재한다는 강력한 실재감을 제공합니다.
2. 충돌 감지와 해결 (Collision Detection)
두 유닛이 닿는 순간, 엔진은 이를 감지하고 서로 겹치지 않도록 밀어내는 '해결(Resolution)' 과정을 거칩니다. 이때 Merge Army만의 특수한 로직이 개입합니다. 충돌한 두 유닛의 ID(계급)가 같다면, 엔진은 두 유닛을 제거하고 그 중심점에 상위 계급 유닛을 생성합니다. 이 과정이 0.016초(60fps) 이내에 이루어져야 끊김 없는 플레이가 가능합니다.
3. 중력과 마찰, 그리고 타격감
게임의 재미는 '손맛'에서 옵니다. Matter.js는 중력 가속도와 유닛 표면의 마찰력을 조절할 수 있게 해줍니다. 유닛들이 서로 비비며 틈새를 파고들거나, 무거운 유닛이 떨어질 때 주변 유닛들이 묵직하게 튕겨 나가는 시각적 피드백은 정교하게 조정된 물리 파라미터 덕분입니다. 이는 정적인 퍼즐 게임에서는 느낄 수 없는 역동성을 부여합니다.
4. 성능 최적화의 난제
화면에 유닛이 50개 이상 쌓이면 브라우저의 연산 부담이 커집니다. Merge Army는 이를 해결하기 위해 'Sleeping' 기능을 활용합니다. 움직임이 없는 유닛은 물리 연산 대상에서 제외했다가, 다른 유닛과 충돌할 때만 다시 활성화하는 방식입니다. 덕분에 모바일 브라우저에서도 쾌적한 플레이가 유지됩니다.