← Kembali ke blog

Editor Berfungsi, Build Gagal: Lacak Error Konsol ke Skrip dan Referensi Scene dengan Unity MCP

Saat Play di Editor normal tetapi build Player/perangkat gagal atau NRE saat scene dimuat: lapisan A/B/C, gunakan Cursor + Unity MCP untuk membaca Konsol, verifikasi Build Settings dan referensi serialisasi—dengan contoh stack, pemeriksaan manual, dan perbaikan minimal.

Diterbitkan
  • Unity MCP
  • Unity
  • Console
  • build
  • Android
  • Cursor
  • troubleshooting
  • AI game development

Thread dengan judul “Unity berfungsi di editor, gagal di perangkat / build” terlihat sama: Play berjalan normal, kemudian build Player / perangkat menjadi merah, crash, layar hitam, atau melempar NullReferenceException saat memasuki scene. Mesin jarang “rusak”—jalur editor menyembunyikan kesenjangan referensi dan platform: scene tidak ada dalam daftar build, field serialisasi yang None di disk, sensitivitas huruf pada path, atau API UnityEditor yang bocor ke assembly runtime hingga waktu pack.

Postingan ini memiliki tiga fokus utama (sama seperti judul):

  1. Konsol / stack → objek skrip dan scene
  2. Verifikasi Build Settings, Missing Script, referensi serialisasi
  3. Diagnosis read-only di Cursor melalui Unity MCP → perbaikan minimal setelah Anda konfirmasi

Tidak ada panduan instalasi plugin, tidak ada panduan pengiriman ke toko lengkap. Stripping IL2CPP dan plugin native tetap di lampiran.

Terkait:

Pertama: lapisan mana yang gagal?

A. Jendela Build merah (gagal kompilasi / pack)
        ↓
B. Build berhasil; perangkat mati atau layar hitam saat peluncuran
        ↓
C. Game dimulai; scene atau fitur meledak saat runtime
Apa yang Anda lihatLapisanPeriksa pertama di sini
Build gagal, error CS… / tipe tidak ditemukanAAssembly runtime yang mereferensikan UnityEditor, #if salah, asmdef
NRE / MissingReference pada scene bootB/CScene dalam daftar build, Missing Script, None di Inspector
Hanya gagal pada Resources.Load / scene aditifCSensitivitas huruf pada path, aset dalam pack, scene benar-benar dimuat

Unity MCP paling kuat pada editor yang terbuka: Konsol, Hierarchy, field komponen. Stack logcat / Xcode perangkat harus ditempel ke Cursor—atau kirim Development Build dan reproduksi dengan scene boot yang sama di Editor jika memungkinkan.

Loop pemecahan masalah (manual + MCP)

Jangan lewati langkah manual dan minta AI menulis ulang Player.

Langkah 0: Bekukan scene secara manual (~2 menit)

Sebelum Cursor:

  1. Catat versi Unity dan target (mis. Android / IL2CPP)
  2. Bersihkan Window → General → Console, lalu Build atau Development Build sekali
  3. Salin Error relevan pertama (dengan stack)—bukan dinding Warning
  4. Buka File → Build Settings: apakah scene yang dicurigai dicentang? Apakah indeks 0 adalah scene boot?
  5. Jika Anda mengedit instance Prefab: apakah Anda Apply? Override yang tidak diterapkan sering kali tidak pernah mencapai aset disk yang Anda kira Anda kirim

Langkah 1: Triage Konsol read-only MCP

Ringkas Error Konsol yang terkait dengan build / Play terakhir ini (abaikan Info).
Klasifikasikan sebagai kompilasi / Missing Script / NullReference / pemuatan resource.
Sebutkan path skrip, baris, nama GameObject per error jika ada.
Jangan ubah aset apa pun.

Langkah 2: “Trio referensi” manual + MCP

Untuk NRE runtime (B/C), pilih objek stack di editor dan periksa silang dengan MCP:

ManualPrompt MCP
Daftar Build Settings (screenshot atau dikte)“Sebutkan path scene Build Settings dan flag enabled; sebutkan scene boot.”
Inspector: Missing Script / referensi None”Di scene <Nama>, sebutkan Missing Script; periksa field serialisasi pada <Objek>.<Komponen> untuk None. Hanya tabel. Jangan edit.”
Aset Prefab vs instance scene”Apakah <X> aset Prefab atau instance scene? Ada override yang tidak diterapkan jika terlihat? Laporkan saja.”

