이번에 시도하는건 NotebookLM과 Antigravity를 연동해서 빠른시간에 최대한 자동화해서 개발을 계획중입니다.

해당 NotebookLM과 안티그래비티를 MCP로 연동해준다.

1. 씬구성 요청



ComfyUI가 반복적으로 에러가나서 확인해봤더니 내가 이전에 세팅한 이미지 생성 모델은 ace_step_v1_3.5b인데 안티그래비티가 따로 플로우워크.json을 주지않으면 제대로 못알아먹어서 v1-5-pruned-emaonly설치후 다시 진행. 잘된다..

Flow에서 나노바나나로 이미지를 다시 만들고 remove.bg에서 버튼이랑 로고의 배경을 삭제
이하 안티그래비티로 만든 개발일지 입니다.
AI로 게임 UI 에셋 만들기 — ComfyUI + Unity 자동화 파이프라인
Stable Diffusion으로 타이틀 화면 에셋을 생성하고, Unity Editor 스크립트로 자동 적용하는 과정을 기록합니다.
"그림은 AI가, 텍스트는 TextMeshPro가, 조립은 Editor 스크립트가."
🎯 목표
타워 디펜스 게임 Kingdom Defense의 타이틀 화면에 필요한 에셋 3종을 ComfyUI로 생성하고, Unity Editor 스크립트로 프리팹에 자동 적용하기.
| 에셋 | 용도 | 크기 |
|---|---|---|
Title_Background.png |
전체 배경 | 768×512 |
Title_Logo.png |
엠블렘 장식 | 512×512 |
Title_BtnStart.png |
시작 버튼 프레임 | 512×256 |
🏗️ 아키텍처
comfy_bridge.py (Python)
│
├─ ComfyUI API (/prompt, /history, /view)
│ ├─ CheckpointLoaderSimple (v1-5-pruned-emaonly)
│ ├─ KSampler → VAEDecode
│ └─ Image Remove Background (rembg) ← 배경 제거
│
└─ 출력 → Assets/Resources/UI/Title/*.png
│
TitleAssetGenerator.cs (Unity Editor)
│ Python 프로세스 실행
└─ 생성 완료 후 AssetDatabase.Refresh()
│
ForceAssignTitleAssets.cs (Unity Editor)
├─ TextureImporter 설정 (Sprite, Alpha, 9-Slice)
├─ PrefabUtility로 TitleView.prefab 수정
│ ├─ Background: Image (Stretched)
│ ├─ Logo: Image (엠블렘, SetNativeSize)
│ └─ btnStart: Image (9-Slice) + TMP "TAP TO START"
└─ SerializedObject로 private 필드 바인딩
🔑 핵심 교훈 3가지
1. SD1.5는 텍스트를 못 만든다
처음 시도: 프롬프트에 'Kingdom Defense' 텍스트를 직접 넣음
결과: 글자가 뒤섞인 의미 없는 이미지 (아래 예시)
입력: "game logo text 'Kingdom Defense', stone texture..."
출력: "KALEM DFOM LETE" 😱
해결: 장식 요소만 AI로 생성하고, 실제 텍스트는 TextMeshPro로 분리
# ❌ Before — AI에게 텍스트 요청
"game logo text 'Kingdom Defense', stone texture, gold border..."
# ✅ After — 장식만 요청, 텍스트는 Unity TMP로
"medieval fantasy shield emblem, golden ornate frame, royal crest,
no text, no letters, no words"
원칙: AI 이미지 = 장식/질감/분위기, 텍스트 = TextMeshPro. 역할을 분리하자.
2. RemBG로 배경 제거 자동화
투명 배경이 필요한 에셋(로고, 버튼)은 ComfyUI의 Image Remove Background (rembg) 노드를 활용.
# Python에서 워크플로우에 RemBG 노드 동적 삽입
if use_rembg:
workflow["10"] = {
"class_type": "Image Remove Background (rembg)",
"inputs": { "image": [last_image_node, 0] }
}
last_image_node = "10"
처음에는 C#에서 흑색 픽셀을 투명으로 바꾸는 Chroma Key 방식을 시도했지만, 경계가 지저분했음. RemBG가 훨씬 깔끔한 결과를 줌.
| 방식 | 품질 | 속도 | 비고 |
|---|---|---|---|
| C# Chroma Key | ⭐⭐ | 빠름 | 경계 노이즈, 그림자 잔존 |
| RemBG (rembg) | ⭐⭐⭐⭐ | 약간 느림 | AI 기반, 깔끔한 마스크 |
3. Unity ↔ Python 브릿지 패턴
Unity의 UnityWebRequest로 ComfyUI에 직접 연결하려 했으나, 에디터 환경에서 비동기 처리가 불안정. Python 스크립트를 별도 프로세스로 실행하는 방식이 가장 안정적이었음.
Unity Editor (C#)
│
└─ System.Diagnostics.Process.Start("python", "comfy_bridge.py")
│
└─ Python (urllib) ─── HTTP ──→ ComfyUI (localhost:8188)
│
└─ 이미지 파일 저장
│
Unity Editor ←── AssetDatabase.Refresh() ────────────┘
장점:
- Python은 HTTP 통신이 간편 (urllib 표준 라이브러리)
- ComfyUI API 호환성 걱정 없음
- Unity Editor의 메인 스레드 블로킹 회피
🛠️ 프리팹 자동 조립 (ForceAssignTitleAssets.cs)
에셋이 생성되면 한 번의 메뉴 클릭으로 프리팹에 자동 적용:
// 1. 텍스처 임포트 설정
EnsureSprite("Title_Background.png");
EnsureSprite("Title_Logo.png");
EnsureSprite("Title_BtnStart.png", sliced: true); // 9-Slice 자동 설정
// 2. 프리팹 로드 → 수정 → 저장
var rootGo = PrefabUtility.LoadPrefabContents(prefabPath);
SetupBackground(so, rootGo, folder); // 전체 화면 배경
SetupLogo(rootGo, folder); // 엠블렘 (크기 자동 조절)
SetupButton(so, rootGo, folder); // 9-Slice 버튼 + TMP 텍스트
PrefabUtility.SaveAsPrefabAsset(rootGo, prefabPath);
핵심 테크닉:
PrefabUtility.LoadPrefabContents— 씬에 없는 프리팹도 직접 수정 가능SerializedObject— private 필드(backgroundImage,btnStart)에 강제 할당TextureImporter.spriteBorder— 9-Slice 보더 자동 설정
📋 Disposable Tool 패턴
이 프로젝트에서는 일회성 에디터 도구를 적극 활용합니다:
Assets/Scripts/Kingdom/Editor/
├── comfy_bridge.py ← ComfyUI 통신 (사용 후 삭제)
├── TitleAssetGenerator.cs ← Python 실행기 (사용 후 삭제)
└── ForceAssignTitleAssets.cs ← 프리팹 조립기 (사용 후 삭제)
에셋 생성/설정이 끝나면 스크립트를 즉시 삭제합니다. 프로젝트에 불필요한 코드가 남지 않도록 하는 것이 원칙.
🔄 전체 워크플로우 요약
1. comfy_bridge.py 실행
→ ComfyUI가 3장의 이미지 생성 (배경/엠블렘/버튼 프레임)
→ 로고·버튼은 RemBG로 배경 자동 제거
2. ForceAssignTitleAssets 실행 (Unity 메뉴)
→ 텍스처 → Sprite 변환, 9-Slice 보더 설정
→ TitleView.prefab에 이미지 자동 배치
→ 버튼 위에 "TAP TO START" TMP 텍스트 생성
→ SerializedObject로 private 필드 바인딩
3. 결과 확인 → 일회성 스크립트 삭제
💡 다음에 시도해볼 것
- ControlNet 활용 — 레퍼런스 이미지 기반으로 스타일 일관성 확보
- LoRA 학습 — Kingdom Rush 스타일 전용 모델 파인튜닝
- SDXL 전환 — 더 높은 해상도와 디테일
- Addressables 기반 에셋 로딩 — Resources 폴더 의존성 제거
AI 이미지 생성은 "만능"이 아닙니다.
텍스트, 정밀한 레이아웃, UI 인터랙션은 여전히 전통적인 도구가 낫습니다.
AI가 잘하는 것(질감, 분위기, 장식)과 엔진이 잘하는 것(텍스트, 레이아웃, 로직)을 분리하는 것이 핵심입니다.
'AI > Unity' 카테고리의 다른 글
| Codex/Antigravity 타워 디펜스 만들기 - 애니메이션 툴(스프라이트시트/타워) (0) | 2026.02.23 |
|---|---|
| Codex/Antigravity 타워 디펜스 만들기 - 애니메이션 툴(스프라이트시트) (0) | 2026.02.22 |
| Unity 공용 라이브러리(Common) 개발기 — 1 (0) | 2026.02.10 |
| 유니티 공용 모듈(Common Module) 제작 및 연동 (실패 노트) (3) | 2026.02.09 |
| [2026-02-08] 스도쿠캣 (1) | 2026.02.08 |