2012-11-21 6 views
11

मैं एकता 3 डी में एक बारी आधारित युद्ध खेल बना रहा हूं और मेरे पास 2 दृश्य हैं (एक शहर का दृश्य और एक युद्ध दृश्य)। जब भी चरित्र एक राक्षस से मिलता है, तो खेल युद्ध के दृश्य में कूदता है जहां चरित्र युद्ध करता है और हारने या हारने के बाद शहर के दृश्य में वापस जाता है।वर्तमान दृश्य के साथ एक और दृश्य में जाने वाली एकता

समस्या

कैसे जब चरित्र लड़ाई के दृश्य (चरित्र स्थिति, स्थितियों, आदि)

अगर मैं का उपयोग में प्रवेश करती है के रूप में ही राज्य के साथ शहर दृश्य पर लौटने के लिए है

Application.LoadLevel('battlescene'); 
तो

Application.loadLevel('townScene'); 

तो townscene पहली बार से शुरू कर देंगे। जहां से हमने छोड़ा था वहां से कस्बों को कैसे जारी रखा जाए?

उत्तर

15

दो तरीके हैं जो मुझे लगता है कि आप इसे पूरा कर सकते हैं। यह सब आपके लक्षित मंच पर निर्भर करता है और कितना महत्वपूर्ण संसाधन हैं, लेकिन यहाँ हम चले:

1) संसाधन एक मुद्दा

आप एक दृश्य में अपने सभी सामान्य दृश्य और लड़ाई के दृश्य वस्तुओं डाल सकता है नहीं कर रहे हैं ।

  • दो खाली खेल वस्तुओं (टाउन दृश्य वस्तुओं के लिए एक और लड़ाई दृश्य वस्तुओं के लिए अन्य) बनाएँ। इसके बाद आप या तो अपने गेम चरित्र (ओं) या एक के दो संस्करण कर सकते हैं। फिर एक स्क्रिप्ट लिखें कि शहर दृश्य से कैमरा दृश्यों को युद्ध दृश्य में स्विच करता है जब एक युद्ध ट्रिगर होता है और युद्ध पर युद्ध के दृश्य में वापस आ जाता है।

  • आप हर किरदार के लिए आप बस एक स्क्रिप्ट है कि लड़ाई मोड और सामान्य/नगर मोड से/करने के लिए अपने खेल चरित्र नियंत्रक के व्यवहार में परिवर्तन जोड़ सकता है में से एक संस्करण है, तो।

  • आप प्रत्येक चरित्र के दो संस्करण है तो आप बस/खेल पात्रों को आप किस उपयोग कर रहे हैं अनुसार उपयुक्त चरित्र नियंत्रक स्क्रिप्ट और सक्रिय बारे में निष्क्रिय करने के लिए की आवश्यकता होगी। इस तरह फाइनल काल्पनिक 7,8,9 जैसे गेम्स ने प्रभाव प्राप्त किया। खेल पात्रों के दो संस्करण थे: एक युद्ध मोड के लिए और दूसरा सामान्य मोड के लिए।

2) संसाधनों एक मुद्दा हैं (और मैं एक अधिक कुशल तरीका लगता है)

आप Application.LoadLevelAdditive समारोह इस्तेमाल कर सकते हैं। यह फ़ंक्शन आपको वर्तमान दृश्य में सबकुछ नष्ट करने के बजाय एक अलग दृश्य लोड करने की अनुमति देता है, यह नया दृश्य और इसकी सभी वस्तुओं को लेता है और उन्हें वर्तमान दृश्य में जोड़ता है। तो बुनियादी तौर पर आप यह कुछ इस तरह का उपयोग कर सकते हैं:

  • एक अलग battlescene बनाएँ और अपने दृश्य के भीतर, एक खाली खेल वस्तु अपने दृश्य में हर वस्तु धारण करने के लिए पैदा करते हैं।

  • अपने noraml दृश्य में भी ऐसा ही।

  • जब आप लड़ाई मोड उपयोग करने के लिए जाने की जरूरत है:

    Application.LoadLevelAdditive ('battlescene');

  • और जब आप अपनी लड़ाइयों को उतारना चाहते हैं तो आप बल्लेस्केन गेम ऑब्जेक्ट को नष्ट करने के लिए कोड लिखकर ऐसा कर सकते हैं क्योंकि इसमें आपके युद्ध दृश्य से सबकुछ शामिल है।

पहली विधि आप तय कर सकते हैं कि क्या आप दो अलग अलग है या नहीं अपने पात्रों के संस्करणों करना चाहते हैं के साथ होता है। दो संस्करणों होने के पेशेवरों में से एक शहर के दृश्य के लिए मॉडल को छोटा किया का उपयोग करना है आप में संसाधन क्षमता को बचाने कर सकते हैं कि अगर आप (अपने खेल वास्तव में बड़ा है, खासकर अगर) आप खेल मॉडल के साथ विस्तार में नहीं जा रहा करके समय की बचत करना चाहते हैं और युद्ध के दृश्य के लिए पॉलिश के अधिक विस्तृत मॉडल का उपयोग करके, यह मानते हुए कि आपका युद्ध दृश्य उस स्थान का प्रतिनिधित्व करने वाला एक छोटा मंच है जहां आपके पात्र लड़ रहे हैं। अंतिम कल्पना VII सोचो। बस कुछ विचार करने के लिए।

मुझे उम्मीद है कि इससे मदद मिलती है। मैंने इसे सब कुछ भी लिखा है लेकिन मुझे पता है कि कुछ भी साफ करने की जरूरत है या नहीं।

+1

हे समाधान के लिए THX .... मैं, यह एक कोशिश – Jason

+0

कोई बात नहीं दूँगा आशा है कि यह सब बाहर काम करता है। अगर आपको अतिरिक्त मदद की ज़रूरत है तो चिल्लाओ। – amasiye

0

मैं जानता हूँ कि यह एक पुरानी पोस्ट है, लेकिन वहाँ एक और विधि है कि इस्तेमाल किया जा सकता है। यह दृश्य की स्थिति को बचाने के लिए होगा। यह तब आसान होता है जब आप उम्मीद नहीं करते हैं कि उपयोगकर्ताओं के पास एप्लिकेशन के साथ 2 दृश्य लोड करने के लिए संसाधन हैं। लोडवेलवेल। वह विधि संभावित रूप से दो बार संसाधनों का उपयोग कर सकती है।

आप राज्य को बचाने जब आप बाद में किसी समय में स्तर लोड कर सकते हैं और यह स्मृति में बैठे नहीं (सभी जानकारी किसी फ़ाइल या DB को बदल सकते हैं बचाने के लिए)। आप अपने गेम को बचाने के लिए इसका इस्तेमाल भी कर सकते हैं।

+0

क्या आप दृश्य स्थिति को सहेजने के बारे में * कैसे * के बारे में जानकारी जोड़ सकते हैं? आपका जवाब पहले से मौजूद 'SaveSceneState()' और 'RestoreSceneState()' काम करता है, जो मुझे नहीं लगता कि डिफ़ॉल्ट रूप से एकता में मौजूद है के अस्तित्व का तात्पर्य। – Thomas

4

आप ग #

void onYourFunction() 
{ 
    Time.timeScale = 0; //pauses the current scene 
    Application.LoadLevelAdditive("YourNextScene"); //loads your desired other scene 
} 

में स्क्रिप्ट के द्वारा यह कर सकते हैं और अगर आप Time.timeScale = 1 का उपयोग कर सकते हैं जब आप वापस अपने खेल को सक्रिय करना चाहते हैं;

संबंधित मुद्दे