포트폴리오로 돌아가기
Project Detail

Mannequin [The Haunted Mall]

Photon Fusion 기반 3D 비대칭 PvP 호러 게임에서 세션 생성·참가·종료 흐름, 로딩/씬 전환 UX, Unity CI 검증 환경과 협업 자동화를 정리해 팀이 안정적으로 멀티플레이 기능을 검증할 수 있도록 만든 프로젝트입니다.

  • 2026.02 ~ 2026.03
  • Infrastructure · UI · Multiplayer Flow
  • Unity · Photon Fusion · GitLab Runner
  • EC2 · Mattermost Webhook · Addressables 검토
Mannequin 프로젝트 아트워크

Overview

Mannequin은 쇼핑몰을 배경으로 마네킹과 퇴마사가 대립하는 Photon Fusion 기반 3D 비대칭 PvP 호러 게임입니다. 짧은 플레이타임 안에서도 역할별 긴장감과 추격·회피 경험을 전달하는 것을 목표로 했습니다.

저는 이 프로젝트에서 인프라를 주 담당하고 UI를 부 담당하며, 팀이 멀티플레이 기능을 안정적으로 개발·검증할 수 있는 기반과 실제 플레이 진입 흐름을 함께 정리했습니다.

특히 멀티플레이 게임에서는 사용자가 보고 있는 화면 상태와 실제 네트워크 세션 상태가 어긋나면 플레이 경험 전체가 흔들릴 수 있다고 판단했습니다. 그래서 화면 단위 수정에 그치지 않고 세션 생명주기, 씬 전환 순서, 로딩 피드백을 함께 바라보며 흐름을 다듬었습니다.

또한 GitLab Runner, Unity 라이선스, EC2 실행 환경, Mattermost 웹훅을 점검해 팀의 반복 검증과 협업 상태 공유가 일회성 수작업에 의존하지 않도록 정리했습니다.

My Role & Scope

  • Photon Fusion 세션 흐름 정리

    세션 생성·참가·종료 과정에서 UI 상태와 실제 네트워크 상태가 어긋나지 않도록 로비, 참가, 이탈 흐름을 함께 점검했습니다.

  • LoadingScene 및 씬 전환 UX 개선

    로비에서 인게임으로 넘어가는 과정에서 사용자가 현재 상태를 이해할 수 있도록 역할별 로딩 흐름과 상태 피드백을 정리했습니다.

  • Unity CI 검증 환경 구성

    EC2 기반 GitLab Runner, Unity 라이선스, 실행 환경을 점검해 반복 가능한 빌드/검증 흐름을 만들 수 있도록 운영 기준을 정리했습니다.

  • 협업 자동화 및 상태 공유

    Mattermost 웹훅으로 브랜치별 커밋 현황을 공유해 팀원이 변경 흐름을 빠르게 확인할 수 있는 협업 자동화 기반을 구성했습니다.

Architecture Focus

1. Multiplayer Session Flow

Photon Fusion 세션 흐름은 단순히 방을 만들고 참가하는 기능이 아니라, 로비 UI와 실제 네트워크 상태가 같은 방향으로 움직이도록 정리해야 하는 영역이었습니다. 세션 생성, 참가, 종료, 이탈 시점의 흐름을 함께 점검해 사용자가 현재 상태를 오해하지 않도록 구성했습니다.


2. Scene Transition / Loading UX

LoadingScene과 씬 전환 흐름은 멀티플레이 진입 과정의 상태 피드백 장치로 보았습니다. 로비에서 게임 시작 후 인게임으로 넘어가는 동안 사용자가 참가 중인지, 로딩 중인지, 역할별 진입을 기다리는지 알 수 있도록 흐름을 정리했습니다.


3. Unity CI / Collaboration Pipeline

GitLab Runner와 Mattermost 웹훅을 활용해 팀의 검증과 공유 흐름을 정리했습니다. Unity 라이선스와 EC2 Runner 환경을 점검하고, 브랜치별 커밋 현황이 자동으로 공유되도록 구성해 협업 과정의 누락 가능성을 줄이고자 했습니다.

Challenges & Solution

1. 세션 상태와 UI 상태의 불일치

Challenge

멀티플레이 게임에서는 사용자가 방을 나갔다고 느끼더라도 실제 세션이 남아 있거나, 참가 중인지 대기 중인지 화면에서 명확히 드러나지 않으면 플레이 진입 경험이 흔들릴 수 있었습니다.

Solution

세션 생성·참가·종료 흐름을 UI 현상으로만 보지 않고 네트워크 세션 생명주기와 연결된 상태 흐름으로 정리했습니다. 로비와 참가 흐름에서 사용자가 인지하는 상태와 실제 세션 상태가 함께 전환되도록 점검했습니다.


