Projects

픽셀 3D 웹 게임

Castmorrow

마우스로 던지고 휠로 감는 픽셀 3D 낚시 게임

  • 포인터 제스처 기반 캐스팅·챔질·릴 조작
  • 배의 항해·충돌과 출조 저장·복원
  • Three.js·GLSL 픽셀 렌더링과 모바일 터치 대응
등대가 보이는 픽셀 바다에서 작은 배를 타고 낚시하는 Castmorrow
담당 역할
게임 개발
개발 인원
1명
개발 기간
2026.10.23 ~ 2026.10.26
담당 작업
낚시·항해 로직, 3D 장면과 셰이더, UI·사운드, 저장과 모바일 입력을 구현했습니다.
링크
castmorrow.yonghun.me/GitHub · 비공개 저장소
사용 기술
JavaScriptThree.jsWebGLGLSLViteWeb Audio API

프로젝트 소개

배를 타고 여울·암초·먼바다를 탐험하며 물고기 도감을 채우는 웹 낚시 게임입니다. 항구에서 시간과 채비를 고르고 출조해 물고기를 낚습니다. 조과는 도감과 추억 수첩에 기록되며 배를 꾸밀 수 있습니다.

주요 작업

  1. 01

    낚시 조작과 물고기 힘겨루기

    마우스를 낚싯대처럼 움직여 캐스팅하고 챔질하도록 구현했습니다. 물고기가 걸린 뒤에는 릴을 감으며 텐션을 조절합니다.

    • 마우스를 누른 시간, 위로 휘두른 속도와 놓는 위치를 조합해 캐스팅을 처리하고, 물 표면을 기준으로 거리와 방향을 계산했습니다.
    • 어종별로 짧은 저항, 바닥 버티기, 연속 돌진과 탈진 패턴을 구성했습니다.
    • 휠로 릴을 감고 물고기의 저항 반대 방향으로 낚싯대를 움직여 텐션을 낮추도록 구현했습니다.
  2. 02

    항해 상태와 저장·복원

    항구 선택부터 항해, 낚시와 출조 종료까지 게임 상태를 나누고 상태에 맞게 입력을 처리했습니다.

    • 월드 좌표와 배의 속도·관성, 해안·암초 충돌, 해역 발견과 빠른 이동을 구현했습니다. 정박 중에는 이동 입력과 관성을 차단했습니다.
    • 출조 기록, 도감, 배 꾸미기와 조작 감도를 localStorage에 저장하고, 복원할 때 좌표·어종 ID·결과 배열·캐스팅 횟수 등을 검사했습니다.
    • 같은 날짜와 포인트에서 같은 바다와 물고기 추첨 결과가 나오도록 구성했습니다.
  3. 03

    픽셀 3D 렌더링과 모바일 입력

    Three.js의 저분할 모델과 낮은 내부 렌더 해상도로 픽셀 스타일 장면을 구성했습니다.

    • flatShading과 nearest 필터를 적용하고, 디더링·팔레트 스냅·깊이 기반 외곽선으로 색면을 정리했습니다.
    • GLSL로 파도와 하늘을 표현하고 시간대에 따라 하늘·수평선·바다의 팔레트를 바꿨습니다.
    • 모바일에서는 왼쪽 스틱으로 배를 움직이고 터치 스와이프로 캐스팅·챔질, 릴 버튼으로 감기를 처리했습니다. 세로·가로 화면의 HUD와 safe area도 대응했습니다.

그 외 작업

  • 캐릭터·배·물고기와 물결을 코드로 구성하고 Web Audio API로 효과음을 만들었습니다.
  • 캐스팅·힘겨루기·항해·충돌·저장·터치 입력을 자동 테스트 48개로 검증했습니다. Chromium 데스크톱과 모바일 에뮬레이션에서 플레이 흐름도 확인했습니다.
  • 로딩 화면, SEO와 GA4 이벤트를 구성하고 Vercel에 배포했습니다.

다음 프로젝트

img-toolkit