← ब्लॉग पर वापस

Editor चलता है, बिल्ड फेल: Unity MCP से Console त्रुटियों से स्क्रिप्ट और सीन रेफ़ ट्रेस करें

जब Unity Play ठीक है लेकिन Player/डिवाइस बिल्ड फेल या सीन लोड पर NRE: A/B/C परतें, Cursor + Unity MCP से Console पढ़ें, Build Settings और सीरियलाइज़्ड रेफ़ जाँचें — स्टैक उदाहरण, मैनुअल चेक और न्यूनतम फिक्स के साथ।

प्रकाशित
  • Unity MCP
  • Unity
  • Console
  • build
  • Android
  • Cursor
  • troubleshooting
  • AI game development

“Unity works in editor, fails on device / build” शीर्षक वाले थ्रेड एक जैसे दिखते हैं: लोकल Play ठीक, फिर Player / डिवाइस बिल्ड लाल हो जाता है, क्रैश, ब्लैक स्क्रीन, या सीन एंटर पर तुरंत NullReferenceException। इंजन शायद ही “टूटा” होता है — एडिटर पथ ने रेफ़ और प्लेटफ़ॉर्म अंतर छिपा दिए: सीन पैक में नहीं, डिस्क पर सीरियलाइज़्ड फ़ील्ड None, पथ केस, या UnityEditor API रनटाइम असेंबली में लीक होकर पैक/डिवाइस पर फटता है।

इस पोस्ट की तीन मुख्य धाराएँ (शीर्षक जैसी):

  1. Console / स्टैक → स्क्रिप्ट और सीन ऑब्जेक्ट
  2. Build Settings, Missing Script, सीरियलाइज़्ड रेफ़ सत्यापित करें
  3. Unity MCP से Cursor में केवल-पढ़ने वाला निदान → पुष्टि के बाद न्यूनतम फिक्स

प्लगइन इंस्टॉल या पूरा स्टोर शिपिंग गाइड नहीं। IL2CPP stripping और नेटिव प्लगइन अंत में विस्तार में।

संबंधित:

पहले: किस परत पर फेल?

A. बिल्ड विंडो लाल (कंपाइल / पैक विफलता)
        ↓
B. पैक बन जाता है; डिवाइस लॉन्च पर क्रैश / ब्लैक स्क्रीन
        ↓
C. गेम शुरू; किसी सीन या फ़ीचर पर रनटाइम में फटता है
जो दिखेपरतयहाँ पहले देखें
बिल्ड फेल, error CS… / टाइप नहीं मिलाAरनटाइम असेंबली में UnityEditor, गलत #if, asmdef
बूट सीन पर तुरंत NRE / MissingReferenceB/Cसीन बिल्ड में, Missing Script, Inspector में None
केवल Resources.Load / एडिटिव सीन परCपथ केस, एसेट पैक में, सीन लोड हुआ

Unity MCP खुले एडिटर पर मजबूत: Console, Hierarchy, कंपोनेंट फ़ील्ड। डिवाइस logcat / Xcode स्टैक Cursor में चिपकाने होंगे — या पहले Development Build और जहाँ संभव हो Editor में वही बूट सीन।

ट्रबलशूट लूप (मैनुअल + MCP)

हर फेल पर क्रम से। मैनुअल छोड़कर AI से Player न लिखवाएँ।

चरण 0: हाथ से सीन फ्रीज़ करें (~2 मिनट)

Cursor से पहले:

  1. Unity संस्करण और लक्ष्य (जैसे Android / IL2CPP) नोट करें
  2. Window → General → Console खाली करें, फिर Build या Development Build एक बार
  3. पहली प्रासंगिक Error (स्टैक सहित) कॉपी करें — Warning की दीवार नहीं
  4. File → Build Settings खोलें: संदिग्ध सीन चेक है? इंडेक्स 0 बूट सीन है?
  5. Prefab बदला हो: Apply किया? अनएप्लाइड ओवरराइड अक्सर डिस्क एसेट या दूसरे के पैक में नहीं जाते

चरण 1: MCP केवल-पढ़ने — Console ट्राइएज

इस बिल्ड / आखिरी Play से जुड़ी Console Error सारांशित करें (Info अनदेखा)।
वर्गीकृत करें: कंपाइल / Missing Script / NullReference / रिसोर्स लोड।
प्रत्येक त्रुटि में स्क्रिप्ट पथ, लाइन, GameObject नाम (लॉग में हो तो) सूचीबद्ध करें।
कोई एसेट न बदलें।

चरण 2: मैनुअल + MCP “रेफ़ त्रय”