Aturan: Pack menggunakan scene/Prefab di disk. Isi sementara OnValidate yang “terlihat baik” di Editor tidak dihitung—percayai nilai serialisasi dari MCP/Inspector.

Langkah 3: Template diagnosis, lalu konfirmasi

[Batasan]
- Diagnosis dan usulkan rencana minimal; tunggu OK saya sebelum mengedit
- Jangan memalsukan perbaikan dengan GameObject.Find massal
- Sentuh hanya skrip/Prefab/scene yang terkait dengan Error ini

[Scene]
- Play Editor: OK / rusak (jujur)
- Platform / build: …
- Scene boot Build Settings: …
- Stack Konsol / perangkat (mentah):
<tempel>

[Jawaban]
1. Lapisan A / B / C
2. 1–2 akar penyebab teratas (tidak dalam build / referensi None / Missing Script / huruf / API Editor…)
3. Objek dan nama field yang harus saya verifikasi
4. Langkah perbaikan minimal (jangan dieksekusi)

Langkah 4: Tulis minimal + periksa ulang

Terapkan perbaikan minimal yang dikonfirmasi: hanya <objek.field> atau beberapa baris di <path skrip> untuk Error ini.
Simpan scene/Prefab.
Lalu periksa ulang read-only: field masih None? Error yang sama masih di Konsol?

Contoh kerja: stack → field

Log Player/perangkat sintetis tetapi realistis (ganti path dengan proyek Anda).

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

Lapisan

  • Mencapai Update → bukan A (kompilasi OK)
  • Mati saat damage → C (runtime); curigai referensi UI, bukan “tulis ulang combat”

Manual

  1. Apakah scene HUD ada di Build Settings?
  2. Pilih objek HudHealthView; apakah healthFill / playerHealth None?
  3. Edit Prefab: Sudah Apply?

MCP

Read-only: buka scene yang berisi HUD.
1. Temukan objek dengan HudHealthView
2. Laporkan apakah healthFill, playerHealth (dan sejenisnya) None / Missing
3. Jangan edit
Jika None: rencana minimal adalah tetapkan ulang referensi dan simpan—bukan ubah TakeDamage.

Perbaikan minimal (setelah OK)

  • Seret Image HUD_HealthFill → healthFill; PlayerHealth milik Player → playerHealth
  • Simpan; Development Build; terima damage lagi

”Perbaikan” buruk (jangan)

// Anti-pattern: Find menyembunyikan None — tetap rusak saat rename / muat aditif
healthFill = GameObject.Find("HUD_HealthFill").GetComponent<Image>();

Wiring yang benar: HUD → event kesehatan. Di sini: tandai field dari stack, lalu ikat ulang.

Matriks gejala (fokus utama)

Gejala 1: Build merah — tipe tidak ditemukan / UnityEditor

Kemungkinan penyebabManualMCP
Skrip runtime menggunakan API EditorApakah file di luar Editor/?”Cari UnityEditor. di luar folder Editor; sebutkan path saja.”
#if terbalik, tipe Player hilangPeriksa UNITY_EDITOR membungkus”Tipe mana yang ada di Editor vs Player untuk file ini?”
Kesenjangan asmdefBuka .asmdef yang gagal”Sebutkan referensi asmdef; mana yang hilang?”

Anti-pattern (API Editor di assembly runtime → build Player gagal):

using UnityEngine;
using UnityEditor; // Gagal build jika bukan assembly Editor

public class BadBake : MonoBehaviour
{
    [MenuItem("Tools/Bad")] // ketergantungan UnityEditor lebih lanjut
    static void Run() { }
}

Perbaikan A: seluruh file di bawah Editor/

Assets/Scripts/Editor/BakeTools.cs   ← kompilasi khusus editor

Perbaikan B: isolasi dalam file (hanya jika harus berbagi file)

using UnityEngine;

public class RuntimeSafe : MonoBehaviour
{
    public void DoGameplay() { /* terlihat oleh Player */ }

#if UNITY_EDITOR
    [ContextMenu("Debug/Fill Refs")]
    void EditorOnlyFill()
    {
        // Hanya editor — jangan perlakukan ini sebagai data runtime yang di-pack dari Awake
    }
#endif
}

Lebih bersih: skrip khusus Editor + asmdef sehingga assembly runtime tidak pernah menarik referensi Editor.

Gejala 2: NRE perangkat saat masuk scene; Play Editor “tampak baik”

