2013-02-07 25 views
6

में पैनल छुपाएं और दिखाएं मैं NGUI और unity 3d पर नया हूं। मेरे पास ui रूट में दो पैनल हैं। इसका नाम firstPanel और secondPanel है। दूसरा पैनेल दृश्य में निष्क्रिय है। firstPanel में मेरे पास बहुत सारे बटन हैं और एक play बटन है, यह छवि बटन है। play बटन पर क्लिक करते हैं, firstPanelछिपाने और मिलना चाहिए secondPanelदिखाना चाहिए मैं एडे play बटन के लिए एक नया स्क्रिप्ट और लिखित कोड में यहएनजीईआई

void OnClick(){ 
    GameObject panel2 = GameObject.Find("secondPanel"); 
    NGUITools.SetActive(panel2,true);  
    GameObject panel1 = GameObject.Find("firstPanel");   
    NGUITools.SetActive(panel1,false); 

} 

लेकिन मैं इस त्रुटि मिलती है: "NullReferenceException" में ngui की कौन सी स्क्रिप्ट मुझे संपादित करना है और मैं इसे कैसे कर सकता हूं? कृपया इस समस्या को हल करने में मेरी सहायता करें अग्रिम धन्यवाद।

+1

आपको किस लाइन में अपवाद मिलता है? – Kay

+0

GameObject पैनल 2 = GameObject.Find ("secondPanel"); यहां मुझे त्रुटि मिल रही है – Sona

उत्तर

8

यदि आपके पैनलों को पैनल 1 और पैनल 2 के रूप में नामित किया गया है, तो आप उन्हें GameObject.Find ("secondPanel") और GameObject.Find ("firstPanel") का उपयोग करके नहीं पाएंगे। यदि "Panel1" और "Panel2" खेल दृश्य में केवल नाम (कोई अन्य Panel1 या Panel2) है, तो आप

void OnClick(){ 
    GameObject panel2 = GameObject.Find("Panel2"); 
    NGUITools.SetActive(panel2,true);  
    GameObject panel1 = GameObject.Find("Panel1");   
    NGUITools.SetActive(panel1,false); 

} 
+0

क्षमा करें। यह ठीक से काम नहीं कर रहा है। दूसरा पैनेल दृश्य में निष्क्रिय है। तो मैं इसे दिखाने में सक्षम नहीं कर सकता। – Sona

+3

तो मुझे लगता है कि उन्हें संदर्भ के रूप में रखना होगा काम करेगा। इसे आज़माएं: "सार्वजनिक गेम ऑब्जेक्ट पैनल 2" जोड़ें; आपकी लिपि में (कक्षा के शरीर में, उदाहरण के लिए शून्य ऑनक्लिक से ऊपर)। फिर अपने प्ले बटन का चयन करें, आपको इंस्पेक्टर में अपनी स्क्रिप्ट पर "पैनल 2" नामक एक फ़ील्ड दिखाई देगा। दूसरे दृश्य को गेम दृश्य से फ़ील्ड में खींचें। फिर आप GameObject लाइन को हटा सकते हैं और पैनल 2 का उपयोग सीधे कर सकते हैं। – onevcat

+0

GameObject.Find और NGUITools का उपयोग क्यों करें।सक्रिय नियत करें? यह बहुत धीमा है ... क्या प्रस्तुत करने का कोई तरीका नहीं है? – GeekPeek

3

GameObject.Find ("कुछ") का उपयोग करने के लिए किसी भी विकलांग खेल नहीं मिल सकता है की कोशिश कर सकते वस्तु, तो आप इस तरह से उपयोग नहीं कर सकते हैं। आप अपने बटन कोड में प्रतिबिंब जोड़ने की कोशिश कर सकते हैं:

public GameObject pannel1 = null; 
public GameObject pannel2 = null; 

और उन्हें दृश्य संपादक विंडो में सही पैनल के लिए निर्धारित किया है।

एक और तरीका है, पहले आप अपने दृश्य में आपके सक्रिय पैनल के दोनों रखने की जरूरत है, तो इस तरह से अपनी बटन स्क्रिप्ट के कोड जोड़ें:

private GameObject panel1 = null; 
private GameObject panel2 = null; 
void Start() 
{ 
    panel1 = GameObject.Find("Panel1"); 
    panel2 = GameObject.Find("Panel2"); 
} 

void OnClick() 
{ 
    panel2.SetActiveRecursively(true); 
    panel1.SetActiveRecursively(false); 
} 

GameObject.Find बहुत ही कुशल (स्ट्रिंग नाम) कार्य नहीं है Unity3D में, इसलिए इसे अद्यतन() या हर बार जब आप अपने बटन पर क्लिक करते हैं, तो इसका उपयोग करने की कोशिश न करें।

0

आप एक अक्षम gameobject खोजने के लिए GameObject.Find() का उपयोग नहीं कर सकते हैं, यह वापस शून्य है;

1

मुझे पता है कि यह धागा पुराना है, लेकिन अगर किसी और को निष्क्रिय होने पर पैनलों को कॉल करने में कोई समस्या हो रही है तो आप अपने पैनल को प्रीफैब कर सकते हैं और अपने पैनल को कॉल करने के लिए NGUITools.AddChild का उपयोग कर सकते हैं। यह ऐसा कुछ दिखता है।

public GameObject parent; 
public GameObject child; 

void Spawn() { 

NGUITools.AddChild (parent, child); 

} 

माता-पिता के लिए अपने UIRoot निर्दिष्ट करें (या जो भी आप पैनल में जोड़ना चाहते हैं), और संपादक में बच्चे को अपने पैनल निर्दिष्ट करेंगे और आप तैयार हैं! मुझे आशा है कि इससे किसी को मदद मिलेगी, यह पहली बार एनजीईआई के साथ काम करते समय एक आम समस्या है।

हैप्पी कोडिंग :)