포스트

2~4인 협동 이사 게임 기획과 운반 시스템

'함께 든다'를 게임 규칙으로 성립시키기

무거운 가구를 둘이서 들고 계단을 내려가는 장면 하나로 게임이 성립할까. One Pager와 코어 루프로 범위를 닫고, 협동 운반을 어떤 규칙으로 만들지 인게임 시스템으로 푼 기획안.

2~4인 협동 이사 게임 기획과 운반 시스템

무거운 가구를 둘이서 들고 계단을 내려가는 장면 하나가 게임의 전부가 될 수 있을까. 팀 기획안의 출발점은 그 질문이었다. 이 글에서는 2~4인 협동 캐주얼 이삿짐 센터 시뮬레이션의 기획을 정리하며, 그 장면을 실제 시스템으로 옮기는 과정을 이야기하려 한다 — One Pager와 코어 루프로 범위를 닫고, “함께 들기”를 어떤 규칙으로 성립시킬지 인게임 시스템으로 풀고, 마지막에 에셋 접두사 같은 팀 규칙까지 정한다.

One Pager

항목내용
게임명Project A (2~4인 협동)
장르캐주얼, 협동
레퍼런스Carry The Glass(운반 시스템) + Moving Out(코어 루프)
Elevator Pitch2~4명이 가구를 이삿짐 트럭에 안전하게 옮기는 이삿짐 센터 시뮬레이션

코어 판타지

  • 다같이 호흡을 맞춰 큰 가구를 아슬아슬하게 운반하는 극도의 긴장감
  • 한 명의 실수로 가구가 부딪혀 파손될 때 나오는 (역설적) 우정의 유대감

핵심 메커니즘

  • 협력 물리: 소파·TV 같은 무거운 가구를 여러 명이 동시에 들어 트럭까지 운반
  • 환경 퍼즐 & 파괴: 운반 중 벽·다른 가구에 부딪히면 손상 → 점수 하락
  • 스테이지 선택: 한 집이 아니라 구조가 다른 여러 집에서 체험
  • 최종 결과: 가구를 모두 옮기면 자동 결과, 점수 미달 시 패배

USP

  • 스테이지로 구성된 짧지만 강렬한 재미: 처음부터 끝까지 가는 플랫포머(Carry The Glass)와 달리 스테이지 단위로 짧고 굵게
  • 캐주얼하지만 섬세한 조작: Moving Out의 가벼운 아케이드 + 플레이어 간 섬세한 협동으로 “진정한 우정 파괴”

게임 흐름도 (코어 루프)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[메인 메뉴]
   │ 게임 시작
   ▼
[캐릭터 선택] ──(게임 불러오기)──┐
   │ 새 게임                     │
   ▼                            ▼
[튜토리얼] ───────────► [스테이지 선택 화면]
                              │
                              ▼
                          [인게임]
                              │
                              ▼
                         [최종 결과]
                          │        │
                      점수 만족   점수 미달
                          ▼        ▼
                        [계속]    [패배]

역할 분담

레벨 디자인·캐릭터는 카툰 느낌의 아기자기한 분위기로 통일한다.

  • 캐릭터 / 레벨 디자인 / 가구 Prop / 네트워크 / GameMode / UI

인게임 시스템 기획 — “가구 옮기기”

개요

  • 목적: 게임 정체성인 “가구를 트럭까지 옮기기”의 핵심 시스템
  • 기획 의도: 협동의 재미 + 조작 실패의 우정 파괴를 극대화 → 부수지 않고 얼마나 빠르게 옮기느냐가 챌린지
  • 분류: Core (필수)

구성 요소 (가구 상태 변수)

변수타입의미
Furniture_MaxHealthFloat최대 내구도
Furniture_CurrentHealthFloat현재 내구도(충돌 시 차감)
Furniture_RequiredPlayerInt안정적으로 들기 위한 최소 인원
Furniture_CurrentGrabbedPlayerInt현재 들고 있는 인원
Furniture_CombinedVelocityVector플레이어 입력 방향을 합산한 최종 이동 벡터
Furniture_bIsGrabbedBool누군가 잡고 있는지 여부

