11 KiB
Bloqueadores Críticos para Jugabilidad
Fecha: 12 de mayo de 2026
Estado del Código: ✅ 100% compilado, 0 errores
Problema: Código completo pero falta integración entre sistemas
🔴 BLOQUEADORES CRÍTICOS (Impiden jugar)
1. CampaignManager NO integra con BoardManager ⚠️ CRÍTICO
Problema:
CampaignManager.LoadChapter()NO llama aBoardManager.SetupBoard(CampaignState)- El tablero siempre usa
PlacePieces()(setup estándar) en vez de respetar piezas vivas - Sistema de persistencia de piezas NO funciona
Impacto:
- ❌ Cuando un jugador pierde piezas en capítulo 1, en capítulo 2 reaparecen
- ❌ El core loop de la campaña (piezas permanentes) está roto
- ❌ El desafío progresivo no existe
Solución:
// En CampaignManager.cs, método LoadChapter(), después de línea ~167
// Agregar ANTES de "// Configurar IA según el capítulo"
// Configurar tablero con piezas disponibles
if (BoardManager.Instance != null && _campaignState != null)
{
BoardManager.Instance.SetupBoard(_campaignState);
}
else
{
Debug.LogWarning("[CampaignManager] BoardManager o CampaignState no disponible. Usando setup estándar.");
}
Ubicación exacta: Assets/Game/Scripts/Mono/Core/CampaignManager.cs, línea ~175
Prioridad: 🔴 BLOQUEANTE - Sin esto, la campaña no funciona
2. BoardManager necesita prefabs asignados ⚠️ CRÍTICO
Problema:
BoardManagertiene 14 campos SerializeField para prefabs:- 6 piezas blancas (pawn, rook, knight, bishop, queen, king)
- 6 piezas negras
- 2 casillas (brown, gray)
- NINGUNO está asignado porque no hay prefabs creados
Impacto:
- ❌ Al dar Play, el tablero intenta instanciar
null→ NullReferenceException - ❌ El juego no arranca
Solución:
-
Crear prefabs de piezas (12 prefabs):
- Navegar a carpeta donde estén los modelos 3D o sprites de piezas
- Crear prefab para cada pieza
- Agregar componente correspondiente (Pawn.cs, Rook.cs, etc.)
- Guardar en
Assets/Game/Prefabs/Pieces/
-
Crear prefabs de casillas (2 prefabs):
- Crear cubo o quad 3D
- Material marrón y gris
- Guardar en
Assets/Game/Prefabs/Board/
-
Asignar en Inspector:
- Seleccionar GameObject con BoardManager
- Arrastrar los 14 prefabs a sus slots correspondientes
Prioridad: 🔴 BLOQUEANTE - Sin esto, ni siquiera aparece el tablero
3. Scenes necesitan componentes críticos ⚠️ CRÍTICO
Problema:
- Las scenes Chapter1/2/3 no existen o no tienen los componentes necesarios
- Sin scenes configuradas, no hay nada que jugar
Componentes mínimos para Chapter scenes:
Chapter1.unity
├─ Main Camera
├─ BoardManager ← Con prefabs asignados
├─ GameManager
├─ AIController ← Para enemigo
├─ PieceIdentityManager ← Para identidades de piezas
├─ CampaignManager ← Persistencia entre escenas (DontDestroyOnLoad)
├─ DialogueSystem
├─ GameHUDCanvas (con GameHUD script)
└─ PauseMenuCanvas (desactivada, con PauseMenuController)
Impacto:
- ❌ No hay escena para jugar
- ❌ New Campaign en MainMenu intenta cargar "Chapter1" → Scene not found error
Solución:
- Seguir el manual de implementación punto 5 (MANUAL_IMPLEMENTACION_UNITY.md)
- Crear Chapter1.unity con todos los componentes
- Duplicar para Chapter2 y Chapter3
Prioridad: 🔴 BLOQUEANTE - Sin scenes, no hay juego
4. ScriptableObjects necesitan ser creados ⚠️ ALTO
Problema:
CampaignState.assetyDeadKingPool.assetno existen- Scripts esperan cargarlos con
Resources.Load<>()
Impacto:
- ❌ CampaignManager.Instance lanza error: "CampaignState is null"
- ❌ DeadKingPool.Instance lanza error: "DeadKingPool not found in Resources"
- ❌ El juego crashea al intentar empezar campaña
Solución:
- En Unity:
Assets/Game/Data/→ Create → Ajedrez Purgatorio → Campaign → Campaign State - Mover
CampaignState.assetaAssets/Game/Data/Resources/ - Repetir para DeadKingPool
Prioridad: 🟠 ALTO - Bloqueante para modo campaña (pero no para juego individual)
🟡 PROBLEMAS IMPORTANTES (Afectan experiencia pero no bloquean)
5. GameManager falta eventos para GameHUD
Problema:
- GameHUD espera eventos
OnPieceCapturedyOnCheckResolved - GameManager NO los tiene definidos
Código afectado:
// En GameHUD.cs (comentado como TODO)
// GameManager.Instance.OnPieceCaptured += OnPieceCaptured;
// GameManager.Instance.OnCheckResolved += OnCheckResolved;
Impacto:
- ⚠️ GameHUD no muestra piezas capturadas
- ⚠️ Indicador de CHECK no desaparece cuando se resuelve
Solución:
// En GameManager.cs, línea ~71 (después de OnPieceMoved)
public event Action<Piece> OnPieceCaptured;
public event Action OnCheckResolved;
// En TryMoveTo(), después de capturar pieza (~línea 200):
OnPieceCaptured?.Invoke(captured);
// En AfterMove(), cuando check se resuelve (~línea 250):
if (wasInCheck && !nowInCheck) {
OnCheckResolved?.Invoke();
}
Prioridad: 🟡 MEDIO - GameHUD funciona sin esto, pero incompleto
6. CampaignManager falta referencia a DeadKingRevealUI
Problema:
ShowDeadKingReveal()tiene código comentado como TODO- No muestra la UI de Dead King derrotado
Código actual:
private void ShowDeadKingReveal(System.Action onContinue)
{
Debug.Log("[CampaignManager] TODO: Show Dead King Reveal UI");
// TODO: Get reference to DeadKingRevealUI in scene
onContinue?.Invoke();
}
Solución:
// Agregar field en CampaignManager
[SerializeField] private DeadKingRevealUI _deadKingRevealUI;
// En ShowDeadKingReveal():
if (_deadKingRevealUI != null && _currentDeadKing != null)
{
_deadKingRevealUI.Show(_currentDeadKing, onContinue);
}
else
{
onContinue?.Invoke();
}
Prioridad: 🟡 MEDIO - Dead Kings spawn pero no se revela visualmente
7. CampaignManager falta integración con AIController
Problema:
ApplyChapterAIConfiguration()está comentado como TODO- AI siempre usa misma dificultad
Código actual:
private void ApplyChapterAIConfiguration(string aiConfig)
{
// TODO (S4-005): Configurar AIController con la dificultad del capítulo
Debug.Log("[CampaignManager] TODO: Aplicar configuración a AIController");
}
Solución:
[SerializeField] private AIController _aiController;
private void ApplyChapterAIConfiguration(string aiConfig)
{
if (_aiController == null)
{
_aiController = FindObjectOfType<AIController>();
}
if (_aiController != null && aiConfig != null)
{
// Parsear aiConfig y configurar dificultad
// Ejemplo: "Easy", "Medium", "Hard"
if (System.Enum.TryParse<AIDifficulty>(aiConfig, out var difficulty))
{
_aiController.SetDifficulty(difficulty);
}
}
}
Prioridad: 🟡 MEDIO - AI funciona pero no escala dificultad
8. DeadKingInputUI usa stats placeholder
Problema:
GatherCampaignStats()retorna todos 0s- Dead Kings se guardan sin estadísticas reales
Código actual:
private CampaignStats GatherCampaignStats()
{
// TODO: Track from GameManager
return new CampaignStats(
moves: 0, // Necesita contador en GameManager
captures: 0, // Necesita contador en GameManager
pWins: 0, // Necesita acceso a PurgatoryManager
pLosses: 0 // Necesita acceso a PurgatoryManager
);
}
Solución:
// Agregar en GameManager:
private int _totalMoves = 0;
private int _totalCaptures = 0;
public int TotalMoves => _totalMoves;
public int TotalCaptures => _totalCaptures;
// Actualizar en DeadKingInputUI:
private CampaignStats GatherCampaignStats()
{
int moves = GameManager.Instance?.TotalMoves ?? 0;
int captures = GameManager.Instance?.TotalCaptures ?? 0;
int pWins = PurgatoryManager.Instance?.TotalWins ?? 0;
int pLosses = PurgatoryManager.Instance?.TotalLosses ?? 0;
return new CampaignStats(moves, captures, pWins, pLosses);
}
Prioridad: 🟢 BAJO - Dead Kings se guardan, solo sin stats
📦 ASSETS FALTANTES (No bloqueantes pero recomendados)
9. AudioClips para AudioManager
Estado: AudioManager tiene campos para 6 SFX clips, todos (None)
Impacto: ⚠️ Juego funciona pero sin audio
Solución: Importar audio clips y asignar en Inspector
Prioridad: 🟢 BAJO - Juego funciona en silencio
10. Prefabs de UI (MoveIndicator, CapturedPieceIcon)
Estado: GameHUD y PieceSelectionFeedback esperan estos prefabs
Impacto: ⚠️ No hay feedback visual de movimientos disponibles
Solución: Crear prefabs simples (círculo verde para moves, ícono para captures)
Prioridad: 🟢 BAJO - Juego funciona sin feedback visual
✅ RESUMEN EJECUTIVO
PARA TENER JUGABILIDAD MÍNIMA, SE NECESITA:
🔴 Bloqueantes críticos (sin esto NO arranca):
- ✅ Código compilando (YA ESTÁ ✅)
- ❌ Crear prefabs de piezas y casillas (14 prefabs)
- ❌ Asignar prefabs en BoardManager
- ❌ Crear scenes Chapter1/2/3 con componentes
- ❌ Crear ScriptableObjects (CampaignState, DeadKingPool)
- ❌ Agregar integración CampaignManager → BoardManager (5 líneas código)
🟡 Para experiencia completa (mejoras importantes): 7. Agregar eventos a GameManager (OnPieceCaptured, OnCheckResolved) 8. Integrar DeadKingRevealUI con CampaignManager 9. Integrar AIController con CampaignManager 10. Stats tracking en GameManager
🟢 Polish (nice to have): 11. AudioClips 12. Prefabs de UI feedback
🎯 PLAN DE ACCIÓN RECOMENDADO
Fase 1: Hacer que algo aparezca en pantalla (2-3 horas)
- Crear prefabs de piezas básicos (cubos con colores si no hay modelos)
- Crear prefabs de casillas (quads con materiales)
- Crear Chapter1.scene con BoardManager + GameManager
- Asignar prefabs en BoardManager Inspector
- Test: Dar Play → Ver tablero con piezas
Fase 2: Modo juego individual funcional (1 hora)
- Agregar AIController a scene
- Agregar PieceIdentityManager
- Test: Jugar partida completa contra IA
Fase 3: Modo campaña funcional (2 horas)
- Crear ScriptableObjects (CampaignState, DeadKingPool)
- CRÍTICO: Agregar integración CampaignManager → BoardManager
- Crear MainMenu.scene
- Configurar Build Settings con todas las scenes
- Test: New Campaign → Chapter 1 → Perder piezas → Chapter 2 → Verificar piezas faltantes
Fase 4: Polish (1-2 horas)
- Agregar eventos a GameManager
- Crear GameHUD, PauseMenu UIs
- Audio y feedback visual
Tiempo total estimado: 6-8 horas para juego completamente funcional
🚨 ACCIÓN INMEDIATA RECOMENDADA
Si quieres jugar YA (10 minutos):
-
Crea prefabs placeholder:
- Cubo blanco →
WhitePawnPrefab - Cubo negro →
BlackPawnPrefab - Repetir para las 12 piezas
- Quad marrón →
BrownPrefab - Quad gris →
GrayPrefab
- Cubo blanco →
-
Crea scene básica:
- New Scene → Chapter1.unity
- Agregar BoardManager, GameManager
- Asignar los 14 prefabs
-
Dar Play → Deberías ver un tablero jugable (feo pero funcional)
-
Después iterar mejorando visual, campaña, UI, etc.