Editor Berfungsi, Binaan Gagal: Jejak Ralat Konsol ke Rujukan Skrip dan Adegan dengan Unity MCP
Apabila Unity Play berfungsi tetapi binaan Player/peranti gagal atau NRE pada muat adegan: lapisan A/B/C, gunakan Cursor + Unity MCP untuk membaca Konsol, sahkan Tetapan Binaan dan rujukan bersiri—dengan sampel tindanan, pemeriksaan manual, dan pembaikan minimum.
- Unity MCP
- Unity
- Console
- build
- Android
- Cursor
- troubleshooting
- AI game development
Benang bertajuk “Unity berfungsi dalam editor, gagal pada peranti / binaan” kelihatan sama: Play berfungsi, kemudian binaan Player / peranti menjadi merah, ranap, skrin hitam, atau membuang NullReferenceException apabila memasuki adegan. Enjin jarang “rosak”—laluan editor menyembunyikan jurang rujukan dan platform: adegan tidak dalam senarai binaan, medan bersiri yang None pada cakera, sensitiviti huruf besar/kecil laluan, atau API UnityEditor bocor ke dalam pemasangan runtime sehingga masa pembungkusan.
Catatan ini mempunyai tiga tunjang (sama seperti tajuk):
- Konsol / tindanan → objek skrip dan adegan
- Sahkan Tetapan Binaan, Skrip Hilang, rujukan bersiri
- Diagnosis baca-sahaja dalam Cursor melalui Unity MCP → pembaikan minimum selepas anda sahkan
Tiada panduan pemasangan plugin, tiada panduan penghantaran kedai penuh. Pelucutan IL2CPP dan plugin asli kekal dalam lampiran.
Berkaitan:
- Pemasangan Unity MCP
- Unity MCP dengan Claude Code dan Cursor
- Sambungkan HUD AI Studio kepada peristiwa kesihatan (pendawaian betul; catatan ini ialah “cara mencari kerosakan”)
Pertama: lapisan mana yang gagal?
A. Tetingkap Binaan merah (kegagalan kompilasi / pembungkusan)
↓
B. Binaan berjaya; peranti mati atau skrin hitam semasa pelancaran
↓
C. Permainan bermula; adegan atau ciri meletup pada runtime
| Apa yang anda lihat | Lapisan | Semak dahulu di sini |
|---|---|---|
Binaan gagal, error CS… / jenis tidak ditemui | A | Pemasangan runtime merujuk UnityEditor, #if buruk, asmdef |
| NRE / MissingReference pada adegan boot | B/C | Adegan dalam senarai binaan, Skrip Hilang, None dalam Inspector |
Hanya gagal pada Resources.Load / adegan tambahan | C | Kes huruf laluan, aset dalam pek, adegan sebenarnya dimuatkan |
Unity MCP paling kuat pada editor terbuka: Konsol, Hierarki, medan komponen. Tindanan peranti logcat / Xcode mesti ditampal ke dalam Cursor—atau hantar Binaan Pembangunan dan hasilkan semula dengan adegan boot yang sama dalam Editor apabila boleh.
Gelung penyelesaian masalah (manual + MCP)
Jangan langkau laluan manual dan minta AI menulis semula Player.
Langkah 0: Bekukan adegan dengan tangan (~2 minit)
Sebelum Cursor:
- Catat versi Unity dan sasaran (cth. Android / IL2CPP)
- Kosongkan Window → General → Console, kemudian Bina atau Binaan Pembangunan sekali
- Salin Ralat pertama yang berkaitan (dengan tindanan)—bukan dinding Amaran
- Buka File → Build Settings: adakah adegan yang disyaki ditandakan? Adakah indeks 0 ialah adegan boot?
- Jika anda mengedit contoh Prefab: adakah anda Apply? Penggantian tidak digunakan selalunya tidak pernah mencapai aset cakera yang anda fikir anda hantar
Langkah 1: Triage Konsol baca-sahaja MCP
Ringkaskan Ralat Konsol yang berkaitan dengan binaan ini / Play terakhir (abaikan Info).
Klasifikasikan sebagai kompilasi / Skrip Hilang / NullReference / muat sumber.
Senaraikan laluan skrip, baris, nama GameObject setiap ralat apabila ada.
Jangan ubah suai sebarang aset.
Langkah 2: Manual + MCP “trio rujukan”
Untuk NRE runtime (B/C), pilih objek tindanan dalam editor dan semak silang dengan MCP:
| Manual | Prompt MCP |
|---|---|
| Senarai Tetapan Binaan (screenshot atau imlak) | “Senaraikan laluan adegan Build Settings dan bendera didayakan; namakan adegan boot.” |
| Inspector: Skrip Hilang / rujukan None | ”Dalam adegan <Nama>, senaraikan Skrip Hilang; semak medan bersiri pada <Objek>.<Komponen> untuk None. Jadual sahaja. Jangan edit.” |
| Aset Prefab vs contoh adegan | ”Adakah <X> aset Prefab atau contoh adegan? Sebarang penggantian tidak digunakan jika kelihatan? Laporkan sahaja.” |
Peraturan: Pek menggunakan adegan/Prefab pada cakera. Pengisian sementara OnValidate yang “kelihatan baik” dalam Editor tidak dikira—percayai nilai bersiri daripada MCP/Inspector.
Langkah 3: Templat diagnosis, kemudian sahkan
[Kekangan]
- Diagnosis dan cadangkan pelan minimum; tunggu OK saya sebelum mengedit
- Jangan palsukan pembaikan dengan GameObject.Find secara besar-besaran
- Sentuh hanya skrip/Prefab/adegan yang berkaitan dengan Ralat ini
[Adegan]
- Editor Play: OK / rosak (jujur)
- Platform / binaan: …
- Adegan boot Build Settings: …
- Tindanan Konsol / peranti (mentah):
<tampal>
[Jawapan]
1. Lapisan A / B / C
2. 1–2 punca utama (tidak dalam binaan / rujukan None / Skrip Hilang / kes / API Editor…)
3. Objek dan nama medan yang perlu saya sahkan
4. Langkah pembaikan minimum (masih jangan laksanakan)
Langkah 4: Tulis minimum + semak semula
Terapkan pembaikan minimum yang disahkan: hanya <objek.medan> atau beberapa baris dalam <laluan skrip> untuk Ralat ini.
Simpan adegan/Prefab.
Kemudian semak semula baca-sahaja: medan masih None? Ralat yang sama masih dalam Konsol?
Contoh kerja: tindanan → medan
Log Player/peranti sintetik tetapi realistik (tukar laluan untuk projek 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 apabila menerima kerosakan → C (runtime); syak rujukan UI, bukan “tulis semula pertempuran”
Manual
- Adakah adegan HUD dalam Tetapan Binaan?
- Pilih objek
HudHealthView; adakahhealthFill/playerHealthNone? - Suntingan Prefab: Applied?
MCP
Baca-sahaja: buka adegan yang mengandungi HUD.
1. Cari objek dengan HudHealthView
2. Laporkan sama ada healthFill, playerHealth (dan rakan sebaya) adalah None / Hilang
3. Jangan edit
Jika None: pelan minimum ialah tetapkan semula rujukan dan simpan—bukan ubah TakeDamage.
Pembaikan minimum (selepas OK)
- Seret Imej
HUD_HealthFill→healthFill;PlayerHealthpemain →playerHealth - Simpan; Binaan Pembangunan; terima kerosakan sekali lagi
”Pembaikan” buruk (jangan)
// Anti-corak: Find menyembunyikan None — masih rosak pada rename / muat tambahan
healthFill = GameObject.Find("HUD_HealthFill").GetComponent<Image>();
Pendawaian betul: HUD → peristiwa kesihatan. Di sini: pin medan daripada tindanan, kemudian ikat semula.
Matriks gejala (tunjang)
Gejala 1: Binaan merah — jenis tidak ditemui / UnityEditor
| Punca berkemungkinan | Manual | MCP |
|---|---|---|
| Skrip runtime menggunakan API Editor | Adakah fail di luar Editor/? | ”Cari UnityEditor. di luar folder Editor; senaraikan laluan sahaja.” |
#if terbalik, jenis Player hilang | Semak UNITY_EDITOR membungkus | ”Jenis mana yang wujud di bawah Editor vs Player untuk fail ini?” |
| Jurang asmdef | Buka .asmdef yang gagal | ”Senaraikan rujukan asmdef; yang mana hilang?” |
Anti-corak (API Editor dalam pemasangan runtime → binaan Player gagal):
using UnityEngine;
using UnityEditor; // Gagal binaan jika bukan pemasangan Editor
public class BadBake : MonoBehaviour
{
[MenuItem("Tools/Bad")] // kebergantungan UnityEditor selanjutnya
static void Run() { }
}
Pembaikan A: seluruh fail di bawah Editor/
Assets/Scripts/Editor/BakeTools.cs ← kompilasi khusus editor
Pembaikan B: asingkan dalam fail (hanya jika anda mesti kongsi fail)
using UnityEngine;
public class RuntimeSafe : MonoBehaviour
{
public void DoGameplay() { /* kelihatan kepada Player */ }
#if UNITY_EDITOR
[ContextMenu("Debug/Fill Refs")]
void EditorOnlyFill()
{
// Editor sahaja — jangan anggap ini sebagai data runtime yang dibungkus dari Awake
}
#endif
}
Lebih bersih: skrip khusus Editor + asmdef supaya pemasangan runtime tidak pernah menarik rujukan Editor.
Gejala 2: NRE peranti pada masuk adegan; Editor Play “nampak baik”
Semak mengikut urutan—tiada penulisan semula mega selari:
- Adegan tidak dalam Tetapan Binaan atau adegan boot salah
- Skrip Hilang / None bersiri (termasuk Prefab tidak digunakan)
- Adegan tambahan tidak dimuatkan sebelum Find / akses
- Kes huruf laluan
Resources.Load(Editor macOS selalunya tidak sensitif huruf; Android tidak)
1. Laporkan adegan Build Settings, bendera didayakan, indeks boot
2. Senaraikan semua Skrip Hilang dalam adegan <X>
3. Semak rujukan awam pada GameManager / Player / HUD sepanjang laluan boot untuk None
Laporkan sahaja; jangan edit.
| Dalam Editor | Dalam pek | Punca biasa |
|---|---|---|
| Rujukan kelihatan ditetapkan | None runtime | Penggantian contoh tidak digunakan; fail adegan salah diedit |
Find berfungsi | Null peranti | Objek dalam adegan tidak dimuatkan; nama tidak sepadan |
Resources.Load berfungsi | Null peranti | Kes huruf laluan; aset tidak di bawah Resources/ |
// Pada cakera: Assets/Resources/UI/HealthBar.png
// Selalunya gagal pada Android (kes huruf tidak sepadan):
Resources.Load<Sprite>("ui/healthbar");
// Padankan laluan di bawah Resources, cth.:
Resources.Load<Sprite>("UI/HealthBar");
Cari rentetan laluan Resources.Load / Addressables.LoadAssetAsync;
bina jadual sensitif huruf vs laluan relatif sebenar. Jangan edit kod lagi.
Gejala 3: Konsol dibanjiri Skrip Hilang
Imbas adegan <X> dan Prefab <laluan>:
Senaraikan laluan GameObject dengan Skrip Hilang.
Setiap item: cadangkan lampirkan semula skrip asal atau buang komponen kosong (dari nama/GUID yang tinggal jika kelihatan).
Jangan padam pukal secara automatik.
Manual: sahkan fail skrip masih wujud dan asmdef/GUID tidak rosak; sahkan satu demi satu sebelum memadam kosong.
Senarai semak penerimaan
- Ralat yang sepadan hilang daripada Konsol
- Editor Play berjalan melalui laluan yang sama yang gagal (masuk tahap, terima kerosakan, buka UI…)
- Satu Binaan Pembangunan ke sasaran (atau Player tempatan)
- MCP semak semula baca-sahaja: medan yang disyaki tidak lagi None / Hilang
- Git diff hanya perubahan kecil adegan/Prefab/skrip yang dijangkakan—tiada refaktor sampingan
Semak semula baca-sahaja: sebarang None atau Skrip Hilang pada <senarai objek>? Senaraikan pengecualian. Jangan edit.
Garis merah prompt
| Jangan | Lakukan |
|---|---|
| ”Buat Play berfungsi sahaja” | Lapisan A/B/C + pin medan daripada tindanan |
Find besar-besaran dan bukannya rujukan | Betulkan medan bersiri atau suntikan eksplisit |
| Susun semula Tetapan Binaan tanpa diminta | Laporkan senarai semasa dan adegan boot dahulu |
| ”Ada NRE” | Tampal 20–40 baris tindanan pertama |
Sempadan produk
- Unity MCP: Konsol editor, Hierarki, skrip, rujukan—tunjang artikel ini.
- AI Studio: Struktur UI ke dalam enjin; ikat semula selepas eksport semula mengikut catatan pendawaian—jangan cari UI daripada permainan.
- Sijil, kedai, ROM OEM: tampal teks log ke dalam Cursor untuk bantuan membaca; di luar skop edit adegan MCP.
Lampiran: biasa tetapi di luar tunjang
Ketepikan tunjang artikel ini dahulu:
| Gejala | Arah |
|---|---|
| Pembangunan OK, Keluaran mati | Managed Stripping / link.xml; MCP: “Teka jenis dilucutkan daripada tindanan ranap; cadangkan link.xml; jangan tulis fail lagi.” |
| Ranap asli Android (tidak terurus) | .so / kebenaran / Gradle; tampal logcat untuk membaca |
| API Unity di luar benang utama | Semak panggilan balik async kembali ke benang utama |
Jangan gabungkan stripping dan Skrip Hilang menjadi satu “penulisan semula besar.”
- Editor OK / pek rosak → anggap rujukan / adegan dalam binaan / laluan / API Editor dahulu
- Manual bekukan Tetapan Binaan + Ralat pertama, kemudian triage baca-sahaja MCP
- Tindanan → baris skrip → medan komponen; ikat semula atau buang komponen kosong selepas sahkan
- Tiada
Findatau penulisan semula permainan sebagai pembaikan palsu - Terima dengan Binaan Pembangunan + semak semula baca-sahaja
Jalankan “bekukan → lapisan → trio rujukan → pin medan seperti sampel” dan kebanyakan pepijat rujukan peranti mengecil kepada diff kecil yang boleh disemak.
Teruskan membaca
Panduan lain yang mungkin anda suka
Penyelesaian Masalah Sambungan Cocos MCP: Kursor Tidak Menunjukkan cocos-creator
Pembaikan berdasarkan gejala untuk VberAI Cocos Creator 2.x / 3.x MCP: sambungan hilang, kegagalan pengaktifan, pelayan tidak berjalan, konflik port, MCP Kursor tidak ditulis atau perlu muat semula—serta senarai semak dan pengesahan localhost.
- cocos
- cocos-creator
- mcp
- cursor
Bina Platformer 2D dengan Godot MCP: Pergerakan, Tahap, dan Musuh
Hantar prototaip platformer Godot 4 melalui MCP: rasa CharacterBody2D, tahap TileMap, musuh mudah; gunakan VberAI Studio untuk HUD/UI tajuk sebenar.
- Godot MCP
- 2D platformer
- Godot 4
- GDScript
Nombor Kerosakan Terapung: Penerimaan Serahan dan Pelaksanaan Enjin
Kriteria gagal apabila popup kabur, glif hilang, susunan salah, atau tersekat; memilih TMP vs digit bitmap, kolam dan susunan Canvas, langkah penerimaan Unity UGUI, dan cara art digit reka bentuk dipasang.
- game-ui-design
- game-dev-ai
- ui-to-engine
- bitmap-font