mirror of
https://github.com/Earth-Genesis-Games/Ajedrez_Purgatorio.git
synced 2026-09-11 09:47:35 +00:00
1911 lines
49 KiB
Markdown
1911 lines
49 KiB
Markdown
# Manual de Implementación en Unity - Ajedrez Purgatorio
|
|
**Fecha:** 10 de mayo de 2026
|
|
**Unity:** 6000.3.13f1 (URP 17.3.0)
|
|
**Estado del Código:** ✅ 100% compilado (0 errores)
|
|
|
|
---
|
|
|
|
## 📋 ÍNDICE RÁPIDO
|
|
|
|
1. [Pre-requisitos](#1-pre-requisitos)
|
|
2. [Crear ScriptableObjects](#2-crear-scriptableobjects-10-minutos)
|
|
3. [Crear Estructura de Carpetas](#3-crear-estructura-de-carpetas-5-minutos)
|
|
4. [Crear Main Menu Scene](#4-crear-main-menu-scene-30-minutos)
|
|
5. [Crear Chapter Scenes](#5-crear-chapter-scenes-1-2-horas)
|
|
6. [Configurar Audio](#6-configurar-audio-20-minutos)
|
|
7. [Crear Prefabs de UI](#7-crear-prefabs-de-ui-30-minutos)
|
|
8. [Configurar Build Settings](#8-configurar-build-settings-10-minutos)
|
|
9. [Configurar Input System](#9-configurar-input-system-10-minutos)
|
|
10. [Testing y Verificación](#10-testing-y-verificación-30-minutos)
|
|
|
|
**Tiempo total estimado: 3-4 horas**
|
|
|
|
---
|
|
|
|
## 1. PRE-REQUISITOS
|
|
|
|
### Verificar que el proyecto esté limpio
|
|
✅ Ya completado - El código compila sin errores (Sprint 4 + Sprint 5 al 100%)
|
|
|
|
### Packages instalados
|
|
- ✅ Universal Render Pipeline (URP) 17.3.0
|
|
- ✅ TextMeshPro
|
|
- ✅ Input System
|
|
- ✅ Test Framework (NUnit)
|
|
|
|
### Estructura actual
|
|
```
|
|
Assets/
|
|
Game/
|
|
Scripts/ ← Código ya implementado ✅
|
|
Data/ ← Aquí crearemos ScriptableObjects
|
|
Prefabs/ ← Aquí crearemos prefabs
|
|
Audio/ ← Aquí pondremos audio clips
|
|
Sprites/ ← Aquí sprites de UI
|
|
Scenes/ ← Aquí crearemos las scenes
|
|
```
|
|
|
|
---
|
|
|
|
## 2. CREAR SCRIPTABLEOBJECTS (10 minutos)
|
|
|
|
### 2.1. CampaignState.asset 🔴 CRÍTICO
|
|
|
|
**Paso 1:** Crear el asset
|
|
1. En Unity Editor, navega a `Assets/Game/Data/`
|
|
2. Click derecho en el panel Project
|
|
3. `Create → Ajedrez Purgatorio → Campaign → Campaign State`
|
|
4. Renombra a: `CampaignState`
|
|
|
|
**Paso 2:** Mover a Resources
|
|
1. Crea carpeta si no existe: `Assets/Game/Data/Resources/`
|
|
2. Arrastra `CampaignState.asset` a `Resources/`
|
|
3. **Importante:** DEBE estar en Resources para que DeadKingPool lo encuentre con `Resources.Load()`
|
|
|
|
**Paso 3:** Configurar en Inspector
|
|
```
|
|
CampaignState (Script)
|
|
├─ Current Chapter Index: 0
|
|
├─ Completed Chapters: (vacío)
|
|
├─ Alive Pieces: (vacío)
|
|
├─ Total Pieces Lost: 0
|
|
├─ Current Chapter Pieces Lost: 0
|
|
└─ Last Chapter Was Victory: false
|
|
```
|
|
|
|
> **Nota:** No necesitas configurar nada manualmente, los valores default están bien. El sistema los llenará en runtime.
|
|
|
|
---
|
|
|
|
### 2.2. DeadKingPool.asset 🔴 CRÍTICO
|
|
|
|
**Paso 1:** Crear el asset
|
|
1. En `Assets/Game/Data/`
|
|
2. Click derecho → `Create → Ajedrez Purgatorio → Meta → Dead King Pool`
|
|
3. Renombra a: `DeadKingPool`
|
|
|
|
**Paso 2:** Mover a Resources
|
|
1. Arrastra `DeadKingPool.asset` a `Assets/Game/Data/Resources/`
|
|
2. **Importante:** DEBE estar en Resources
|
|
|
|
**Paso 3:** Configurar en Inspector
|
|
```
|
|
DeadKingPool (Script)
|
|
├─ Pool Configuration
|
|
│ ├─ Max Pool Size: 100
|
|
│ ├─ Base Spawn Chance: 0.2
|
|
│ └─ Chapter Multiplier: 0.2
|
|
├─ Content Moderation
|
|
│ └─ Profanity List: (Array - 12 elementos ya pre-configurados)
|
|
│ ├─ Element 0: "fuck"
|
|
│ ├─ Element 1: "shit"
|
|
│ ├─ Element 2: "damn"
|
|
│ ├─ Element 3: "bastard"
|
|
│ ├─ Element 4: "asshole"
|
|
│ ├─ Element 5: "bitch"
|
|
│ ├─ Element 6: "puto"
|
|
│ ├─ Element 7: "mierda"
|
|
│ ├─ Element 8: "joder"
|
|
│ ├─ Element 9: "cabrón"
|
|
│ ├─ Element 10: "pendejo"
|
|
│ └─ Element 11: "hijo de puta"
|
|
└─ Debug
|
|
└─ Enable Debug Logging: ☐ false
|
|
```
|
|
|
|
> **Nota:** La profanity list previene nombres inapropiados en Dead Kings. Los valores ya vienen pre-configurados, no necesitas cambiar nada a menos que quieras personalizar.
|
|
|
|
---
|
|
|
|
### 2.3. BalanceConfig.asset 🟡 OPCIONAL
|
|
|
|
**Paso 1:** Crear el asset
|
|
1. En `Assets/Game/Data/`
|
|
2. Click derecho → `Create → Ajedrez Purgatorio → Data → Balance Config`
|
|
3. Renombra a: `BalanceConfig`
|
|
|
|
**Paso 2:** Configurar valores
|
|
```
|
|
BalanceConfig (Script)
|
|
├─ Dead Kings Config
|
|
│ ├─ Base Chance: 0.2
|
|
│ ├─ Chapter Multiplier: 0.2
|
|
│ ├─ Max Pool Size: 100
|
|
│ ├─ Max Name Length: 20
|
|
│ └─ Max Message Length: 100
|
|
├─ AI Difficulty (Array - Size: 3)
|
|
│ ├─ Element 0 (Easy)
|
|
│ │ ├─ Strategy: "minimax"
|
|
│ │ ├─ Minimax Depth: 2
|
|
│ │ └─ Think Time Ms: 500
|
|
│ ├─ Element 1 (Medium)
|
|
│ │ ├─ Strategy: "minimax"
|
|
│ │ ├─ Minimax Depth: 3
|
|
│ │ └─ Think Time Ms: 1000
|
|
│ └─ Element 2 (Hard)
|
|
│ ├─ Strategy: "minimax"
|
|
│ ├─ Minimax Depth: 4
|
|
│ └─ Think Time Ms: 1500
|
|
├─ Dialogue Config
|
|
│ ├─ Typewriter Speed Chars Per Second: 33
|
|
│ ├─ Continue Indicator Blink Rate: 0.5
|
|
│ ├─ Fade In Duration: 0.3
|
|
│ └─ Fade Out Duration: 0.2
|
|
├─ UI Timings Config
|
|
│ ├─ Feedback Display Time: 2
|
|
│ ├─ Submit Debounce Time: 0.5
|
|
│ ├─ Fade In Duration: 0.5
|
|
│ └─ Fade Out Duration: 0.5
|
|
└─ Save System Config
|
|
├─ Max Save Slots: 3
|
|
├─ Auto Save After Chapter: ☑ true
|
|
└─ Save Version: 1
|
|
```
|
|
|
|
> **Nota:** Este asset es opcional. Si no lo creas, el código usa valores hardcodeados.
|
|
|
|
---
|
|
|
|
### ✅ CHECKPOINT 1: ScriptableObjects creados
|
|
|
|
Deberías tener:
|
|
- ✅ `Assets/Game/Data/Resources/CampaignState.asset`
|
|
- ✅ `Assets/Game/Data/Resources/DeadKingPool.asset`
|
|
- ✅ `Assets/Game/Data/BalanceConfig.asset` (opcional)
|
|
|
|
---
|
|
|
|
## 3. CREAR ESTRUCTURA DE CARPETAS (5 minutos)
|
|
|
|
### 3.1. Carpetas para Assets
|
|
|
|
**En Project Window, crea estas carpetas si no existen:**
|
|
|
|
```
|
|
Assets/
|
|
├─ Game/
|
|
│ ├─ Audio/
|
|
│ │ ├─ SFX/ ← Sonidos de juego
|
|
│ │ └─ Music/ ← Música de fondo
|
|
│ ├─ Prefabs/
|
|
│ │ ├─ UI/ ← Prefabs de UI
|
|
│ │ └─ Board/ ← Prefabs de tablero
|
|
│ ├─ Sprites/
|
|
│ │ ├─ UI/ ← Sprites de UI
|
|
│ │ └─ Pieces/ ← Sprites de piezas
|
|
│ └─ Data/
|
|
│ └─ Dialogues/ ← JSON files (ya existen ✅)
|
|
└─ Scenes/ ← Scenes del juego
|
|
```
|
|
|
|
**Atajo:** Click derecho → `Create → Folder`
|
|
|
|
---
|
|
|
|
## 4. CREAR MAIN MENU SCENE (30 minutos)
|
|
|
|
### 4.1. Crear la Scene Base
|
|
|
|
**Paso 1:** Nueva Scene
|
|
1. `File → New Scene`
|
|
2. Selecciona template: `Basic (Built-In)` o `URP`
|
|
3. `File → Save As`
|
|
4. Guarda en: `Assets/Scenes/MainMenu.unity`
|
|
|
|
**Paso 2:** Configurar Camera
|
|
```
|
|
Main Camera
|
|
├─ Clear Flags: Solid Color
|
|
├─ Background: #2C1810 (marrón oscuro)
|
|
├─ Projection: Orthographic
|
|
└─ Size: 5
|
|
```
|
|
|
|
---
|
|
|
|
### 4.2. Crear Canvas Principal
|
|
|
|
**Paso 1:** Crear Canvas
|
|
1. Click derecho en Hierarchy → `UI → Canvas`
|
|
2. Renombra a: `MainMenuCanvas`
|
|
|
|
**Paso 2:** Configurar Canvas
|
|
```
|
|
Canvas
|
|
├─ Render Mode: Screen Space - Overlay
|
|
├─ Canvas Scaler
|
|
│ ├─ UI Scale Mode: Scale With Screen Size
|
|
│ ├─ Reference Resolution: 1920 x 1080
|
|
│ └─ Match: 0.5
|
|
└─ Graphic Raycaster: (default)
|
|
```
|
|
|
|
---
|
|
|
|
### 4.3. Crear Título del Juego
|
|
|
|
**Paso 1:** Crear Text
|
|
1. Click derecho en `MainMenuCanvas` → `UI → Text - TextMeshPro`
|
|
2. Renombra a: `TitleText`
|
|
3. Si aparece popup de TMP importer → Click "Import TMP Essentials"
|
|
|
|
**Paso 2:** Configurar RectTransform
|
|
```
|
|
Rect Transform
|
|
├─ Anchor Presets: Top Center
|
|
├─ Pos Y: -150
|
|
├─ Width: 800
|
|
└─ Height: 200
|
|
```
|
|
|
|
**Paso 3:** Configurar Text
|
|
```
|
|
TextMeshPro - Text (UI)
|
|
├─ Text: "AJEDREZ PURGATORIO"
|
|
├─ Font Style: Bold
|
|
├─ Font Size: 72
|
|
├─ Alignment: Center
|
|
├─ Color: #FFD700 (dorado)
|
|
└─ Enable Auto-Sizing: false
|
|
```
|
|
|
|
---
|
|
|
|
### 4.4. Crear Panel de Botones
|
|
|
|
**Paso 1:** Crear Panel
|
|
1. Click derecho en `MainMenuCanvas` → `UI → Panel`
|
|
2. Renombra a: `ButtonPanel`
|
|
|
|
**Paso 2:** Configurar RectTransform
|
|
```
|
|
Rect Transform
|
|
├─ Anchor Presets: Middle Center
|
|
├─ Width: 400
|
|
├─ Height: 400
|
|
└─ Pivot: 0.5, 0.5
|
|
```
|
|
|
|
**Paso 3:** Agregar Vertical Layout Group
|
|
1. `Add Component → Layout → Vertical Layout Group`
|
|
```
|
|
Vertical Layout Group
|
|
├─ Padding: Left=20, Right=20, Top=20, Bottom=20
|
|
├─ Spacing: 20
|
|
├─ Child Alignment: Middle Center
|
|
└─ Child Controls Size: ☑ Width, ☑ Height
|
|
```
|
|
|
|
**Paso 4:** Quitar fondo del panel
|
|
- Deshabilita el componente `Image` del Panel (checkbox)
|
|
|
|
---
|
|
|
|
### 4.5. Crear Botones (4 botones)
|
|
|
|
**Crear los 4 botones de una vez:**
|
|
|
|
1. Click derecho en `ButtonPanel` → `UI → Button - TextMeshPro`
|
|
2. Renombra a: `NewCampaignButton`
|
|
3. **Repite 3 veces más** para crear:
|
|
- `ContinueButton`
|
|
- `OptionsButton`
|
|
- `QuitButton`
|
|
|
|
> **Nota:** Unity crea los botones con configuración por defecto que ya funciona. Solo necesitas cambiar el texto.
|
|
|
|
**Cambiar el texto de cada botón:**
|
|
|
|
Para cada botón:
|
|
1. **Expande** el botón en Hierarchy (flecha ▶)
|
|
2. Selecciona el hijo **`Text (TMP)`**
|
|
3. En Inspector, busca el campo **`Text`**
|
|
4. Cambia a:
|
|
- NewCampaignButton → `"NEW CAMPAIGN"`
|
|
- ContinueButton → `"CONTINUE"`
|
|
- OptionsButton → `"OPTIONS"`
|
|
- QuitButton → `"QUIT"`
|
|
|
|
**Ajustar tamaño del texto (opcional pero recomendado):**
|
|
- Selecciona el `Text (TMP)` de cada botón
|
|
- En Inspector: **Font Size** = `28` o `32`
|
|
- **Color**: Déjalo en blanco (ya está por defecto)
|
|
|
|
**FIX: Si los botones se ven deformados/estirados:**
|
|
|
|
El Vertical Layout Group está estirando los botones. Para cada botón:
|
|
|
|
1. Selecciona el **botón** (no el texto, el botón mismo)
|
|
2. `Add Component → Layout → Layout Element`
|
|
3. En el componente **Layout Element**:
|
|
- ☑ Marca: **Min Height**
|
|
- Valor: **70** o **80**
|
|
- ☑ Marca: **Preferred Height**
|
|
- Valor: **70** o **80**
|
|
|
|
Repite para los 4 botones. Ahora deberían verse correctos.
|
|
|
|
**Resultado esperado:**
|
|
```
|
|
ButtonPanel
|
|
├─ NewCampaignButton (con Layout Element)
|
|
│ └─ Text (TMP) ← Texto: "NEW CAMPAIGN"
|
|
├─ ContinueButton (con Layout Element)
|
|
│ └─ Text (TMP) ← Texto: "CONTINUE"
|
|
├─ OptionsButton (con Layout Element)
|
|
│ └─ Text (TMP) ← Texto: "OPTIONS"
|
|
└─ QuitButton (con Layout Element)
|
|
└─ Text (TMP) ← Texto: "QUIT"
|
|
```
|
|
|
|
> **¡Listo!** Los botones ahora tienen altura fija y se ven correctos.
|
|
|
|
---
|
|
|
|
### 4.6. Agregar MainMenuController Script
|
|
|
|
**Paso 1:** Crear GameObject vacío
|
|
1. Click derecho en Hierarchy (root) → `Create Empty`
|
|
2. Renombra a: `GameController`
|
|
|
|
**Paso 2:** Agregar componentes necesarios
|
|
1. Selecciona `GameController`
|
|
2. `Add Component → Main Menu Controller` (debería aparecer en búsqueda)
|
|
|
|
**Si no aparece el script:**
|
|
1. `Add Component → New Script`
|
|
2. Nombre: `MainMenuController`
|
|
3. **IMPORTANTE:** Elimina el script que Unity creó
|
|
4. Usa el que ya existe en `Assets/Game/Scripts/Mono/UI/MainMenuController.cs`
|
|
|
|
**Paso 3:** Configurar referencias en Inspector
|
|
```
|
|
Main Menu Controller (Script)
|
|
├─ UI References
|
|
│ ├─ New Campaign Button: ← Arrastra NewCampaignButton aquí
|
|
│ ├─ Continue Button: ← Arrastra ContinueButton aquí
|
|
│ ├─ Options Button: ← Arrastra OptionsButton aquí
|
|
│ └─ Quit Button: ← Arrastra QuitButton aquí
|
|
├─ Scene Configuration
|
|
│ └─ First Chapter Scene Name: "Chapter1"
|
|
└─ Debug
|
|
└─ Enable Debug Logging: ☐ false
|
|
```
|
|
|
|
> **¡Importante!** NO necesitas conectar eventos manualmente en el Inspector. El script **MainMenuController** los conecta automáticamente en `Awake()` usando `AddListener()`. Solo asegúrate de arrastrar las referencias de los botones en el Paso 3.
|
|
|
|
---
|
|
|
|
### 4.7. Agregar Managers Persistentes
|
|
|
|
Estos managers deben existir en MainMenu y persistir entre scenes con `DontDestroyOnLoad`.
|
|
|
|
**Paso 1:** Crear GameObject para CampaignManager
|
|
1. Click derecho en Hierarchy → `Create Empty`
|
|
2. Renombra a: `CampaignManager`
|
|
3. `Add Component → Campaign Manager`
|
|
|
|
**Paso 2:** Configurar CampaignManager en Inspector
|
|
```
|
|
Campaign Manager (Script)
|
|
├─ Campaign Config: (Ninguno) ← Por ahora dejarlo vacío
|
|
├─ Campaign State: ← Arrastra CampaignState.asset desde Resources
|
|
└─ (Otros campos se configurarán en Chapter scenes)
|
|
```
|
|
|
|
**Paso 3:** Crear GameObject para SaveSystem
|
|
1. Click derecho en Hierarchy → `Create Empty`
|
|
2. Renombra a: `SaveSystem`
|
|
3. `Add Component → Save System`
|
|
|
|
**No necesita configuración en Inspector** (todo es código)
|
|
|
|
**Paso 4:** Crear GameObject para AudioManager
|
|
1. Click derecho en Hierarchy → `Create Empty`
|
|
2. Renombra a: `AudioManager`
|
|
3. `Add Component → Audio Manager`
|
|
4. `Add Component → Audio Source` (2 veces, necesitas 2)
|
|
|
|
**Paso 5:** Configurar AudioManager
|
|
```
|
|
Audio Manager (Script)
|
|
├─ Sfx Source: ← Arrastra el primer Audio Source aquí
|
|
├─ Music Source: ← Arrastra el segundo Audio Source aquí
|
|
├─ Move Clip: (None) ← Configuraremos después con audio
|
|
├─ Capture Clip: (None)
|
|
├─ Check Clip: (None)
|
|
├─ Checkmate Clip: (None)
|
|
├─ Promotion Clip: (None)
|
|
└─ Invalid Move Clip: (None)
|
|
```
|
|
|
|
**Paso 6:** Configurar los Audio Sources
|
|
```
|
|
Audio Source 1 (SFX)
|
|
├─ Play On Awake: ☐ false
|
|
├─ Loop: ☐ false
|
|
└─ Volume: 1
|
|
|
|
Audio Source 2 (Music)
|
|
├─ Play On Awake: ☐ false
|
|
├─ Loop: ☑ true
|
|
└─ Volume: 0.5
|
|
```
|
|
|
|
**Paso 7:** Crear GameObject para SceneTransitionManager
|
|
1. Click derecho en Hierarchy → `Create Empty`
|
|
2. Renombra a: `SceneTransitionManager`
|
|
3. `Add Component → Scene Transition Manager`
|
|
|
|
**Paso 8:** Crear Canvas para Fade Overlay
|
|
1. Click derecho en `SceneTransitionManager` → `UI → Canvas`
|
|
2. Renombra a: `FadeCanvas`
|
|
3. Click derecho en `FadeCanvas` → `UI → Image`
|
|
4. Renombra a: `FadeImage`
|
|
|
|
**Paso 9:** Configurar FadeCanvas
|
|
```
|
|
Canvas
|
|
├─ Render Mode: Screen Space - Overlay
|
|
├─ Sort Order: 999 ← Importante, debe estar encima de todo
|
|
└─ Canvas Scaler: Scale With Screen Size (1920x1080)
|
|
```
|
|
|
|
**Paso 10:** Configurar FadeImage
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Stretch all (Alt+Shift+Click en cuadrado)
|
|
├─ Left: 0, Right: 0, Top: 0, Bottom: 0
|
|
|
|
Image (Script)
|
|
├─ Color: Black (R=0, G=0, B=0, A=0) ← Alpha en 0 inicialmente
|
|
└─ Raycast Target: ☑ true
|
|
```
|
|
|
|
**Paso 11:** Conectar referencias en SceneTransitionManager
|
|
```
|
|
Scene Transition Manager (Script)
|
|
├─ Fade Image: ← Arrastra FadeImage aquí
|
|
├─ Fade Duration: 0.5
|
|
└─ Fade Color: Black (R=0, G=0, B=0, A=1)
|
|
```
|
|
|
|
---
|
|
|
|
### ✅ CHECKPOINT 2: MainMenu Scene creada
|
|
|
|
Deberías tener en Hierarchy:
|
|
```
|
|
MainMenu
|
|
├─ Main Camera
|
|
├─ MainMenuCanvas
|
|
│ ├─ TitleText
|
|
│ └─ ButtonPanel
|
|
│ ├─ NewCampaignButton
|
|
│ ├─ ContinueButton
|
|
│ ├─ OptionsButton
|
|
│ └─ QuitButton
|
|
├─ GameController (MainMenuController)
|
|
├─ CampaignManager
|
|
├─ SaveSystem
|
|
├─ AudioManager (con 2 Audio Sources)
|
|
└─ SceneTransitionManager
|
|
└─ FadeCanvas
|
|
└─ FadeImage
|
|
```
|
|
|
|
**Guardar:** `Ctrl+S`
|
|
|
|
---
|
|
|
|
## 5. CREAR CHAPTER SCENES (1-2 horas)
|
|
|
|
### 5.1. Preparación - Entender la arquitectura del juego
|
|
|
|
**¿Cómo funciona el tablero de ajedrez en este proyecto?**
|
|
|
|
El tablero y todas las piezas **se instancian automáticamente en runtime** cuando das Play. No necesitas configurar manualmente 32 piezas en la scene.
|
|
|
|
**Esto significa que:**
|
|
- ✅ NO necesitas arrastrar piezas a la scene manualmente
|
|
- ✅ NO necesitas configurar posiciones iniciales manualmente
|
|
- ✅ SÍ necesitas tener GameManager en la scene (instancia el tablero)
|
|
- ✅ SÍ necesitas agregar los UI systems (DialogueUI, GameHUD, PauseMenu, etc.)
|
|
|
|
**Componentes base que debe tener cada Chapter scene:**
|
|
1. **Camera** - Para ver el juego
|
|
2. **GameManager** - Instancia el tablero y maneja la lógica de ajedrez
|
|
3. **DialogueSystem** - Maneja los diálogos del capítulo
|
|
4. **UI Canvases** - DialogueUI, GameHUD, PauseMenu, DeadKingRevealUI
|
|
|
|
---
|
|
|
|
### 5.2. Crear Chapter1.unity
|
|
|
|
**Paso 1:** Crear una scene básica nueva
|
|
1. `File → New Scene`
|
|
2. Selecciona template: **Basic (Built-In)** o **URP**
|
|
3. `File → Save As` → Guarda en `Assets/Scenes/Chapter1.unity`
|
|
|
|
**Paso 2:** Configurar Camera
|
|
```
|
|
Main Camera
|
|
├─ Clear Flags: Solid Color
|
|
├─ Background: #1A1A1A (gris muy oscuro) o el color que prefieras
|
|
├─ Projection: Perspective (si es 3D) u Orthographic (si es 2D)
|
|
└─ Position/Size: Ajusta para ver el tablero cuando se instancie
|
|
```
|
|
|
|
**Paso 3:** Agregar GameManager
|
|
1. Click derecho en Hierarchy → `Create Empty`
|
|
2. Renombra a: `GameManager`
|
|
3. `Add Component → Game Manager`
|
|
|
|
> **Importante:** El GameManager es quien instancia el tablero en `Start()` o `Awake()`. Al dar Play, verás el tablero aparecer automáticamente.
|
|
|
|
**Paso 4:** Test rápido
|
|
1. Presiona Play ▶
|
|
2. **Deberías ver:** El tablero de ajedrez con piezas en posición inicial
|
|
3. **Si no aparece:** Verifica que GameManager está configurado correctamente
|
|
4. Stop Play ⏹
|
|
|
|
> **Nota:** Si el tablero no aparece, es porque GameManager necesita referencias (prefabs de piezas, board material, etc.). Esto debería estar configurado ya si el proyecto compiló correctamente.
|
|
|
|
---
|
|
|
|
### 5.3. Agregar DialogueSystem
|
|
|
|
**Paso 1:** Crear GameObject
|
|
1. Click derecho en Hierarchy → `Create Empty`
|
|
2. Renombra a: `DialogueSystem`
|
|
|
|
**Paso 2:** Agregar componente
|
|
1. `Add Component → Dialogue System`
|
|
|
|
**Paso 3:** Configurar en Inspector
|
|
|
|
```
|
|
Dialogue System (Script)
|
|
├─ Configuración
|
|
│ ├─ Chars Per Second: 30
|
|
│ └─ Allow Skip: ☑ true
|
|
├─ Estado de Campaña
|
|
│ └─ Campaign State: ← Arrastra CampaignState.asset desde Resources
|
|
└─ Archivos de Diálogos (List - Size: 6)
|
|
├─ Element 0: ← Arrastra ch1_intro.json desde Assets/Game/Data/Dialogues/
|
|
├─ Element 1: ← Arrastra ch1_outro.json
|
|
├─ Element 2: ← Arrastra ch2_intro.json
|
|
├─ Element 3: ← Arrastra ch2_outro.json
|
|
├─ Element 4: ← Arrastra ch3_intro.json
|
|
└─ Element 5: ← Arrastra ch3_outro.json
|
|
```
|
|
|
|
> **Nota:** Los archivos .json aparecen en Unity como TextAssets. Simplemente arrástraslos desde la carpeta `Assets/Game/Data/Dialogues/` al array en Inspector.
|
|
|
|
---
|
|
|
|
### 5.4. Crear DialogueUI Canvas
|
|
|
|
**Paso 1:** Crear Canvas
|
|
1. Click derecho en Hierarchy → `UI → Canvas`
|
|
2. Renombra a: `DialogueCanvas`
|
|
|
|
**Paso 2:** Configurar Canvas
|
|
```
|
|
Canvas
|
|
├─ Render Mode: Screen Space - Overlay
|
|
├─ Sort Order: 100 ← Debe estar sobre GameHUD
|
|
└─ Canvas Scaler: Scale With Screen Size (1920x1080, Match=0.5)
|
|
```
|
|
|
|
**Paso 3:** Crear Panel de fondo
|
|
1. Click derecho en `DialogueCanvas` → `UI → Panel`
|
|
2. Renombra a: `DialoguePanel`
|
|
|
|
**Paso 4:** Configurar Panel
|
|
```
|
|
Rect Transform
|
|
├─ Anchor Presets: Bottom Stretch (Alt+Click)
|
|
├─ Height: 300
|
|
├─ Left: 100, Right: 100, Bottom: 50
|
|
|
|
Image (Script)
|
|
├─ Color: #000000 (negro)
|
|
├─ Material: None
|
|
└─ (Opcional: Alpha = 0.85 para semi-transparente)
|
|
```
|
|
|
|
**Paso 5:** Crear SpeakerNameText
|
|
1. Click derecho en `DialoguePanel` → `UI → Text - TextMeshPro`
|
|
2. Renombra a: `SpeakerNameText`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Top Left
|
|
├─ Pos X: 20, Pos Y: -20
|
|
├─ Width: 400
|
|
├─ Height: 40
|
|
|
|
TextMeshPro
|
|
├─ Text: "Speaker Name"
|
|
├─ Font Size: 28
|
|
├─ Font Style: Bold
|
|
├─ Alignment: Middle Left
|
|
└─ Color: #FFD700 (dorado)
|
|
```
|
|
|
|
**Paso 6:** Crear DialogueText
|
|
1. Click derecho en `DialoguePanel` → `UI → Text - TextMeshPro`
|
|
2. Renombra a: `DialogueText`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Top Stretch
|
|
├─ Pos Y: -70
|
|
├─ Left: 20, Right: 20
|
|
├─ Height: 150
|
|
|
|
TextMeshPro
|
|
├─ Text: "Dialogue text appears here..."
|
|
├─ Font Size: 24
|
|
├─ Alignment: Top Left
|
|
├─ Color: White
|
|
├─ Wrapping: ☑ Enabled
|
|
└─ Overflow: Truncate
|
|
```
|
|
|
|
**Paso 7:** Crear ContinueButton
|
|
1. Click derecho en `DialoguePanel` → `UI → Button - TextMeshPro`
|
|
2. Renombra a: `ContinueButton`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Bottom Right
|
|
├─ Pos X: -20, Pos Y: 20
|
|
├─ Width: 150
|
|
├─ Height: 50
|
|
|
|
Button (Script)
|
|
├─ Normal Color: #4A4A4A
|
|
├─ Highlighted: #6A6A6A
|
|
├─ Pressed: #2A2A2A
|
|
|
|
Text (TMP) del botón:
|
|
├─ Text: "CONTINUE"
|
|
├─ Font Size: 20
|
|
└─ Alignment: Center
|
|
```
|
|
|
|
**Paso 8:** Conectar DialogueUI script
|
|
1. Selecciona `DialogueCanvas`
|
|
2. `Add Component → Dialogue UI`
|
|
|
|
**Paso 9:** Configurar DialogueUI en Inspector
|
|
```
|
|
Dialogue UI (Script)
|
|
├─ Dialogue Panel: ← Arrastra DialoguePanel aquí
|
|
├─ Speaker Name Text: ← Arrastra SpeakerNameText
|
|
├─ Dialogue Text: ← Arrastra DialogueText
|
|
├─ Continue Button: ← Arrastra ContinueButton
|
|
├─ Type Speed: 0.05
|
|
└─ Continue Button Delay: 0.5
|
|
```
|
|
|
|
**Paso 10:** Conectar con DialogueSystem
|
|
1. Selecciona `DialogueSystem`
|
|
2. En Inspector, debería aparecer campo `Dialogue UI`
|
|
3. Arrastra `DialogueCanvas` al campo
|
|
|
|
**Paso 11:** Desactivar canvas inicialmente
|
|
- Selecciona `DialogueCanvas`
|
|
- Desmarca el checkbox al lado del nombre (GameObject inactivo)
|
|
- El DialogueSystem lo activará cuando necesite
|
|
|
|
---
|
|
|
|
### 5.5. Crear GameHUD Canvas
|
|
|
|
**Paso 1:** Crear Canvas
|
|
1. Click derecho en Hierarchy → `UI → Canvas`
|
|
2. Renombra a: `GameHUDCanvas`
|
|
|
|
**Paso 2:** Configurar Canvas
|
|
```
|
|
Canvas
|
|
├─ Render Mode: Screen Space - Overlay
|
|
├─ Sort Order: 50
|
|
└─ Canvas Scaler: Scale With Screen Size (1920x1080)
|
|
```
|
|
|
|
**Paso 3:** Crear TurnText
|
|
1. Click derecho en `GameHUDCanvas` → `UI → Text - TextMeshPro`
|
|
2. Renombra a: `TurnText`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Top Center
|
|
├─ Pos Y: -30
|
|
├─ Width: 300
|
|
├─ Height: 60
|
|
|
|
TextMeshPro
|
|
├─ Text: "White's Turn"
|
|
├─ Font Size: 32
|
|
├─ Font Style: Bold
|
|
├─ Alignment: Center
|
|
└─ Color: White
|
|
```
|
|
|
|
**Paso 4:** Crear MoveCountText
|
|
1. Click derecho en `GameHUDCanvas` → `UI → Text - TextMeshPro`
|
|
2. Renombra a: `MoveCountText`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Top Right
|
|
├─ Pos X: -30, Pos Y: -30
|
|
├─ Width: 200
|
|
├─ Height: 50
|
|
|
|
TextMeshPro
|
|
├─ Text: "Moves: 0"
|
|
├─ Font Size: 24
|
|
├─ Alignment: Middle Right
|
|
└─ Color: #CCCCCC
|
|
```
|
|
|
|
**Paso 5:** Crear CheckIndicator
|
|
1. Click derecho en `GameHUDCanvas` → `UI → Panel`
|
|
2. Renombra a: `CheckIndicator`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Top Center
|
|
├─ Pos Y: -100
|
|
├─ Width: 200
|
|
├─ Height: 60
|
|
|
|
Image (Script)
|
|
├─ Color: #FF0000 (rojo)
|
|
└─ (Opcional: Alpha = 0.7)
|
|
```
|
|
|
|
**Paso 6:** Agregar texto al CheckIndicator
|
|
1. Click derecho en `CheckIndicator` → `UI → Text - TextMeshPro`
|
|
2. Renombra a: `CheckText`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Stretch all
|
|
├─ Left: 0, Right: 0, Top: 0, Bottom: 0
|
|
|
|
TextMeshPro
|
|
├─ Text: "CHECK!"
|
|
├─ Font Size: 32
|
|
├─ Font Style: Bold
|
|
├─ Alignment: Center
|
|
└─ Color: White
|
|
```
|
|
|
|
**Paso 7:** Desactivar CheckIndicator inicialmente
|
|
- Selecciona `CheckIndicator`
|
|
- Desmarca checkbox (GameObject inactivo)
|
|
|
|
**Paso 8:** Crear CapturedPieces Panels (2 paneles)
|
|
|
|
**Panel para piezas blancas capturadas:**
|
|
1. Click derecho en `GameHUDCanvas` → `UI → Panel`
|
|
2. Renombra a: `WhiteCapturedPanel`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Middle Left
|
|
├─ Pos X: 20
|
|
├─ Width: 100
|
|
├─ Height: 400
|
|
|
|
Image (Script)
|
|
├─ Color: #333333
|
|
```
|
|
|
|
**Agregar Horizontal Layout Group:**
|
|
```
|
|
Add Component → Layout → Horizontal Layout Group
|
|
├─ Spacing: 5
|
|
├─ Child Alignment: Upper Center
|
|
└─ Child Force Expand: Width ☐, Height ☐
|
|
```
|
|
|
|
**Panel para piezas negras capturadas:**
|
|
1. Duplica `WhiteCapturedPanel` (Ctrl+D)
|
|
2. Renombra a: `BlackCapturedPanel`
|
|
3. Cambia Anchor a: Middle Right
|
|
4. Pos X: -20
|
|
|
|
**Paso 9:** Crear PauseButton
|
|
1. Click derecho en `GameHUDCanvas` → `UI → Button - TextMeshPro`
|
|
2. Renombra a: `PauseButton`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Top Left
|
|
├─ Pos X: 30, Pos Y: -30
|
|
├─ Width: 100
|
|
├─ Height: 50
|
|
|
|
Button (Script): (default)
|
|
|
|
Text (TMP):
|
|
├─ Text: "PAUSE"
|
|
├─ Font Size: 20
|
|
└─ Alignment: Center
|
|
```
|
|
|
|
**Paso 10:** Conectar GameHUD script
|
|
1. Selecciona `GameHUDCanvas`
|
|
2. `Add Component → Game HUD`
|
|
|
|
**Paso 11:** Configurar GameHUD en Inspector
|
|
```
|
|
Game HUD (Script)
|
|
├─ Turn Text: ← Arrastra TurnText
|
|
├─ Move Count Text: ← Arrastra MoveCountText
|
|
├─ Check Indicator: ← Arrastra CheckIndicator (el GameObject)
|
|
├─ White Captured Container: ← Arrastra WhiteCapturedPanel
|
|
├─ Black Captured Container: ← Arrastra BlackCapturedPanel
|
|
├─ Pause Button: ← Arrastra PauseButton
|
|
└─ Captured Piece Prefab: (None) ← Crearemos después
|
|
```
|
|
|
|
---
|
|
|
|
### 5.6. Crear PauseMenu Canvas
|
|
|
|
**Paso 1:** Crear Canvas
|
|
1. Click derecho en Hierarchy → `UI → Canvas`
|
|
2. Renombra a: `PauseMenuCanvas`
|
|
|
|
**Paso 2:** Configurar Canvas
|
|
```
|
|
Canvas
|
|
├─ Render Mode: Screen Space - Overlay
|
|
├─ Sort Order: 200 ← Debe estar sobre todo
|
|
└─ Canvas Scaler: Scale With Screen Size (1920x1080)
|
|
```
|
|
|
|
**Paso 3:** Crear Panel de fondo oscuro
|
|
1. Click derecho en `PauseMenuCanvas` → `UI → Image`
|
|
2. Renombra a: `DimBackground`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Stretch all
|
|
├─ Left: 0, Right: 0, Top: 0, Bottom: 0
|
|
|
|
Image (Script)
|
|
├─ Color: #000000 (negro)
|
|
├─ Alpha: 0.8 (semi-transparente)
|
|
└─ Raycast Target: ☑ true (bloquea clicks)
|
|
```
|
|
|
|
**Paso 4:** Crear Panel principal
|
|
1. Click derecho en `PauseMenuCanvas` → `UI → Panel`
|
|
2. Renombra a: `PausePanel`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Middle Center
|
|
├─ Width: 500
|
|
├─ Height: 600
|
|
|
|
Image (Script)
|
|
├─ Color: #2C2C2C (gris oscuro)
|
|
```
|
|
|
|
**Paso 5:** Crear Título "PAUSED"
|
|
1. Click derecho en `PausePanel` → `UI → Text - TextMeshPro`
|
|
2. Renombra a: `PauseTitle`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Top Center
|
|
├─ Pos Y: -50
|
|
├─ Width: 400
|
|
├─ Height: 80
|
|
|
|
TextMeshPro
|
|
├─ Text: "PAUSED"
|
|
├─ Font Size: 60
|
|
├─ Font Style: Bold
|
|
├─ Alignment: Center
|
|
└─ Color: White
|
|
```
|
|
|
|
**Paso 6:** Crear ButtonsContainer
|
|
1. Click derecho en `PausePanel` → `UI → Panel`
|
|
2. Renombra a: `ButtonsContainer`
|
|
3. Desactiva componente Image (checkbox)
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Middle Center
|
|
├─ Width: 400
|
|
├─ Height: 400
|
|
|
|
Vertical Layout Group
|
|
├─ Padding: 20
|
|
├─ Spacing: 20
|
|
├─ Child Alignment: Middle Center
|
|
└─ Child Controls Size: Width ☑, Height ☑
|
|
```
|
|
|
|
**Paso 7:** Crear 4 botones (Resume, Save, MainMenu, Quit)
|
|
|
|
Para CADA botón:
|
|
1. Click derecho en `ButtonsContainer` → `UI → Button - TextMeshPro`
|
|
2. Renombra:
|
|
- `ResumeButton`
|
|
- `SaveButton`
|
|
- `MainMenuButton`
|
|
- `QuitButton`
|
|
|
|
```
|
|
Rect Transform:
|
|
├─ Min Height: 70
|
|
|
|
Button (Script):
|
|
├─ Normal: #4A4A4A
|
|
├─ Highlighted: #6A6A6A
|
|
├─ Pressed: #2A2A2A
|
|
|
|
Layout Element (Add Component):
|
|
├─ Min Height: 70
|
|
└─ Preferred Height: 70
|
|
|
|
Text (TMP):
|
|
├─ Text: "RESUME" / "SAVE" / "MAIN MENU" / "QUIT"
|
|
├─ Font Size: 28
|
|
└─ Alignment: Center
|
|
```
|
|
|
|
**Paso 8:** Conectar PauseMenuController script
|
|
1. Selecciona `PauseMenuCanvas`
|
|
2. `Add Component → Pause Menu Controller`
|
|
|
|
**Paso 9:** Configurar en Inspector
|
|
```
|
|
Pause Menu Controller (Script)
|
|
├─ Pause Panel: ← Arrastra PausePanel
|
|
├─ Resume Button: ← Arrastra ResumeButton
|
|
├─ Save Button: ← Arrastra SaveButton
|
|
├─ Main Menu Button: ← Arrastra MainMenuButton
|
|
└─ Quit Button: ← Arrastra QuitButton
|
|
```
|
|
|
|
**Paso 10:** Conectar eventos de botones
|
|
- `ResumeButton` → `PauseMenuController.OnResumeClick()`
|
|
- `SaveButton` → `PauseMenuController.OnSaveClick()`
|
|
- `MainMenuButton` → `PauseMenuController.OnMainMenuClick()`
|
|
- `QuitButton` → `PauseMenuController.OnQuitClick()`
|
|
|
|
**Paso 11:** Conectar PauseButton con PauseMenuController
|
|
1. Selecciona `PauseButton` (en GameHUDCanvas)
|
|
2. En componente Button, On Click():
|
|
- Arrastra `PauseMenuCanvas` (tiene PauseMenuController)
|
|
- Dropdown → `PauseMenuController → ShowPauseMenu()`
|
|
|
|
**Paso 12:** Desactivar PauseMenuCanvas inicialmente
|
|
- Selecciona `PauseMenuCanvas`
|
|
- Desmarca checkbox (inactivo)
|
|
|
|
---
|
|
|
|
### 5.7. Crear DeadKingRevealUI Canvas
|
|
|
|
**Paso 1:** Crear Canvas
|
|
1. Click derecho en Hierarchy → `UI → Canvas`
|
|
2. Renombra a: `DeadKingRevealCanvas`
|
|
|
|
**Paso 2:** Configurar Canvas
|
|
```
|
|
Canvas
|
|
├─ Render Mode: Screen Space - Overlay
|
|
├─ Sort Order: 150
|
|
└─ Canvas Scaler: Scale With Screen Size (1920x1080)
|
|
```
|
|
|
|
**Paso 3:** Crear Background
|
|
1. Click derecho en `DeadKingRevealCanvas` → `UI → Image`
|
|
2. Renombra a: `RevealBackground`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Stretch all
|
|
├─ Left: 0, Right: 0, Top: 0, Bottom: 0
|
|
|
|
Image (Script)
|
|
├─ Color: Black
|
|
└─ Alpha: 0.9
|
|
```
|
|
|
|
**Paso 4:** Crear Panel principal
|
|
1. Click derecho en `DeadKingRevealCanvas` → `UI → Panel`
|
|
2. Renombra a: `RevealPanel`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Middle Center
|
|
├─ Width: 800
|
|
├─ Height: 600
|
|
|
|
Image (Script)
|
|
├─ Color: #1A0A0A (rojo muy oscuro)
|
|
```
|
|
|
|
**Paso 5:** Crear TitleText
|
|
1. Click derecho en `RevealPanel` → `UI → Text - TextMeshPro`
|
|
2. Renombra a: `TitleText`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Top Center
|
|
├─ Pos Y: -50
|
|
├─ Width: 700
|
|
├─ Height: 80
|
|
|
|
TextMeshPro
|
|
├─ Text: "YOU WERE DEFEATED BY..."
|
|
├─ Font Size: 36
|
|
├─ Font Style: Bold
|
|
├─ Alignment: Center
|
|
└─ Color: #FF4444 (rojo)
|
|
```
|
|
|
|
**Paso 6:** Crear DeadKingNameText
|
|
1. Click derecho en `RevealPanel` → `UI → Text - TextMeshPro`
|
|
2. Renombra a: `DeadKingNameText`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Middle Center
|
|
├─ Pos Y: 50
|
|
├─ Width: 700
|
|
├─ Height: 100
|
|
|
|
TextMeshPro
|
|
├─ Text: "DEAD KING NAME"
|
|
├─ Font Size: 56
|
|
├─ Font Style: Bold
|
|
├─ Alignment: Center
|
|
└─ Color: #FFD700 (dorado)
|
|
```
|
|
|
|
**Paso 7:** Crear DeadKingStatsText
|
|
1. Click derecho en `RevealPanel` → `UI → Text - TextMeshPro`
|
|
2. Renombra a: `DeadKingStatsText`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Middle Center
|
|
├─ Pos Y: -80
|
|
├─ Width: 700
|
|
├─ Height: 200
|
|
|
|
TextMeshPro
|
|
├─ Text: "Stats will appear here"
|
|
├─ Font Size: 24
|
|
├─ Alignment: Center
|
|
└─ Color: #CCCCCC
|
|
```
|
|
|
|
**Paso 8:** Crear ContinueButton
|
|
1. Click derecho en `RevealPanel` → `UI → Button - TextMeshPro`
|
|
2. Renombra a: `ContinueButton`
|
|
|
|
```
|
|
Rect Transform
|
|
├─ Anchor: Bottom Center
|
|
├─ Pos Y: 50
|
|
├─ Width: 300
|
|
├─ Height: 70
|
|
|
|
Button (Script): (default)
|
|
|
|
Text (TMP):
|
|
├─ Text: "CONTINUE"
|
|
├─ Font Size: 32
|
|
└─ Alignment: Center
|
|
```
|
|
|
|
**Paso 9:** Conectar DeadKingRevealUI script
|
|
1. Selecciona `DeadKingRevealCanvas`
|
|
2. `Add Component → Dead King Reveal UI`
|
|
|
|
**Paso 10:** Configurar en Inspector
|
|
```
|
|
Dead King Reveal UI (Script)
|
|
├─ Reveal Panel: ← Arrastra RevealPanel
|
|
├─ Title Text: ← Arrastra TitleText
|
|
├─ Dead King Name Text: ← Arrastra DeadKingNameText
|
|
├─ Dead King Stats Text: ← Arrastra DeadKingStatsText
|
|
└─ Continue Button: ← Arrastra ContinueButton
|
|
```
|
|
|
|
**Paso 11:** Desactivar canvas inicialmente
|
|
- Selecciona `DeadKingRevealCanvas`
|
|
- Desmarca checkbox
|
|
|
|
---
|
|
|
|
### 5.8. Conectar CampaignManager con todas las UIs
|
|
|
|
**Paso 1:** Verificar que CampaignManager exista en scene
|
|
- Si no existe, créalo (pero debería persistir desde MainMenu con DontDestroyOnLoad)
|
|
- Si quieres tenerlo en esta scene también (para testing): Create Empty → Add Component
|
|
|
|
**Paso 2:** Configurar CampaignManager en Inspector
|
|
```
|
|
Campaign Manager (Script)
|
|
├─ Campaign Config: (None) ← Opcional por ahora
|
|
├─ Campaign State: ← CampaignState.asset
|
|
├─ Dialogue System: ← Arrastra DialogueSystem GameObject
|
|
├─ Dialogue UI: ← Arrastra DialogueCanvas GameObject
|
|
└─ Dead King Reveal UI: ← Arrastra DeadKingRevealCanvas GameObject
|
|
```
|
|
|
|
---
|
|
|
|
### 5.9. Duplicar para Chapter2 y Chapter3
|
|
|
|
**Paso 1:** Duplicar Chapter1.unity
|
|
1. En Project window, selecciona `Chapter1.unity`
|
|
2. `Ctrl+D` para duplicar
|
|
3. Renombra a `Chapter2.unity`
|
|
4. Duplica nuevamente → `Chapter3.unity`
|
|
|
|
**Paso 2:** Ajustar cada chapter (opcional)
|
|
- Puedes cambiar dificultad de AI
|
|
- Cambiar tablero inicial
|
|
- Ajustar diálogos (ya están referenciados en DialogueSystem)
|
|
|
|
> **Nota:** Los 3 chapters comparten la misma estructura, solo cambian los datos de configuración.
|
|
|
|
---
|
|
|
|
### ✅ CHECKPOINT 3: Chapter Scenes creadas
|
|
|
|
Deberías tener en `Assets/Scenes/`:
|
|
- ✅ `Chapter1.unity`
|
|
- ✅ `Chapter2.unity`
|
|
- ✅ `Chapter3.unity`
|
|
|
|
Cada una con:
|
|
```
|
|
Hierarchy:
|
|
├─ Main Camera
|
|
├─ Board (tu sistema de tablero)
|
|
├─ GameManager
|
|
├─ DialogueSystem
|
|
├─ DialogueCanvas (inactiva)
|
|
│ └─ DialoguePanel
|
|
│ ├─ SpeakerNameText
|
|
│ ├─ DialogueText
|
|
│ └─ ContinueButton
|
|
├─ GameHUDCanvas (activa)
|
|
│ ├─ TurnText
|
|
│ ├─ MoveCountText
|
|
│ ├─ CheckIndicator (inactiva)
|
|
│ ├─ WhiteCapturedPanel
|
|
│ ├─ BlackCapturedPanel
|
|
│ └─ PauseButton
|
|
├─ PauseMenuCanvas (inactiva)
|
|
│ └─ PausePanel
|
|
│ ├─ ResumeButton
|
|
│ ├─ SaveButton
|
|
│ ├─ MainMenuButton
|
|
│ └─ QuitButton
|
|
├─ DeadKingRevealCanvas (inactiva)
|
|
│ └─ RevealPanel
|
|
│ ├─ DeadKingNameText
|
|
│ ├─ DeadKingStatsText
|
|
│ └─ ContinueButton
|
|
└─ (CampaignManager - puede estar aquí o en MainMenu con DontDestroyOnLoad)
|
|
```
|
|
|
|
---
|
|
|
|
## 6. CONFIGURAR AUDIO (20 minutos)
|
|
|
|
### 6.1. Obtener AudioClips
|
|
|
|
**Opción A:** Usar placeholders temporales
|
|
- En Unity Asset Store, busca "Free SFX" packs
|
|
- Importa pack básico de sonidos (click, whoosh, etc.)
|
|
|
|
**Opción B:** Crear audio clips de prueba
|
|
- Usa https://sfxr.me/ para generar SFX simples
|
|
- Exporta como .wav
|
|
|
|
**Opción C:** Dejar vacío por ahora
|
|
- El juego funciona sin audio
|
|
|
|
---
|
|
|
|
### 6.2. Importar AudioClips
|
|
|
|
**Paso 1:** Crear carpetas
|
|
```
|
|
Assets/Game/Audio/
|
|
├─ SFX/
|
|
└─ Music/
|
|
```
|
|
|
|
**Paso 2:** Importar archivos de audio
|
|
1. Arrastra archivos .wav o .mp3 a las carpetas correspondientes
|
|
2. Renombra según necesites:
|
|
- `move.wav`
|
|
- `capture.wav`
|
|
- `check.wav`
|
|
- `checkmate.wav`
|
|
- `promotion.wav`
|
|
- `invalid_move.wav`
|
|
|
|
**Paso 3:** Configurar import settings (para SFX)
|
|
1. Selecciona cada archivo SFX
|
|
2. En Inspector:
|
|
```
|
|
Audio Clip Import Settings
|
|
├─ Force To Mono: ☑ (para SFX cortos)
|
|
├─ Load In Background: ☐
|
|
├─ Preload Audio Data: ☑
|
|
├─ Load Type: Decompress On Load (para SFX cortos)
|
|
└─ Compression Format: Vorbis (calidad media = 70%)
|
|
```
|
|
|
|
**Paso 4:** Configurar import settings (para música)
|
|
```
|
|
Audio Clip Import Settings
|
|
├─ Force To Mono: ☐
|
|
├─ Load In Background: ☑
|
|
├─ Preload Audio Data: ☐
|
|
├─ Load Type: Streaming (para música larga)
|
|
└─ Compression Format: Vorbis (calidad = 100%)
|
|
```
|
|
|
|
---
|
|
|
|
### 6.3. Asignar AudioClips a AudioManager
|
|
|
|
**Paso 1:** Abrir MainMenu scene
|
|
- Selecciona `AudioManager` GameObject
|
|
|
|
**Paso 2:** Asignar clips en Inspector
|
|
```
|
|
Audio Manager (Script)
|
|
├─ Move Clip: ← Arrastra move.wav
|
|
├─ Capture Clip: ← Arrastra capture.wav
|
|
├─ Check Clip: ← Arrastra check.wav
|
|
├─ Checkmate Clip: ← Arrastra checkmate.wav
|
|
├─ Promotion Clip: ← Arrastra promotion.wav
|
|
└─ Invalid Move Clip: ← Arrastra invalid_move.wav
|
|
```
|
|
|
|
**Paso 3:** Guardar scene
|
|
- `Ctrl+S`
|
|
|
|
> **Nota:** AudioManager es DontDestroyOnLoad, así que esta configuración aplica a todas las scenes.
|
|
|
|
---
|
|
|
|
### ✅ CHECKPOINT 4: Audio configurado
|
|
|
|
Deberías tener:
|
|
- ✅ AudioClips en `Assets/Game/Audio/SFX/`
|
|
- ✅ AudioManager con todos los clips asignados
|
|
- ✅ 2 Audio Sources configurados (SFX y Music)
|
|
|
|
---
|
|
|
|
## 7. CREAR PREFABS DE UI (30 minutos)
|
|
|
|
### 7.1. MoveIndicator Prefab
|
|
|
|
**Paso 1:** Crear GameObject en scene temporal
|
|
1. Abre cualquier scene (ej: Chapter1.unity)
|
|
2. Click derecho en Hierarchy → `2D Object → Sprite`
|
|
3. Renombra a: `MoveIndicator`
|
|
|
|
**Paso 2:** Configurar componentes
|
|
```
|
|
Transform
|
|
├─ Position: (0, 0, 0)
|
|
└─ Scale: (0.8, 0.8, 1)
|
|
|
|
Sprite Renderer
|
|
├─ Sprite: (Circle sprite - Unity built-in o custom)
|
|
├─ Color: #00FF00 (verde)
|
|
├─ Sorting Layer: Default
|
|
└─ Order in Layer: 10
|
|
```
|
|
|
|
**Para obtener sprite de círculo:**
|
|
- Opción A: Unity built-in → `Knob` sprite (busca en assets default)
|
|
- Opción B: Crear en `Assets/Game/Sprites/UI/`:
|
|
1. Usa Photoshop/GIMP para crear círculo 64x64 px verde semi-transparente
|
|
2. Importa como sprite
|
|
|
|
**Paso 3:** Convertir a Prefab
|
|
1. Arrastra `MoveIndicator` desde Hierarchy a `Assets/Game/Prefabs/UI/`
|
|
2. Borra el GameObject de la Hierarchy (ya está como prefab)
|
|
|
|
---
|
|
|
|
### 7.2. CapturedPieceIcon Prefab
|
|
|
|
**Paso 1:** Crear Canvas vacío temporal
|
|
1. Create Empty → `TempCanvas`
|
|
2. Add Component → Canvas
|
|
3. Render Mode: World Space (no importa, es solo para crear el prefab)
|
|
|
|
**Paso 2:** Crear Image
|
|
1. Click derecho en `TempCanvas` → `UI → Image`
|
|
2. Renombra a: `CapturedPieceIcon`
|
|
|
|
**Paso 3:** Configurar RectTransform
|
|
```
|
|
Rect Transform
|
|
├─ Width: 40
|
|
├─ Height: 40
|
|
└─ Scale: (1, 1, 1)
|
|
```
|
|
|
|
**Paso 4:** Configurar Image
|
|
```
|
|
Image (Script)
|
|
├─ Source Image: (Ninguno) ← Se asignará en runtime
|
|
├─ Color: White
|
|
├─ Raycast Target: ☐ false
|
|
└─ Preserve Aspect: ☑ true
|
|
```
|
|
|
|
**Paso 5:** Convertir a Prefab
|
|
1. Arrastra `CapturedPieceIcon` (solo el Image, no el Canvas) a `Assets/Game/Prefabs/UI/`
|
|
2. Borra `TempCanvas` de Hierarchy
|
|
|
|
---
|
|
|
|
### 7.3. Asignar Prefabs a GameHUD
|
|
|
|
**Paso 1:** Abrir cada Chapter scene (Chapter1, 2, 3)
|
|
|
|
**Paso 2:** Seleccionar GameHUDCanvas
|
|
```
|
|
Game HUD (Script)
|
|
├─ Captured Piece Prefab: ← Arrastra CapturedPieceIcon prefab desde Project
|
|
└─ (Otros campos ya configurados)
|
|
```
|
|
|
|
**Paso 3:** Repetir para Chapter2 y Chapter3
|
|
|
|
**Paso 4:** Guardar todas las scenes
|
|
- `Ctrl+S` en cada una
|
|
|
|
---
|
|
|
|
### ✅ CHECKPOINT 5: Prefabs creados
|
|
|
|
Deberías tener en `Assets/Game/Prefabs/UI/`:
|
|
- ✅ `MoveIndicator.prefab`
|
|
- ✅ `CapturedPieceIcon.prefab`
|
|
|
|
Y asignados en GameHUD de las 3 chapter scenes.
|
|
|
|
---
|
|
|
|
## 8. CONFIGURAR BUILD SETTINGS (10 minutos)
|
|
|
|
### 8.1. Agregar Scenes al Build
|
|
|
|
**Paso 1:** Abrir Build Settings
|
|
- `File → Build Settings` (o `Ctrl+Shift+B`)
|
|
|
|
**Paso 2:** Agregar scenes en orden
|
|
1. Click `Add Open Scenes` si tienes alguna abierta, o
|
|
2. Arrastra scenes desde Project window a "Scenes In Build"
|
|
|
|
**Orden correcto:**
|
|
```
|
|
Scenes In Build:
|
|
├─ 0: MainMenu ✅
|
|
├─ 1: Chapter1 ✅
|
|
├─ 2: Chapter2 ✅
|
|
└─ 3: Chapter3 ✅
|
|
```
|
|
|
|
> **Importante:** MainMenu DEBE ser índice 0 (es la scene inicial)
|
|
|
|
**Paso 3:** Verificar checkboxes
|
|
- Todas deben tener checkbox marcado (✅)
|
|
|
|
**Paso 4:** Configurar Platform
|
|
```
|
|
Platform: Windows, Mac, Linux
|
|
├─ Target Platform: Windows
|
|
├─ Architecture: x86_64
|
|
└─ Server Build: ☐ (desactivado)
|
|
```
|
|
|
|
**Paso 5:** Cerrar Build Settings (NO necesitas hacer Build todavía)
|
|
|
|
---
|
|
|
|
### ✅ CHECKPOINT 6: Build configurado
|
|
|
|
- ✅ 4 scenes en Build Settings
|
|
- ✅ MainMenu como scene índice 0
|
|
- ✅ Platform configurado
|
|
|
|
---
|
|
|
|
## 9. CONFIGURAR INPUT SYSTEM (10 minutos)
|
|
|
|
### 9.1. Verificar Input Actions Asset
|
|
|
|
**Paso 1:** Localizar InputSystem_Actions.inputactions
|
|
- Debería estar en: `Assets/InputSystem_Actions.inputactions`
|
|
|
|
**Paso 2:** Abrir el asset (doble click)
|
|
- Se abre el Input Actions editor window
|
|
|
|
**Paso 3:** Verificar que existe "Pause" action
|
|
```
|
|
Action Maps:
|
|
└─ UI (o Player)
|
|
└─ Actions:
|
|
├─ Navigate
|
|
├─ Submit
|
|
├─ Cancel
|
|
└─ Pause ← Debe existir
|
|
```
|
|
|
|
**Si NO existe "Pause":**
|
|
1. Selecciona Action Map (ej: "UI" o crea uno nuevo "Gameplay")
|
|
2. Click `+` en sección Actions
|
|
3. Renombra a: `Pause`
|
|
4. En "Properties":
|
|
- Action Type: Button
|
|
- Control Type: Any
|
|
5. Click `+` junto a `<No Binding>`
|
|
6. Path: `<Keyboard>/escape`
|
|
7. Click `+` nuevamente (para agregar gamepad)
|
|
8. Path: `<Gamepad>/start`
|
|
|
|
**Paso 4:** Guardar cambios
|
|
- Click `Save Asset` en la ventana de Input Actions
|
|
- Cerrar ventana
|
|
|
|
**Paso 5:** Verificar que C# class está generada
|
|
- Debería existir `InputSystem_Actions.cs` al lado del `.inputactions`
|
|
- Si NO existe:
|
|
1. Selecciona `InputSystem_Actions.inputactions`
|
|
2. En Inspector: `☑ Generate C# Class`
|
|
3. Click `Apply`
|
|
|
|
---
|
|
|
|
### 9.2. Conectar Input con PauseMenuController
|
|
|
|
**Nota:** El código de PauseMenuController ya debería manejar esto automáticamente en `Update()` checando `Input.GetKeyDown(KeyCode.Escape)`.
|
|
|
|
**Si quieres usar New Input System:**
|
|
1. Abre `PauseMenuController.cs`
|
|
2. Reemplaza el check de escape por:
|
|
```csharp
|
|
// En vez de:
|
|
if (Input.GetKeyDown(KeyCode.Escape)) { ... }
|
|
|
|
// Usa:
|
|
if (Keyboard.current.escapeKey.wasPressedThisFrame) { ... }
|
|
```
|
|
|
|
**Pero esto ya está implementado en el código actual, así que no necesitas cambiar nada.**
|
|
|
|
---
|
|
|
|
### ✅ CHECKPOINT 7: Input configurado
|
|
|
|
- ✅ InputActions asset tiene "Pause" action
|
|
- ✅ Pause responde a Escape y Gamepad Start
|
|
- ✅ C# class generada
|
|
|
|
---
|
|
|
|
## 10. TESTING Y VERIFICACIÓN (30 minutos)
|
|
|
|
### 10.1. Test 1: MainMenu Scene
|
|
|
|
**Paso 1:** Abrir MainMenu scene
|
|
- Doble click en `Assets/Scenes/MainMenu.unity`
|
|
|
|
**Paso 2:** Enter Play Mode
|
|
- Click Play ▶ (o F5)
|
|
|
|
**Verificar:**
|
|
- ✅ Se ve el título "AJEDREZ PURGATORIO"
|
|
- ✅ 4 botones visibles: New Campaign, Continue, Options, Quit
|
|
- ✅ Continue button está desactivado (no hay saves)
|
|
- ✅ Click en New Campaign → Carga Chapter1 scene (con fade)
|
|
- ✅ No hay errores en Console
|
|
|
|
**Posibles problemas:**
|
|
- ❌ "CampaignState is null" → Verificar que está en Resources y asignado
|
|
- ❌ "Scene not found" → Verificar Build Settings
|
|
- ❌ Botón no responde → Verificar eventos conectados
|
|
|
|
---
|
|
|
|
### 10.2. Test 2: Chapter1 Gameplay
|
|
|
|
**Paso 1:** Desde Play Mode en MainMenu, click New Campaign
|
|
- Debería cargar Chapter1 scene
|
|
|
|
**Verificar:**
|
|
- ✅ Tablero de ajedrez visible
|
|
- ✅ GameHUD muestra "White's Turn" y "Moves: 0"
|
|
- ✅ Puede mover piezas (funcionalidad ya implementada)
|
|
- ✅ Turn text cambia de color al cambiar turno
|
|
- ✅ No aparece DialogueUI (se muestra solo cuando se llama)
|
|
|
|
**Paso 2:** Probar Pause
|
|
- Presiona `Escape`
|
|
|
|
**Verificar:**
|
|
- ✅ Se oscurece la pantalla
|
|
- ✅ Aparece Pause Menu con 4 botones
|
|
- ✅ Tiempo se detiene (piezas no se pueden mover)
|
|
- ✅ Click Resume → Vuelve al juego
|
|
- ✅ Escape otra vez → Pause nuevamente
|
|
|
|
**Paso 3:** Probar Save
|
|
1. Hacer algunos movimientos (ej: 5 moves)
|
|
2. Pause → Click Save
|
|
3. Verificar Console: "Game saved to slot X"
|
|
4. Resume
|
|
|
|
**Paso 4:** Volver a Main Menu
|
|
1. Pause → Main Menu
|
|
2. Debería volver a MainMenu scene
|
|
|
|
**Verificar:**
|
|
- ✅ Continue button ahora está ACTIVO (hay save)
|
|
- ✅ Click Continue → Carga el save (vuelve a Chapter1 con estado guardado)
|
|
|
|
---
|
|
|
|
### 10.3. Test 3: Dialogue System
|
|
|
|
**Paso 1:** Forzar activación de diálogo manualmente
|
|
- En Scene view, con Play Mode activo:
|
|
1. Busca `DialogueSystem` en Hierarchy
|
|
2. En Inspector, busca método público `StartDialogue(string)`
|
|
3. NO puedes llamarlo desde Inspector, pero puedes:
|
|
|
|
**Opción A:** Modificar temporalmente CampaignManager
|
|
1. Stop Play Mode
|
|
2. Abre `CampaignManager.cs`
|
|
3. En `Start()`, agrega:
|
|
```csharp
|
|
void Start() {
|
|
// Testing: Show intro dialogue immediately
|
|
if (_dialogueSystem != null) {
|
|
_dialogueSystem.StartDialogue("c1_intro");
|
|
}
|
|
}
|
|
```
|
|
4. Guardar script
|
|
5. Enter Play Mode → Debería mostrar diálogo intro de Chapter 1
|
|
|
|
**Verificar:**
|
|
- ✅ DialoguePanel aparece en pantalla
|
|
- ✅ Texto hace typewriter effect (aparece letra por letra)
|
|
- ✅ Speaker name aparece arriba
|
|
- ✅ Continue button se activa después de typewriter
|
|
- ✅ Click Continue → Siguiente línea
|
|
- ✅ Al final del diálogo → Panel desaparece
|
|
|
|
**Paso 2:** Revertir cambio temporal
|
|
- Borra el código de testing de CampaignManager.Start()
|
|
|
|
---
|
|
|
|
### 10.4. Test 4: DeadKingPool Persistence
|
|
|
|
**Paso 1:** Stop Play Mode
|
|
|
|
**Paso 2:** Abrir DeadKingPool Tests
|
|
1. `Window → General → Test Runner`
|
|
2. Tab: PlayMode
|
|
3. Busca: `DeadKingPoolTests`
|
|
|
|
**Paso 3:** Run Tests
|
|
- Click `Run All` en Test Runner window
|
|
|
|
**Verificar:**
|
|
- ✅ Todos los tests pasan (17/17 verde)
|
|
- ✅ No hay errores en Console
|
|
|
|
**Si fallan tests:**
|
|
- Revisar que DeadKingPool.asset está en Resources
|
|
- Revisar logs de Console para ver detalles
|
|
|
|
---
|
|
|
|
### 10.5. Test 5: SaveSystem
|
|
|
|
**Paso 1:** Test de Save/Load completo
|
|
|
|
**En Play Mode:**
|
|
1. New Campaign
|
|
2. Hacer 10 movimientos
|
|
3. Capturar una pieza (si es posible)
|
|
4. Pause → Save
|
|
5. Continuar jugando (hacer 5 movimientos más)
|
|
6. Pause → Main Menu
|
|
7. En Main Menu: Continue
|
|
|
|
**Verificar:**
|
|
- ✅ El save se cargó correctamente
|
|
- ✅ Vuelve a Chapter1 con estado correcto
|
|
- ✅ Moves count es el guardado (no el actual)
|
|
- ✅ Piezas capturadas están en el estado guardado
|
|
|
|
**Paso 2:** Test de múltiples slots
|
|
1. Pause → Main Menu
|
|
2. New Campaign (crea nuevo juego)
|
|
3. Hacer pocos movimientos (ej: 2)
|
|
4. Pause → Save
|
|
5. Main Menu → Continue
|
|
|
|
**Verificar:**
|
|
- ✅ Carga el save MÁS RECIENTE
|
|
- ✅ Si abres la carpeta `Application.persistentDataPath`:
|
|
- Windows: `C:\Users\<User>\AppData\LocalLow\<CompanyName>\<ProductName>\`
|
|
- Deberías ver: `save_slot_0.json`, `save_slot_1.json`
|
|
|
|
---
|
|
|
|
### 10.6. Test 6: Build completo
|
|
|
|
**Paso 1:** Hacer Build
|
|
1. `File → Build Settings`
|
|
2. Click `Build`
|
|
3. Selecciona carpeta de output (ej: `G:\EGGames\Ajedrez_Purgatorio\Build\`)
|
|
4. Espera a que compile (~2-5 minutos)
|
|
|
|
**Paso 2:** Ejecutar Build
|
|
1. Navega a carpeta Build
|
|
2. Ejecuta `Ajedrez_Purgatorio.exe`
|
|
|
|
**Verificar en Build:**
|
|
- ✅ MainMenu carga correctamente
|
|
- ✅ New Campaign funciona
|
|
- ✅ Gameplay funciona
|
|
- ✅ Pause funciona
|
|
- ✅ Save/Load funciona
|
|
- ✅ Audio funciona (si asignaste clips)
|
|
- ✅ Quit button cierra la aplicación
|
|
|
|
---
|
|
|
|
### ✅ CHECKPOINT 8: Todo testeado
|
|
|
|
Si todos los tests pasaron:
|
|
- ✅ **JUEGO COMPLETO Y FUNCIONAL** 🎉
|
|
|
|
---
|
|
|
|
## 11. TROUBLESHOOTING COMÚN
|
|
|
|
### Problema: "CampaignState is null"
|
|
**Causa:** ScriptableObject no encontrado
|
|
**Solución:**
|
|
1. Verificar que `CampaignState.asset` está en `Assets/Game/Data/Resources/`
|
|
2. Verificar que está asignado en CampaignManager Inspector
|
|
3. Verificar que el código usa `Resources.Load<CampaignState>("CampaignState")`
|
|
|
|
---
|
|
|
|
### Problema: "Scene 'Chapter1' couldn't be loaded"
|
|
**Causa:** Scene no en Build Settings
|
|
**Solución:**
|
|
1. `File → Build Settings`
|
|
2. Agregar scene arrastrándola
|
|
3. Verificar checkbox activo
|
|
|
|
---
|
|
|
|
### Problema: DialogueUI no aparece
|
|
**Causa:** Canvas está activa inicialmente
|
|
**Solución:**
|
|
1. En Chapter scene, selecciona `DialogueCanvas`
|
|
2. Desmarcar checkbox (GameObject inactivo)
|
|
3. DialogueSystem la activará cuando necesite
|
|
|
|
---
|
|
|
|
### Problema: Pause no funciona con Escape
|
|
**Causa:** Input System no configurado
|
|
**Solución:**
|
|
1. Verificar `InputSystem_Actions.inputactions` tiene "Pause" action
|
|
2. Verificar binding a `<Keyboard>/escape`
|
|
3. Regenerar C# class si es necesario
|
|
|
|
---
|
|
|
|
### Problema: Audio no suena
|
|
**Causa:** AudioClips no asignados
|
|
**Solución:**
|
|
1. Verificar AudioManager tiene clips asignados
|
|
2. Verificar Audio Sources están configurados
|
|
3. Verificar volumen del sistema operativo
|
|
|
|
---
|
|
|
|
### Problema: Tests fallan en Test Runner
|
|
**Causa:** ScriptableObjects no encontrados en tests
|
|
**Solución:**
|
|
1. Los tests usan `ScriptableObject.CreateInstance<>()` para crear instances temporales
|
|
2. Si tests esperan Resources, asegúrate que existan en Resources folder
|
|
3. Ver logs específicos en Console
|
|
|
|
---
|
|
|
|
### Problema: NullReferenceException en runtime
|
|
**Causa:** Referencia no asignada en Inspector
|
|
**Solución:**
|
|
1. Leer stack trace en Console para identificar qué script y línea
|
|
2. Abrir scene correspondiente
|
|
3. Buscar GameObject con ese script
|
|
4. Verificar que TODOS los SerializeField estén asignados en Inspector
|
|
5. Típicos culpables:
|
|
- CampaignManager: `_campaignState`, `_dialogueSystem`
|
|
- DialogueUI: `_dialogueText`, `_continueButton`
|
|
- GameHUD: `_turnText`, `_checkIndicator`
|
|
|
|
---
|
|
|
|
## 12. PRÓXIMOS PASOS OPCIONALES
|
|
|
|
### 12.1. Agregar más contenido
|
|
- Crear más chapters (Chapter4, Chapter5, etc.)
|
|
- Escribir más diálogos JSON
|
|
- Diseñar posiciones iniciales especiales
|
|
|
|
### 12.2. Mejoras visuales
|
|
- Sprites custom de piezas
|
|
- Animaciones de movimiento (DOTween)
|
|
- Partículas al capturar
|
|
- Shader effects en check
|
|
|
|
### 12.3. Mejoras de audio
|
|
- Música diferente por chapter
|
|
- SFX dinámico según tipo de pieza
|
|
- Voz narrada (voice-over)
|
|
|
|
### 12.4. Mejoras de UX
|
|
- Tutorial interactivo
|
|
- Hints system
|
|
- Undo/Redo moves
|
|
- Settings screen (volume, resolution)
|
|
|
|
### 12.5. Testing exhaustivo
|
|
- Ejecutar todos los unit tests
|
|
- Crear tests de integración
|
|
- Hacer playtesting manual con test plan
|
|
- Performance profiling
|
|
|
|
---
|
|
|
|
## ✅ RESUMEN FINAL
|
|
|
|
**Has implementado:**
|
|
- ✅ 2 ScriptableObjects (CampaignState, DeadKingPool)
|
|
- ✅ 1 MainMenu scene completa
|
|
- ✅ 3 Chapter scenes con 5 canvases UI cada una
|
|
- ✅ Sistema de Audio configurado
|
|
- ✅ 2 Prefabs de UI
|
|
- ✅ Build Settings con 4 scenes
|
|
- ✅ Input System con Pause action
|
|
|
|
**Total:**
|
|
- ~4 scenes
|
|
- ~30 GameObjects con scripts
|
|
- ~15 UI canvases/panels
|
|
- ~20+ botones configurados
|
|
- ~50+ referencias conectadas en Inspector
|
|
|
|
**Tiempo invertido:** ~3-4 horas
|
|
|
|
**Estado del juego:** ✅ **COMPLETAMENTE FUNCIONAL Y JUGABLE**
|
|
|
|
---
|
|
|
|
## 📝 CHECKLIST FINAL DE VERIFICACIÓN
|
|
|
|
Marca cada item cuando lo hayas completado:
|
|
|
|
**ScriptableObjects:**
|
|
- [ ] CampaignState.asset en Resources
|
|
- [ ] DeadKingPool.asset en Resources
|
|
- [ ] BalanceConfig.asset (opcional)
|
|
|
|
**Scenes:**
|
|
- [ ] MainMenu.unity con todos los botones funcionando
|
|
- [ ] Chapter1.unity con todas las UI
|
|
- [ ] Chapter2.unity (duplicado de Chapter1)
|
|
- [ ] Chapter3.unity (duplicado de Chapter1)
|
|
|
|
**UI Systems (en cada Chapter):**
|
|
- [ ] DialogueCanvas con DialogueUI script
|
|
- [ ] GameHUDCanvas con GameHUD script
|
|
- [ ] PauseMenuCanvas con PauseMenuController
|
|
- [ ] DeadKingRevealCanvas con DeadKingRevealUI
|
|
|
|
**Managers (persistentes):**
|
|
- [ ] CampaignManager configurado
|
|
- [ ] SaveSystem configurado
|
|
- [ ] AudioManager con clips (opcional)
|
|
- [ ] SceneTransitionManager con FadeImage
|
|
|
|
**Audio:**
|
|
- [ ] 6 AudioClips SFX importados (opcional)
|
|
- [ ] Música de fondo (opcional)
|
|
- [ ] Asignados en AudioManager
|
|
|
|
**Prefabs:**
|
|
- [ ] MoveIndicator.prefab creado
|
|
- [ ] CapturedPieceIcon.prefab creado
|
|
- [ ] Asignados en GameHUD
|
|
|
|
**Build Settings:**
|
|
- [ ] 4 scenes en Build (MainMenu en índice 0)
|
|
- [ ] Platform configurado
|
|
- [ ] Input System configurado
|
|
|
|
**Testing:**
|
|
- [ ] MainMenu funciona (New Campaign, Continue, Quit)
|
|
- [ ] Chapter gameplay funciona (movimiento, turns, HUD)
|
|
- [ ] Pause funciona (Escape, Resume, Save, MainMenu)
|
|
- [ ] Save/Load funciona (guarda y carga estado)
|
|
- [ ] DialogueSystem funciona (typewriter, continue)
|
|
- [ ] Scene transitions funcionan (fade in/out)
|
|
- [ ] Build ejecuta correctamente
|
|
|
|
---
|
|
|
|
**¡FELICIDADES! Has completado la implementación en Unity.** 🎉
|
|
|
|
El código está 100% implementado (Sprint 4 + Sprint 5), y ahora tienes todas las scenes, UI, y assets configurados para jugar el juego de principio a fin.
|
|
|
|
**Siguiente paso recomendado:** Hacer un playthrough completo para encontrar bugs visuales o de UX que ajustar.
|