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 रनटाइम असेंबली में लीक होकर पैक/डिवाइस पर फटता है।
इस पोस्ट की तीन मुख्य धाराएँ (शीर्षक जैसी):
- Console / स्टैक → स्क्रिप्ट और सीन ऑब्जेक्ट
- Build Settings, Missing Script, सीरियलाइज़्ड रेफ़ सत्यापित करें
- Unity MCP से Cursor में केवल-पढ़ने वाला निदान → पुष्टि के बाद न्यूनतम फिक्स
प्लगइन इंस्टॉल या पूरा स्टोर शिपिंग गाइड नहीं। IL2CPP stripping और नेटिव प्लगइन अंत में विस्तार में।
संबंधित:
- Unity MCP इंस्टॉल
- Claude Code और Cursor के साथ Unity MCP
- AI Studio HUD को हेल्थ इवेंट से जोड़ें (सही वायरिंग; यह पोस्ट “टूटा कहाँ है ढूँढें”)
पहले: किस परत पर फेल?
A. बिल्ड विंडो लाल (कंपाइल / पैक विफलता)
↓
B. पैक बन जाता है; डिवाइस लॉन्च पर क्रैश / ब्लैक स्क्रीन
↓
C. गेम शुरू; किसी सीन या फ़ीचर पर रनटाइम में फटता है
| जो दिखे | परत | यहाँ पहले देखें |
|---|---|---|
बिल्ड फेल, error CS… / टाइप नहीं मिला | A | रनटाइम असेंबली में UnityEditor, गलत #if, asmdef |
| बूट सीन पर तुरंत NRE / MissingReference | B/C | सीन बिल्ड में, Missing Script, Inspector में None |
केवल Resources.Load / एडिटिव सीन पर | C | पथ केस, एसेट पैक में, सीन लोड हुआ |
Unity MCP खुले एडिटर पर मजबूत: Console, Hierarchy, कंपोनेंट फ़ील्ड। डिवाइस logcat / Xcode स्टैक Cursor में चिपकाने होंगे — या पहले Development Build और जहाँ संभव हो Editor में वही बूट सीन।
ट्रबलशूट लूप (मैनुअल + MCP)
हर फेल पर क्रम से। मैनुअल छोड़कर AI से Player न लिखवाएँ।
चरण 0: हाथ से सीन फ्रीज़ करें (~2 मिनट)
Cursor से पहले:
- Unity संस्करण और लक्ष्य (जैसे Android / IL2CPP) नोट करें
- Window → General → Console खाली करें, फिर Build या Development Build एक बार
- पहली प्रासंगिक Error (स्टैक सहित) कॉपी करें — Warning की दीवार नहीं
- File → Build Settings खोलें: संदिग्ध सीन चेक है? इंडेक्स 0 बूट सीन है?
- 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 रेफ़, “कॉम्बैट फिर से लिखना” नहीं
मैनुअल
- HUD वाला सीन Build Settings में?
- सीन खोलें,
HudHealthViewऑब्जेक्ट चुनें;healthFill/playerHealthNone? - Prefab संपादन: Apply?
MCP के लिए
केवल-पढ़ने: HUD वाला सीन खोलें।
1. HudHealthView वाले ऑब्जेक्ट ढूँढें
2. healthFill, playerHealth (और समान) None / Missing हैं या नहीं रिपोर्ट करें
3. संपादन न करें
यदि None: न्यूनतम योजना रेफ़ पुनः असाइन और सहेजना — TakeDamage लॉजिक न बदलें।
न्यूनतम फिक्स (OK के बाद)
HUD_HealthFillImage →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 “लगता ठीक”
क्रम में जाँचें — समानांतर मेगा-रीराइट नहीं:
- सीन Build Settings में नहीं या गलत बूट सीन
- Missing Script / सीरियलाइज़्ड None (अनएप्लाइड Prefab सहित)
- एडिटिव सीन लोड नहीं होने पर Find / एक्सेस
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 टूटा नहीं — खाली कंपोनेंट एक-एक पुष्टि के बाद हटाएँ।
स्वीकृति चेकलिस्ट
- मिलती-जुलती Error Console से गायब
- Editor Play वही फेल पथ चले (लेवल, डैमेज, UI…)
- लक्ष्य (या लोकल Player) पर एक Development Build
- MCP केवल-पढ़ने वाली पुनः जाँच: संदिग्ध फ़ील्ड अब None / Missing नहीं
- 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 API | async कॉलबैक मुख्य थ्रेड पर लौटते हैं या नहीं जाँचें |
stripping और Missing Script को एक “बड़े रिफैक्टर” में न मिलाएँ।
सारांश
- Editor OK / पैक टूटा → पहले रेफ़ / बिल्ड में सीन / पथ / Editor API
- मैनुअल Build Settings और पहली Error फ्रीज़, फिर MCP केवल-पढ़ने ट्राइएज
- स्टैक → स्क्रिप्ट लाइन → कंपोनेंट फ़ील्ड; पुष्टि के बाद रीबाइंड या खाली कंपोनेंट हटाएँ
Findया गेमप्ले रीराइट से नकली फिक्स नहीं- 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