Periksa secara berurutan—tanpa penulisan ulang besar-besaran paralel:

  1. Scene tidak ada di Build Settings atau scene boot salah
  2. Missing Script / serialisasi None (termasuk Prefab yang tidak di-Apply)
  3. Scene aditif tidak dimuat sebelum Find / akses
  4. Sensitivitas huruf Resources.Load (Editor macOS sering tidak sensitif huruf; Android tidak)
1. Laporkan scene Build Settings, flag enabled, indeks boot
2. Sebutkan semua Missing Script di scene <X>
3. Periksa referensi publik pada GameManager / Player / HUD di sepanjang jalur boot untuk None
Laporkan saja; jangan edit.
Di EditorDi packPenyebab umum
Referensi tampak terisiRuntime NoneOverride instance tidak diterapkan; file scene salah diedit
Find berfungsiDevice nullObjek di scene yang tidak dimuat; nama tidak cocok
Resources.Load berfungsiDevice nullSensitivitas huruf path; aset tidak di bawah Resources/
// Di disk: Assets/Resources/UI/HealthBar.png
// Sering gagal di Android (ketidakcocokan huruf):
Resources.Load<Sprite>("ui/healthbar");
// Cocokkan path di bawah Resources, mis.:
Resources.Load<Sprite>("UI/HealthBar");
Cari string path Resources.Load / Addressables.LoadAssetAsync;
buat tabel sensitif huruf vs path relatif nyata. Jangan edit kode dulu.

Gejala 3: Konsol dibanjiri Missing Script

Pindai scene <X> dan Prefab <path>:
Sebutkan path GameObject dengan Missing Script.
Per item: sarankan melampirkan ulang skrip asli atau menghapus komponen kosong (dari nama/GUID sisa jika terlihat).
Jangan hapus massal secara otomatis.

Manual: konfirmasi file skrip masih ada dan asmdef/GUID tidak rusak; konfirmasi satu per satu sebelum menghapus yang kosong.

Daftar periksa penerimaan

  1. Error yang cocok hilang dari Konsol
  2. Play Editor melewati jalur yang sama yang gagal (masuk level, terima damage, buka UI…)
  3. Satu Development Build ke target (atau Player lokal)
  4. MCP periksa ulang read-only: field yang dicurigai tidak lagi None / Missing
  5. Diff Git hanya perubahan kecil scene/Prefab/skrip yang diharapkan—tanpa refactor tambahan
Periksa ulang read-only: ada None atau Missing Script pada <daftar objek>? Sebutkan pengecualian. Jangan edit.

Batasan prompt

JanganLakukan
”Buat Play berfungsi saja”Lapisan A/B/C + tandai field dari stack
Find massal alih-alih referensiPerbaiki field serialisasi atau injeksi eksplisit
Atur ulang Build Settings tanpa dimintaLaporkan daftar saat ini dan scene boot dulu
”Ada NRE”Tempel 20–40 baris stack pertama

Batasan produk

  • Unity MCP: editor Konsol, Hierarchy, skrip, referensi—fokus utama artikel ini.
  • AI Studio: struktur UI ke dalam engine; ikat ulang setelah ekspor ulang sesuai postingan wiring—jangan Find UI dari gameplay.
  • Sertifikat, toko, ROM OEM: tempel teks log ke Cursor untuk bantuan membaca; di luar lingkup edit scene MCP.

Lampiran: umum tetapi di luar fokus utama

Singkirkan fokus utama artikel ini dulu:

GejalaArah
Development OK, Release matiManaged Stripping / link.xml; MCP: “Tebak tipe yang di-strip dari crash stack; usulkan link.xml; jangan tulis file dulu.”
Crash native Android (unmanaged).so / izin / Gradle; tempel logcat untuk dibaca
API Unity di luar thread utamaPeriksa callback async kembali ke thread utama

Jangan gabungkan stripping dan Missing Script menjadi satu “penulisan ulang besar”.

  1. Editor OK / pack rusak → perlakukan sebagai referensi / scene dalam build / path / API Editor dulu
  2. Manual bekukan Build Settings + Error pertama, lalu triase read-only MCP
  3. Stack → baris skrip → field komponen; ikat ulang atau hapus komponen kosong setelah konfirmasi
  4. Tanpa Find atau penulisan ulang gameplay sebagai perbaikan palsu
  5. Terima dengan Development Build + periksa ulang read-only

Jalankan “bekukan → lapisan → trio referensi → tandai field seperti contoh” dan sebagian besar bug referensi perangkat menyusut menjadi diff kecil yang dapat ditinjau.

Panduan lain yang mungkin Anda suka