Interactive

02 / 3D APPS / AMOS / 2020.08–2021.11

Realtime 3D Game

실시간 게임의 웹 UI와 상태 관리, 3D 딜러 애니메이션과 카드 렌더링을 개발했습니다.

ROLE
게임 클라이언트 개발 전반 · 개발 리드
STACK
React · Three.js · XState · Socket.IO

REALTIME CLIENT

AmosGAME CLIENT · 실제 실행 영상

Game Client

로그인과 게임 패널은 React로, 딜러와 카드는 Three.js로 구현했습니다. 서버 이벤트와 게임 진행 단계에 맞춰 UI와 3D 씬을 갱신했습니다.

서버 이벤트와 상태 관리

Socket.IO로 방에 참여하고 게임·사용자 이벤트를 받았습니다. 이벤트 처리는 XState 상태 머신에 모으고, 이전 게임 데이터에서 바뀐 부분을 하위 상태 머신에 전달했습니다.

게임 단계별 UI와 입력 제어

로그인 상태와 게임 진행 단계를 구분해 관리했습니다. 대기·베팅·딜링·결과 단계에 맞춰 패널과 타이머, 입력 가능 여부를 바꿨습니다. React 컴포넌트는 필요한 상태를 구독해 화면을 갱신했습니다.

Animation & Rendering

애니메이션 클립과 IK 전환

딜링 구간에서는 IK로 손 위치를 맞추고, 나머지 동작은 애니메이션 클립으로 재생했습니다. 두 방식이 같은 본을 동시에 제어하지 않도록 클립 재생 중에는 IK 업데이트를 건너뛰었습니다.

카드 인스턴싱

InstancedMesh로 카드의 geometry와 material을 공유했습니다. 카드별로 텍스처 아틀라스의 UV 영역을 지정해 숫자와 무늬를 다르게 표시했습니다.

Geometryshared mesh / materialper-instance transform + UV
공유 geometry·material에 인스턴스별 위치와 UV를 적용하는 카드 렌더링 구조.
NEXT / WEB PLATFORMSMembership Platform