소개
간단한 케쥬얼 게임을 4주의 스터디 동안 만들기 위해 시간날때마다 작업하고 있습니다.
# 1주차 작업
1. 시스템 선정
- 멀티 플렛폼용 앱 껍데기 ( Flutter )
- 게임 엔진 ( Unity6 - 2D )
- 랭킹 저장 및 랭킹 알람용 백엔드 ( Firebase / Cloud Function - Cloud Message )
- 수익을 위한 Admob ( 전면광고 1 / 배너 광고 1 )
2. 기반 작업 ( 1주차 )
- Flutter 기본 껍데기 생성
- Firebase IOS/AOS 등록 ( 앱 초기화때 사용 ) 및 json/plist 파일 작업
- Admob 트리거 규칙 및 테스트 광고 띄우기.
진행 방법
Claude Code
Antigravity ( IDE로만 사용 )
firebase Console
Claude Code 를 plan-mode로 "우리의 친구" opus 횽에게 기본적인 시스템 구성을 설명하고,
같 이 계획하자고 꼬셨습니다.
뽀로리:
flutter + unity6(2D) + firebase 를 이용한 간단한 케쥬얼 게임을 만들고 싶어.
게임을 만들기 전에 아래의 조건으로 설계를 진행할 생각인데, 같이 이야기하며 계획을 세워보자.
---
### Repository : mono-repo / multi-module ( flutter UI / Game )
---
---
### flutter
앱의 껍데기 역할로 아래의 역할을 한다.
1. splash
2. admob 광고판
3. 랭킹 등록/조회
4. push notification
---
---
### firebase
1. 셰계랭킹 DB
2. push notification
---
### unity6 2D
1. 게임 ( flutter 모듈로 임베딩 )
2. flutter 와 인터페이스를 통해 점수등 데이터/엑션을 전달
---이렇게 첫 시작을 하여 프롬프트로 서로 핑퐁하며, opus 가 나에게 역제안을 하고 그걸 제가 수락 혹은 다른
방향으로 유도하면서 '계획'단계를 진행 했고. 아래와 같은 디렉토리 구조로 프로젝트가 생성 되었습니다.
.. 중략 ...
## 1. Mono-repo Directory Structure
```
road_outlaw/
├── apps/
│ └── flutter_app/ # Flutter 메인 앱
│ ├── android/
│ │ └── unityLibrary/ # Unity export 모듈 (gitignore)
│ ├── ios/
│ │ └── UnityLibrary/ # Unity export 모듈 (gitignore)
│ ├── lib/
│ │ ├── main.dart
│ │ ├── screens/
│ │ │ ├── splash_screen.dart
│ │ │ ├── auth/
│ │ │ │ ├── signin_screen.dart
│ │ │ │ └── signup_screen.dart
│ │ │ ├── home_screen.dart
│ │ │ ├── game_screen.dart # Unity 게임 호스팅
│ │ │ └── ranking_screen.dart
│ │ ├── services/
│ │ │ ├── auth_service.dart
│ │ │ ├── ranking_service.dart
│ │ │ ├── push_service.dart
│ │ │ └── unity_bridge.dart # Unity 통신 인터페이스
│ │ ├── models/
│ │ │ ├── user_model.dart
│ │ │ └── score_model.dart
│ │ └── widgets/
│ └── pubspec.yaml
│
├── unity/
│ └── game/ # Unity6 2D 프로젝트
│ ├── Assets/
│ │ ├── Scripts/
│ │ │ ├── GameManager.cs
│ │ │ ├── PlayerController.cs
│ │ │ ├── CarSpawner.cs
│ │ │ ├── ScoreManager.cs
│ │ │ └── FlutterBridge.cs # Flutter 통신 인터페이스
│ │ ├── Prefabs/
│ │ ├── Sprites/
│ │ └── Scenes/
│ └── ProjectSettings/
│
├── firebase/
│ ├── firestore.rules
│ ├── firestore.indexes.json
│ └── functions/ # Cloud Functions (푸시 알림용)
│ ├── src/
│ │ └── index.ts
│ └── package.json
│
├── docs/
│ ├── interface-spec.md # Flutter-Unity 인터페이스 명세
│ └── architecture.md
│
├── scripts/
│ ├── build_unity_android.sh
│ ├── build_unity_ios.sh
│ └── deploy_firebase.sh
│
└── README.md
```
---
## 2. Flutter-Unity Interface Specification
### Flutter → Unity (Method Channel)
| Method | Parameters | Description |
|--------|------------|-------------|
| `startGame` | `userId: String` | 게임 시작 |
| `pauseGame` | - | 게임 일시정지 |
| `resumeGame` | - | 게임 재개 |
| `stopGame` | - | 게임 종료 |
### Unity → Flutter (Message Channel)
| Event | Payload | Description |
|-------|---------|-------------|
| `onGameReady` | - | Unity 초기화 완료 |
| `onGameOver` | `{ score: int, distance: int }` | 게임 오버 시 점수 전달 |
| `onScoreUpdate` | `{ score: int }` | 실시간 점수 업데이트 (선택) |
... 중략 ...
지금 까지 Opus로 대화한 내용들을, 아래와 같이 문서화 하도록 요청하였습니다.
계속진행하기 전에, @docs 디렉터리 밑에. processes 디렉토리를 만들고 각 단계를 markdown 으로 먼저 정리해줘. 그리고 현재 진행할 Task들을 @docs/tasks 디렉터리를 만들어서 phase 단계별로 를 정리해주고, 현재 tasks 진행되는 를 active-task.md 로 업데이트 해줘, 그리고 각 task가 끝나면 성공/실패 여부를 체크해 줘야해. 프로젝트의 작업 목록을 보여주는 화면
우리의 설계(?)상 Flutter 와 Game은 Interface 로 서로 통신하는 '독립적인' 개체들이 되므로, 'phase3 의 유니티 게임'의 경우 flutter base와 interface 규악만 맞추는 조건이라면 어떤 게임이건 붙일 수 있는 상황이 됩니다. ( Game Agent를 따로 만들어서 병렬로도 가능할 것 같네요.)
제가 상상했던 구조로 '클로드 코드'