रनटाइम NRE (B/C) के लिए स्टैक ऑब्जेक्ट एडिटर में खोलें और MCP से क्रॉस-चेक:

मैनुअलMCP प्रॉम्प्ट
Build Settings सूची (स्क्रीनशॉट या बोलकर)“Build Settings सीन पथ और enabled फ़्लैग सूचीबद्ध करें; बूट सीन बताएँ।“
Inspector: Missing Script / None रेफ़”सीन <Name> में Missing Script सूचीबद्ध करें; <Object>.<Component> की सीरियलाइज़्ड फ़ील्ड None के लिए जाँचें। केवल तालिका। संपादन नहीं।“
Prefab एसेट vs सीन इंस्टेंस”<X> Prefab एसेट है या सीन इंस्टेंस? अनएप्लाइड ओवरराइड (दिखें तो)? केवल रिपोर्ट।”

नियम: पैक में डिस्क पर सीन/Prefab जाते हैं। Editor में OnValidate से अस्थायी भराव “ठीक दिखते” हैं — MCP/Inspector की सीरियलाइज़्ड वैल्यू पर भरोसा करें।

चरण 3: निदान टेम्पलेट, फिर पुष्टि

[बाधाएँ]
- पहले निदान और न्यूनतम योजना; संपादन से पहले मेरी OK का इंतज़ार
- बड़े पैमाने पर GameObject.Find से फिक्स न बनाएँ
- केवल इस Error से जुड़े स्क्रिप्ट/Prefab/सीन छुएँ

[सीन]
- Editor Play: OK / टूटा (सच्चाई)
- प्लेटफ़ॉर्म / बिल्ड: …
- Build Settings बूट सीन: …
- Console / डिवाइस स्टैक (मूल):
<चिपकाएँ>

[उत्तर]
1. परत A / B / C
2. शीर्ष 1–2 मूल कारण (बिल्ड में नहीं / None रेफ़ / Missing Script / केस / Editor API…)
3. मुझे जाँचने वाले ऑब्जेक्ट और फ़ील्ड नाम
4. न्यूनतम फिक्स कदम (अभी न चलाएँ)

चरण 4: पुष्टि के बाद न्यूनतम लिखना + पुनः जाँच

पुष्टि योजना लागू करें: केवल <ऑब्जेक्ट.फ़ील्ड> या <स्क्रिप्ट पथ> में इस Error से जुड़ी कुछ लाइनें।
सीन/Prefab सहेजें।
फिर केवल-पढ़ने वाली पुनः जाँच: फ़ील्ड अभी भी None? Console में वही Error?

पूर्ण उदाहरण: स्टैक से फ़ील्ड तक

नीचे यथार्थवादी डिवाइस/Player लॉग (संरचना सामान्य; पथ अपने प्रोजेक्ट से बदलें)।

लॉग

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

परत

  • Update तक पहुँचे → A नहीं (कंपाइल OK)
  • डैमेज पर गिरे → C (रनटाइम); संदेह UI रेफ़, “कॉम्बैट फिर से लिखना” नहीं

मैनुअल

  1. HUD वाला सीन Build Settings में?
  2. सीन खोलें, HudHealthView ऑब्जेक्ट चुनें; healthFill / playerHealth None?
  3. Prefab संपादन: Apply?

MCP के लिए

केवल-पढ़ने: HUD वाला सीन खोलें।
1. HudHealthView वाले ऑब्जेक्ट ढूँढें
2. healthFill, playerHealth (और समान) None / Missing हैं या नहीं रिपोर्ट करें
3. संपादन न करें
यदि None: न्यूनतम योजना रेफ़ पुनः असाइन और सहेजना — TakeDamage लॉजिक न बदलें।

न्यूनतम फिक्स (OK के बाद)

  • HUD_HealthFill Image → healthFill; Player का PlayerHealth → playerHealth
  • सीन सहेजें; Development Build; फिर डैमेज

गलत “फिक्स” (न करें)

// एंटी-पैटर्न: Find None छिपाता है — रीनेम / एडिटिव लोड पर फिर टूटेगा
healthFill = GameObject.Find("HUD_HealthFill").GetComponent<Image>();

सही वायरिंग: HUD → हेल्थ इवेंट। यहाँ: स्टैक से फ़ील्ड पिन करें, फिर रीबाइंड।

लक्षण मैट्रिक्स (मुख्य धारा)

लक्षण 1: बिल्ड लाल — टाइप नहीं मिला / UnityEditor