2. 플레이 진입 과정의 상태 피드백 부족

Challenge

로비에서 게임 시작 후 인게임으로 넘어가는 과정은 단순 화면 전환처럼 보이지만, 실제로는 역할 배정, 씬 로딩, 네트워크 참가 상태가 함께 맞물리는 구간이었습니다.

Solution

LoadingScene을 상태 피드백 장치로 보고, 역할별 진입 흐름과 씬 전환 순서를 함께 정리했습니다. 이를 통해 사용자가 현재 단계가 로딩인지, 참가 대기인지, 인게임 전환인지 이해할 수 있도록 구성했습니다.


3. Unity Runner와 라이선스 환경의 반복성

Challenge

Unity 프로젝트는 Runner 환경, 라이선스 인증, 실행 경로에 따라 검증 결과가 흔들릴 수 있어, 팀 단위 개발에서는 반복 가능한 기준이 필요했습니다.

Solution

EC2에서 GitLab Runner와 Unity 라이선스 상태를 점검하고, 팀이 같은 기준으로 빌드와 검증을 수행할 수 있도록 운영 흐름을 문서화했습니다.


4. 협업 상태 공유의 누락 가능성

Challenge

브랜치별 커밋 현황과 변경 흐름을 사람이 직접 공유하면 누락되기 쉽고, 멀티플레이 기능처럼 여러 파트가 맞물리는 작업에서는 팀 전체의 상태 인지가 중요했습니다.

Solution

Mattermost Webhook을 연결해 브랜치별 커밋 현황이 자동으로 공유되도록 구성했습니다. 이를 통해 변경 흐름을 팀 채널에서 바로 확인하고 검증 타이밍을 맞출 수 있도록 했습니다.

Technical Highlights

  • Photon Fusion 세션 생명주기 점검

    세션 생성, 참가, 종료, 이탈 흐름을 UI 상태와 함께 보며 멀티플레이 진입 과정의 불일치 가능성을 줄였습니다.

  • 역할별 LoadingScene 흐름 정리

    로딩 화면을 단순 대기 화면이 아니라 역할 배정과 씬 전환 상태를 전달하는 피드백 흐름으로 정리했습니다.

  • GitLab Runner / Unity 라이선스 운영 기준

    EC2 Runner 환경과 Unity 라이선스 상태를 점검해 빌드와 검증 과정을 반복 가능한 형태로 관리할 수 있도록 했습니다.

  • Mattermost 기반 협업 알림 자동화

    브랜치별 커밋 현황을 팀 채널로 전달해 변경 사항 공유와 검증 타이밍 조율이 수월하도록 구성했습니다.

Result & Retrospective

Result

로비에서 게임 시작 후 인게임으로 넘어가는 흐름을 단순한 화면 전환이 아니라 상태가 보이는 플레이 진입 경험으로 다듬었습니다. 또한 GitLab Runner와 Unity 라이선스 운영 기준을 정리해 팀의 검증 루틴을 반복 가능한 형태로 만들었습니다.


Impact

팀은 멀티플레이 기능을 검증할 때 세션 상태, 씬 전환, 로딩 상태를 함께 확인할 수 있게 되었고, 브랜치별 변경 흐름도 Mattermost를 통해 더 빠르게 공유할 수 있었습니다.

사용자 관점에서는 참가, 로딩, 인게임 진입 사이의 흐름이 더 명확해져, 네트워크 기반 게임에서 자주 발생하는 "지금 무엇을 기다리는지 모르는 상태"를 줄이는 방향으로 경험을 개선했습니다.


Retrospective

이 프로젝트를 통해 멀티플레이 게임에서는 개별 기능 구현만큼 세션 생명주기, 상태 피드백, 검증 환경, 협업 운영 기준을 함께 보는 시야가 중요하다는 점을 배웠습니다.

이후에는 Runner 기반 검증을 더 자동화하고, 세션 실패/재참가 케이스까지 사용자 피드백과 로그로 관찰할 수 있는 구조로 확장해보고 싶습니다.

Gameplay Systems

실제 플레이에서 확인한 마네킹 역할의 주요 스킬과 전환 흐름입니다. 스킬 사용, 위장, 교란 장면을 통해 세션 진입 이후 이어지는 플레이 경험을 보여줍니다.

Install Targeting 스킬 사용 전 배치 위치와 상황 확인
Install Execution 마네킹 설치 스킬 실행 흐름
Camouflage 환경에 섞여 추격과 회피 변수를 만드는 위장 흐름
Derangement 상대의 시야와 판단을 흔드는 교란 흐름