게임 컨셉: 워해머 40K 스타일 오크가 되어 요새를 방어하며, 장인에게 장비를 만들게 하고, 밖에서 루팅해오는 협동 서바이벌 슈터 이 문서 범위: 싱글플레이어 MVP (1인 플레이 가능한 핵심 루프) Part 2 범위: 멀티플레이어, 포탑, 고급 루팅, 스페이스 마린


게임 핵심 루프

[요새 안] 장인에게 제작 요청
        ↓
[요새 밖] 웨이브 방어 + 시체/아이템 루팅
        ↓
[요새 안] "완성이다 임마!!" → 어그로 발생
        ↓
[요새 안] 장비 수령 + 업그레이드
        ↓
      (반복, 점점 강해짐)

핵심 재미 요소:

  1. 장비 제작 = 어그로 리스크 → 언제 만들지 타이밍 싸움
  2. 밖에 나가서 루팅 = 위험하지만 좋은 재료
  3. 오크 특유의 유쾌함 (죽어도 웃김)

Phase 0: 프로젝트 설정

Unity 버전 및 템플릿

Unity 6 LTS 또는 2022.3 LTS
템플릿: 3D (URP) - 나중에 비주얼 업그레이드 용이

폴더 구조

Assets/
├── _Game/
│   ├── Animations/
│   ├── Audio/
│   │   ├── Music/
│   │   ├── SFX/
│   │   └── Voice/          # 오크/장인 보이스
│   ├── Materials/
│   ├── Models/
│   │   ├── Characters/
│   │   ├── Enemies/
│   │   ├── Environment/
│   │   └── Weapons/
│   ├── Prefabs/
│   │   ├── Characters/
│   │   ├── Enemies/
│   │   ├── Items/
│   │   ├── Projectiles/
│   │   └── Buildings/
│   ├── Scenes/
│   ├── ScriptableObjects/  # 데이터 에셋
│   ├── Scripts/
│   │   ├── Characters/
│   │   ├── Combat/
│   │   ├── Crafting/
│   │   ├── Enemies/
│   │   ├── Fortress/
│   │   ├── Items/
│   │   ├── Managers/
│   │   └── UI/
│   ├── Sprites/
│   └── UI/
└── Plugins/

필수 패키지 (Package Manager)

- TextMeshPro (기본 포함)
- Cinemachine (카메라)
- AI Navigation (NavMesh)
- Input System (New Input System)

Phase 1: 데이터 구조 설계 (ScriptableObjects)

게임 밸런싱과 확장성을 위해 데이터를 코드에서 분리.

1.1 아이템 데이터

ItemData.cs

using UnityEngine;

public enum ItemType
{
    Resource,       // 재료
    Weapon,         // 무기
    Armor,          // 방어구
    Consumable,     // 소모품
    Special         // 특수 (스페이스 마린 장비 등)
}

public enum Rarity
{
    Common,         // 일반 재료
    Uncommon,       // 강한 적 시체
    Rare,           // 보스 드롭
    Legendary       // 스페이스 마린 장비
}

[CreateAssetMenu(fileName = "New Item", menuName = "Game/Item Data")]
public class ItemData : ScriptableObject
{
    [Header("기본 정보")]
    public string itemName;
    public string itemNameKorean;   // "쵸파!" 같은 오크식 이름
    public Sprite icon;
    public ItemType itemType;
    public Rarity rarity;

    [Header("설명")]
    [TextArea(3, 5)]
    public string description;      // "이빨 많이 들었다 임마!"

    [Header("스탯 (무기/방어구용)")]
    public int damage;
    public float attackSpeed;
    public int armor;
    public float moveSpeedBonus;

    [Header("제작")]
    public bool isCraftable;
    public float craftTime;         // 제작 시간 (초)
    public CraftingRecipe recipe;
}

1.2 제작 레시피