संभावित कारणमैनुअलMCP
रनटाइम स्क्रिप्ट Editor API उपयोगफ़ाइल Editor/ के बाहर?”Editor फ़ोल्डर के बाहर UnityEditor. खोजें; केवल पथ।“
उलटा #if, Player में टाइप नहींUNITY_EDITOR रैप जाँचें”इस फ़ाइल में Editor vs Player के लिए कौन से टाइप दिखते हैं?“
asmdef अंतरफेल .asmdef खोलें”asmdef रेफ़ सूची; कौन सा गायब?”

एंटी-पैटर्न (रनटाइम असेंबली में Editor API → Player बिल्ड फेल):

using UnityEngine;
using UnityEditor; // Editor असेंबली न हो तो बिल्ड फेल

public class BadBake : MonoBehaviour
{
    [MenuItem("Tools/Bad")] // और UnityEditor निर्भरता
    static void Run() { }
}

फिक्स A: पूरी फ़ाइल Editor/ के अंतर्गत

Assets/Scripts/Editor/BakeTools.cs   ← केवल एडिटर कंपाइल

फिक्स B: एक फ़ाइल में अलगाव (केवल जब साझा फ़ाइल ज़रूरी)

using UnityEngine;

public class RuntimeSafe : MonoBehaviour
{
    public void DoGameplay() { /* Player को दिखे */ }

#if UNITY_EDITOR
    [ContextMenu("Debug/Fill Refs")]
    void EditorOnlyFill()
    {
        // केवल एडिटर — Awake में इसे पैक डेटा न मानें
    }
#endif
}

साफ़: Editor-केवल स्क्रिप्ट + asmdef ताकि रनटाइम असेंबली Editor रेफ़ न खींचे।

लक्षण 2: डिवाइस पर सीन एंटर NRE; Editor Play “लगता ठीक”

क्रम में जाँचें — समानांतर मेगा-रीराइट नहीं:

  1. सीन Build Settings में नहीं या गलत बूट सीन
  2. Missing Script / सीरियलाइज़्ड None (अनएप्लाइड Prefab सहित)
  3. एडिटिव सीन लोड नहीं होने पर Find / एक्सेस
  4. Resources.Load पथ केस (macOS Editor अक्सर केस-असंवेदनशील; Android संवेदनशील)
1. Build Settings सीन, enabled फ़्लैग, बूट इंडेक्स रिपोर्ट करें
2. सीन <X> में सभी Missing Script सूचीबद्ध करें
3. बूट पथ पर GameManager / Player / HUD सार्वजनिक रेफ़ None के लिए जाँचें
केवल रिपोर्ट; संपादन नहीं।
Editor मेंपैक मेंसामान्य कारण
रेफ़ सेट दिखेंरनटाइम Noneइंस्टेंस ओवरराइड अनएप्लाइड; गलत सीन फ़ाइल संपादित
Find काम करेडिवाइस nullअनलोड सीन में ऑब्जेक्ट; नाम मेल नहीं
Resources.Load OKडिवाइस nullपथ केस; एसेट Resources/ के बाहर
// डिस्क पर: Assets/Resources/UI/HealthBar.png
// Android पर अक्सर फेल (केस मेल नहीं):
Resources.Load<Sprite>("ui/healthbar");
// Resources के नीचे सापेक्ष पथ से मेल, उदाहरण:
Resources.Load<Sprite>("UI/HealthBar");
प्रोजेक्ट में Resources.Load / Addressables.LoadAssetAsync पथ स्ट्रिंग खोजें;
वास्तविक सापेक्ष पथों से केस-संवेदनशील तालिका बनाएँ। अभी कोड न बदलें।

लक्षण 3: Console Missing Script से भरा

सीन <X> और Prefab <path> स्कैन करें:
Missing Script वाले GameObject पथ सूचीबद्ध करें।
प्रत्येक के लिए: मूल स्क्रिप्ट फिर से लगाने या खाली कंपोनेंट हटाने का सुझाव (बचे नाम/GUID दिखें तो)।
स्वचालित बल्क हटाना अभी नहीं।

मैनुअल: Project में स्क्रिप्ट फ़ाइल मौजूद, asmdef/GUID टूटा नहीं — खाली कंपोनेंट एक-एक पुष्टि के बाद हटाएँ।

स्वीकृति चेकलिस्ट

  1. मिलती-जुलती Error Console से गायब
  2. Editor Play वही फेल पथ चले (लेवल, डैमेज, UI…)
  3. लक्ष्य (या लोकल Player) पर एक Development Build
  4. MCP केवल-पढ़ने वाली पुनः जाँच: संदिग्ध फ़ील्ड अब None / Missing नहीं
  5. Git diff केवल अपेक्षित छोटे सीन/Prefab/स्क्रिप्ट बदलाव — “चलते-चलते रिफैक्टर” नहीं
