L'Editor funziona, la Build fallisce: traccia gli errori della Console fino a Script e riferimenti di scena con Unity MCP
Quando Play in Unity funziona ma le build Player/dispositivo falliscono o danno NRE al caricamento della scena: layer A/B/C, usa Cursor + Unity MCP per leggere la Console, verificare Build Settings e riferimenti serializzati—con esempio di stack, controlli manuali e fix minimi.
- Unity MCP
- Unity
- Console
- build
- Android
- Cursor
- troubleshooting
- AI game development
Thread con titoli come “Unity funziona nell’editor, fallisce su dispositivo/build” sembrano tutti uguali: Play funziona, poi una build Player/dispositivo va in rosso, crasha, si oscura o lancia NullReferenceException all’ingresso in scena. Il motore raramente è “rotto”: il percorso dell’editor ha nascosto riferimenti e lacune di piattaforma: scena non nella lista di build, campi serializzati che sono None su disco, sensibilità al maiuscolo/minuscolo nei percorsi, o API UnityEditor finite in un assembly runtime fino al momento del packing.
Questo post ha tre spine (come il titolo):
- Console / stack → oggetti script e scena
- Verifica Build Settings, Missing Script, riferimenti serializzati
- Diagnosi in sola lettura in Cursor tramite Unity MCP → fix minimo dopo la conferma
Niente guida all’installazione di plugin, niente guida completa per lo store. Lo stripping IL2CPP e i plugin nativi restano in appendice.
Correlati:
- Installazione Unity MCP
- Unity MCP con Claude Code e Cursor
- Collega un HUD AI Studio agli eventi di salute (cablaggio corretto; questo post è “come trovare il guasto”)
Primo: quale layer è fallito?
A. Finestra Build rossa (errore di compilazione / packing)
↓
B. Build riesce; il dispositivo muore o si oscura all'avvio
↓
C. Il gioco parte; una scena o funzionalità esplode a runtime
| Cosa vedi | Layer | Controlla prima qui |
|---|---|---|
Build fallisce, error CS… / tipo non trovato | A | Assembly runtime che referenzia UnityEditor, #if sbagliato, asmdef |
| NRE / MissingReference sulla scena di avvio | B/C | Scena nella lista di build, Missing Script, None nell’Inspector |
Fallisce solo su Resources.Load / scena additiva | C | Maiuscole/minuscole nel percorso, asset nel pack, scena effettivamente caricata |
Unity MCP è più forte su un editor aperto: Console, Hierarchy, campi dei componenti. Gli stack di logcat / Xcode del dispositivo devono essere incollati in Cursor—oppure crea una Development Build e riproduci con la stessa scena di avvio nell’Editor quando puoi.
Loop di risoluzione problemi (manuale + MCP)
Non saltare il passaggio manuale e chiedere all’AI di riscrivere il Player.
Step 0: Congela la scena a mano (~2 min)
Prima di Cursor:
- Annota versione Unity e target (es. Android / IL2CPP)
- Pulisci Window → General → Console, poi Build o Development Build una volta
- Copia il primo Errore rilevante (con stack)—non un muro di Warning
- Apri File → Build Settings: la scena sospetta è spuntata? L’indice 0 è la scena di avvio?
- Se hai modificato un’istanza di Prefab: hai fatto Apply? Le override non applicate spesso non raggiungono l’asset su disco che pensi di aver spedito
Step 1: Triage MCP in sola lettura della Console
Riassumi gli Errori della Console relativi a questa build / ultimo Play (ignora Info).
Classifica come errore di compilazione / Missing Script / NullReference / caricamento risorse.
Elenca percorso script, riga, nome GameObject per ogni errore quando presente.
Non modificare alcun asset.
Step 2: “Trio di riferimenti” manuale + MCP
Per NRE a runtime (B/C), seleziona l’oggetto dello stack nell’editor e incrocia con MCP:
| Manuale | Prompt MCP |
|---|---|
| Elenco Build Settings (screenshot o dettatura) | “Elenca i percorsi delle scene in Build Settings e i flag abilitati; nomina la scena di avvio.” |
| Inspector: Missing Script / riferimenti None | ”Nella scena <Nome>, elenca i Missing Script; controlla i campi serializzati su <Oggetto>.<Componente> per None. Solo tabella. Non modificare.” |
| Asset Prefab vs istanza in scena | ”<X> è un asset Prefab o un’istanza in scena? Ci sono override non applicate se visibili? Riporta solo.” |
Regola: I pack usano scene/Prefab su disco. I riempimenti temporanei di OnValidate che “sembrano a posto” nell’Editor non contano—fidati dei valori serializzati da MCP/Inspector.
Step 3: Modello di diagnosi, poi conferma
[Vincoli]
- Diagnosi e proposta di piano minimo; attendi il mio OK prima di modificare
- Non fingere un fix con massicci GameObject.Find
- Tocca solo script/Prefab/scene legati a questo Errore
[Scena]
- Play in Editor: OK / rotto (veritiero)
- Piattaforma / build: …
- Scena di avvio in Build Settings: …
- Stack Console / dispositivo (grezzo):
<incolla>
[Risposta]
1. Layer A / B / C
2. Top 1–2 cause principali (non in build / ref None / Missing Script / maiuscole / API Editor…)
3. Oggetti e nomi di campi che devo verificare
4. Passi di fix minimo (ancora non eseguire)
Step 4: Scrittura minima + riverifica
Applica il fix minimo confermato: solo <oggetto.campo> o le poche righe in <percorso script> per questo Errore.
Salva scena/Prefab.
Poi riverifica in sola lettura: i campi sono ancora None? Lo stesso Errore è ancora in Console?
Esempio pratico: stack → campo
Log sintetico ma realistico di Player/dispositivo (sostituisci i percorsi con quelli del tuo progetto).
Log
NullReferenceException: Object reference not set to an instance of an object
at HudHealthView.HandleHealthChanged (System.Single current, System.Single max) [0x00000] in Assets/Scripts/UI/HudHealthView.cs:42
at PlayerHealth.TakeDamage (System.Single amount) [0x00000] in Assets/Scripts/Combat/PlayerHealth.cs:28
at DebugDealDamage.Update () [0x00000] in Assets/Scripts/Debug/DebugDealDamage.cs:15
Layer
- Raggiunto
Update→ non A (compilazione OK) - Muore su danno → C (runtime); sospetta riferimenti UI, non “riscrivi il combat”
Manuale
- La scena dell’HUD è in Build Settings?
- Seleziona l’oggetto
HudHealthView;healthFill/playerHealthsono None? - Modifiche Prefab: Applicate?
MCP
Sola lettura: apri la scena che contiene l'HUD.
1. Trova oggetti con HudHealthView
2. Riporta se healthFill, playerHealth (e simili) sono None / Missing
3. Non modificare
Se None: il piano minimo è riassegnare i riferimenti e salvare—non cambiare TakeDamage.
Fix minimo (dopo OK)
- Trascina l’immagine
HUD_HealthFill→healthFill; ilPlayerHealthdel Player →playerHealth - Salva; Development Build; subisci danno di nuovo
”Fix” sbagliato (da non fare)
// Anti-pattern: Find nasconde None — si rompe comunque su rename / caricamento additivo
healthFill = GameObject.Find("HUD_HealthFill").GetComponent<Image>();
Cablaggio corretto: HUD → eventi di salute. Qui: fissa il campo dallo stack, poi rilega.
Matrice dei sintomi (spina)
Sintomo 1: Build rossa — tipo non trovato / UnityEditor
| Causa probabile | Manuale | MCP |
|---|---|---|
| Script runtime usa API Editor | Il file è fuori da Editor/? | ”Cerca UnityEditor. fuori dalle cartelle Editor; elenca solo i percorsi.” |
#if invertito, tipi mancanti nel Player | Controlla che UNITY_EDITOR avvolga | ”Quali tipi esistono in Editor vs Player per questo file?” |
| Lacuna asmdef | Apri il .asmdef che fallisce | ”Elenca i riferimenti asmdef; quale manca?” |
Anti-pattern (API Editor in assembly runtime → build Player fallisce):
using UnityEngine;
using UnityEditor; // Fallisce la build se non è un assembly Editor
public class BadBake : MonoBehaviour
{
[MenuItem("Tools/Bad")] // ulteriore dipendenza da UnityEditor
static void Run() { }
}
Fix A: intero file sotto Editor/
Assets/Scripts/Editor/BakeTools.cs ← compilazione solo editor
Fix B: isola nel file (solo se devi condividere un file)
using UnityEngine;
public class RuntimeSafe : MonoBehaviour
{
public void DoGameplay() { /* visibile al Player */ }
#if UNITY_EDITOR
[ContextMenu("Debug/Fill Refs")]
void EditorOnlyFill()
{
// Solo editor — non trattare come dati runtime impacchettati da Awake
}
#endif
}
Ancora più pulito: script solo Editor + asmdef così gli assembly runtime non trascinano mai riferimenti Editor.
Sintomo 2: NRE su dispositivo all’ingresso in scena; Play in Editor “sembra ok”
Controlla in ordine—niente mega-riscrittura parallela:
- Scena non in Build Settings o scena di avvio sbagliata
- Missing Script / None serializzato (incluse override Prefab non applicate)
- Scena additiva non caricata prima di Find / accesso
- Maiuscole/minuscole in
Resources.Load(l’Editor macOS spesso è case-insensitive; Android no)
1. Riporta le scene in Build Settings, flag abilitati, indice di avvio
2. Elenca tutti i Missing Script nella scena <X>
3. Controlla i riferimenti pubblici su GameManager / Player / HUD lungo il percorso di avvio per None
Riporta solo; non modificare.
| In Editor | Nel pack | Causa tipica |
|---|---|---|
| I riferimenti sembrano impostati | None a runtime | Override istanza non applicate; file di scena sbagliato modificato |
Find funziona | Null su dispositivo | Oggetto in scena non caricata; nome non corrispondente |
Resources.Load funziona | Null su dispositivo | Maiuscole/minuscole nel percorso; asset non sotto Resources/ |
// Su disco: Assets/Resources/UI/HealthBar.png
// Spesso fallisce su Android (maiuscole/minuscole non corrispondenti):
Resources.Load<Sprite>("ui/healthbar");
// Abbina il percorso sotto Resources, es.:
Resources.Load<Sprite>("UI/HealthBar");
Cerca le stringhe di percorso in Resources.Load / Addressables.LoadAssetAsync;
costruisci una tabella case-sensitive vs percorsi relativi reali. Non modificare ancora il codice.
Sintomo 3: Console inondata di Missing Script
Scansiona la scena <X> e il Prefab <percorso>:
Elenca i percorsi GameObject con Missing Script.
Per ogni elemento: suggerisci di riattaccare lo script originale o rimuovere il componente vuoto (dal nome/GUID residuo se visibile).
Non eliminare in blocco automaticamente.
Manuale: conferma che il file script esista ancora e che asmdef/GUID non si sia rotto; conferma uno per uno prima di eliminare i vuoti.
Checklist di accettazione
- Gli Errori corrispondenti sono spariti dalla Console
- Play in Editor percorre lo stesso percorso che falliva (entra nel livello, subisci danno, apri UI…)
- Una Development Build verso il target (o Player locale)
- MCP riverifica in sola lettura: i campi sospetti non sono più None / Missing
- Il diff Git è solo la piccola modifica attesa a scena/Prefab/script—nessun refactor di passaggio
Riverifica in sola lettura: ci sono None o Missing Script su <lista oggetti>? Elenca le eccezioni. Non modificare.
Limiti dei prompt
| Da non fare | Da fare |
|---|---|
| ”Fai funzionare Play” | Layer A/B/C + fissa il campo dallo stack |
Massicci Find invece di riferimenti | Fix dei campi serializzati o iniezione esplicita |
| Riordinare Build Settings senza che sia richiesto | Riporta prima la lista attuale e la scena di avvio |
| ”C’è un NRE” | Incolla le prime 20–40 righe di stack |
Confini del prodotto
- Unity MCP: Console dell’editor, Hierarchy, script, riferimenti—la spina di questo articolo.
- AI Studio: struttura UI nel motore; rilega dopo la riesportazione seguendo il post sul cablaggio—non fare Find della UI dal gameplay.
- Certificati, store, ROM OEM: incolla il testo del log in Cursor per aiuto alla lettura; fuori dallo scope di modifica scena di MCP.
Appendice: comuni ma fuori spina
Escludi prima la spina di questo articolo:
| Sintomo | Direzione |
|---|---|
| Development OK, Release muore | Managed Stripping / link.xml; MCP: “Indovina i tipi strippati dallo stack di crash; proponi link.xml; non scrivere ancora file.” |
| Crash nativo Android (non gestito) | .so / permessi / Gradle; incolla logcat per lettura |
| API Unity fuori dal thread principale | Controlla che i callback async tornino al thread principale |
Non fondere stripping e Missing Script in un’unica “grande riscrittura”.
Riepilogo
- Editor OK / pack rotto → trattalo prima come riferimenti / scene in build / percorsi / API Editor
- Congela manualmente Build Settings e primo Errore, poi triage MCP in sola lettura
- Stack → riga script → campo componente; rilega o rimuovi componenti vuoti dopo conferma
- Niente
Findo riscritture di gameplay come fix finti - Accetta con Development Build + riverifica in sola lettura
Esegui “congela → layer → trio di riferimenti → fissa il campo come nell’esempio” e la maggior parte dei bug di riferimenti su dispositivo si riduce a un piccolo diff revisionabile.
Continua a leggere
Altre guide che potrebbero interessarti
Quali strumenti AI accelerano lo sviluppo in Godot e Unity? Come MCP e AI Studio dividono il lavoro
Analisi degli strumenti AI per Godot e Unity per fase di produzione: assistenti repo, AI per motori, ponti MCP, UI da design a motore e preparazione asset, con VberAI Engine MCP, AI Studio e Super Matting.
- ai-tools
- godot
- unity
- mcp
Crea UI di Gioco Pronte per la Produzione in 3 Minuti con AI Studio (Guida Video)
Walkthrough ufficiale VberAI su YouTube: importa PSD/Figma con VberAI Studio ed esporta UI di gioco in Unity, Cocos Creator e Godot in pochi minuti.
- vberai
- ai-studio
- video
- psd
Come Configurare Cocos Creator MCP con Cursor e Claude (Video Tutorial)
Collega Cocos Creator MCP a Cursor o Claude: installa il plugin, configura il Model Context Protocol e verifica che l'IA controlli l'editor.
- cocos
- cocos-creator
- mcp
- cursor