동작 방식 (IPOF)

  • Input: 상호작용(잡기) + 이동 입력
  • Process
    1. 가구 근처 상호작용 → CurrentGrabbedPlayer +1
    2. CurrentGrabbedPlayer > 0bIsGrabbed = True / == 0False
    3. 매 프레임 CurrentGrabbedPlayer vs RequiredPlayer 비교
      • >= RequiredPlayer → 정상 속도로 CombinedVelocity 적용
      • < RequiredPlayer정상 속도 − (CurrentGrabbedPlayer / RequiredPlayer) × 10 속도로 적용
    4. 이동 중 벽·가구와 충돌 → 충격량 계산 → CurrentHealth -= 충격량 × 피해 배율
    5. CurrentHealth <= 0 → 가구 완전 파괴(점수 하락)
  • Output: 가구 위치 갱신 + 파손에 따른 점수 차감
  • Feedback
    • 잡기 → 손 Attach 애니메이션 + 사운드 + 이펙트
    • 이동 → 손에 들린 가구 시각 효과
    • 인원 부족 이동 → 캐릭터 땀방울 이펙트
    • 충돌 → 카메라 짧게 흔들림 + 파편/먼지 이펙트 + 사운드

예외 케이스

  • 방향 불일치: 양쪽에서 반대로 밀면 CombinedVelocity = 0(제자리) + 캐릭터만 자기 방향으로 움직임
  • 문틈 끼임: 속도 0인데 입력이 있으면 충돌 적용
  • 이동 중 놓기: 갑자기 놓으면 낙하 데미지
    • 2인↑ 중 1명만 놓기 → 3초간 힘들게 드는 모션 → 이후 자동으로 놓아지며 낙하 데미지

수치 / DataTable (DT_FurnitureData)

RowNameMaxHealthRequiredPlayerBaseSpeedCollisionDamageMultiplier
Small_Chair100.01100.010.0 (일반 충돌)
Long_Sofa200.0280.015.0 (2인용)
Fridge300.0350.030.0 (3인용)
TV250.0280.040.0 (2인이지만 충돌에 치명적)

타 시스템 / UI 연동

  • 입력: 캐릭터 컨트롤 시스템(상호작용 버튼, 이동 벡터 전송)
  • 출력: 점수 판정 시스템(트럭에 옮기면 내구도 반영 점수 전송), 사운드(충돌 강도에 따라 음량 조절)
  • UI: 메인 점수판

미결 사항

  • 가구를 든 상태에서 캐릭터 움직임 제한(점프·달리기) 여부
  • 가구 던지기 기능 추가 여부

팀 규칙 — 언리얼 에셋 접두사

접두사에셋 종류예시
SM_Static Mesh (정적 3D 오브젝트)SM_Tree_Oak_01
SK_Skeletal Mesh (움직이는 캐릭터 메시)SK_Enemy_Goblin
T_Texture (텍스처 이미지)T_Tree_Oak_D (D=Diffuse)
M_Material (재질)M_Stone_Wet
MI_Material InstanceMI_Stone_Wet_Dark
BP_Blueprint (블루프린트 클래스)BP_Enemy_Boss
WBP_Widget Blueprint (UI)WBP_HUD_Main
DA_Data AssetDA_WeaponConfig
DT_Data TableDT_EnemyStats
ABP_Animation BlueprintABP_Player_Locomotion
AM_Animation MontageAM_Attack_Heavy

구현 관점 메모

  • 협동 = 멀티플레이. CombinedVelocity(여러 입력 합산)·동시에 들기는 결국 각 클라 입력을 서버가 모아 가구에 적용 → 물리 결과를 복제하는 구조다. 9번 과제의 서버 권위 + Replication 원칙이 그대로 온다. 가구가 곧 복제 액터이고, CurrentHealth·bIsGrabbed는 복제 프로퍼티 후보.
  • DT_FurnitureData로 수치를 뺀 건 코드 수정 없이 밸런싱하려는 의도다 — 8·9번 과제의 DataTable/DataAsset 경험과 직결된다. RowName으로 가구 종류를 키잉한다.
  • 속도 페널티 공식 정상 − (현재인원/필요인원)×10은 인원이 모자랄수록 느려지는 패널티인데, 단위·하한(음수 방지)이 정의돼 있지 않다. 예로 Fridge(필요 3인)를 1명이 들면 50 − (1/3)×10 ≈ 46.7이라 패널티가 거의 없어, “혼자선 훨씬 느리게”라는 의도와 어긋난다. 구현 전 공식 의도를 팀과 맞춰야 할 지점.
  • 에셋 접두사 규칙은 팀 협업의 기본 컨벤션이다. 가구 Prop은 SM_, 데이터는 DT_, UI는 WBP_로 통일하면 콘텐츠 브라우저 검색·머지 충돌이 줄어든다.

핵심 요약 — 기획안을 구현 관점으로 다시 읽으면, “여럿이 동시에 든다”는 재미 요소가 곧 서버 권위 + Replication 설계 문제라는 게 보인다. 속도 페널티 공식처럼 수식은 있는데 단위·하한이 비어 있는 지점은 구현 전에 팀과 맞춰야 할 확인 목록이 된다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.