केवल-पढ़ने वाली पुनः जाँच: <ऑब्जेक्ट सूची> पर None या Missing Script? अपवाद सूचीबद्ध करें। संपादन नहीं।

प्रॉम्प्ट लाल रेखाएँ

न करेंकरें
”बस Play चलाओ”पहले परत A/B/C + स्टैक से फ़ील्ड पिन
रेफ़ की जगह बड़े Findसीरियलाइज़्ड फ़ील्ड या स्पष्ट इंजेक्शन ठीक करें
बिना पूछे Build Settings क्रम बदलेंपहले वर्तमान सूची और बूट सीन रिपोर्ट
”NRE है”स्टैक की पहली 20–40 लाइन चिपकाएँ

उत्पाद सीमाएँ

  • Unity MCP: एडिटर Console, Hierarchy, स्क्रिप्ट, रेफ़ — इस लेख की मुख्य धारा।
  • AI Studio: UI संरचना इंजन में; री-एक्सपोर्ट के बाद वायरिंग पोस्ट से रीबाइंड — गेमप्ले से UI Find न करें।
  • प्रमाणपत्र, स्टोर, OEM ROM: लॉग टेक्स्ट Cursor में पढ़ने में मदद के लिए; MCP सीन-संपादन दायरे से बाहर।

विस्तार: सामान्य लेकिन मुख्य धारा से बाहर

पहले इस लेख की मुख्य धारा बाहर करें:

लक्षणदिशा
Development OK, Release मरेManaged Stripping / link.xml; MCP: “क्रैश स्टैक से stripped टाइप अनुमान; link.xml प्रस्ताव; अभी फ़ाइल न लिखें।“
केवल Android नेटिव क्रैश (अनमैनेज्ड स्टैक).so / अनुमति / Gradle; logcat चिपकाएँ
मुख्य थ्रेड के बाहर Unity APIasync कॉलबैक मुख्य थ्रेड पर लौटते हैं या नहीं जाँचें

stripping और Missing Script को एक “बड़े रिफैक्टर” में न मिलाएँ।

सारांश

  1. Editor OK / पैक टूटा → पहले रेफ़ / बिल्ड में सीन / पथ / Editor API
  2. मैनुअल Build Settings और पहली Error फ्रीज़, फिर MCP केवल-पढ़ने ट्राइएज
  3. स्टैक → स्क्रिप्ट लाइन → कंपोनेंट फ़ील्ड; पुष्टि के बाद रीबाइंड या खाली कंपोनेंट हटाएँ
  4. Find या गेमप्ले रीराइट से नकली फिक्स नहीं
  5. Development Build + केवल-पढ़ने वाली पुनः जाँच से स्वीकारें

“फ्रीज़ → परत → रेफ़ त्रय → उदाहरण जैसे फ़ील्ड पिन” चलाएँ और अधिकांश डिवाइस रेफ़ बग समीक्षा योग्य छोटे diff में सिमट जाते हैं।

आपको ये लेख भी पसंद आ सकते हैं

Claude Code को Unity MCP से कैसे जोड़ें: इंस्टॉल और कॉन्फ़िगर करें

Unity MCP इंस्टॉल करें और Claude CLI से जोड़ें: Package Manager से इम्पोर्ट, एक्टिवेशन, लोकल MCP Server (पोर्ट 6589) शुरू करें, Quick setup से CLI कमांड कॉपी-रन करें, और Hierarchy पढ़ें/लिखें।

  • unity
  • mcp
  • claude-code
  • tutorial
और पढ़ें

VberAI इन-प्लेस स्लाइस: गेम UI डिज़ाइन छवियों को एक क्लिक में Unity / Godot / Cocos में आयात करें

VberAI Studio फुल-स्क्रीन गेम UI डिज़ाइन छवियों को इन-प्लेस स्लाइस करता है, लेआउट और आकार बनाए रखता है, और एक क्लिक में Unity, Godot और Cocos में निर्यात करता है।

  • vberai
  • ai-studio
  • inplace-slice
  • game-ui
और पढ़ें

Godot में MCP प्लगइन कैसे सक्षम करें: डाउनलोड से Cursor में टूल्स तक

Godot में ओपन-सोर्स Godot MCP सक्षम करें: प्लगइन डाउनलोड करें, addons में रखें, Project Settings में चालू करें, लोकल सर्वर शुरू करें और Cursor में godot-mcp कनेक्ट सुनिश्चित करें।

  • godot
  • mcp
  • cursor
  • tutorial
और पढ़ें