क्या मैं एकता स्प्लैश स्क्रीन के दौरान अपनी लोडिंग स्क्रिप्ट चला सकता हूं?


10

क्या मैं एकता स्पलैश स्क्रीन के बैकग्राउंड में डेटा लोड कर सकता हूं? यदि हां, तो कैसे?

मैं छप स्क्रीन के दौरान कोड चलाने की कोशिश कर रहा हूं, न कि केवल परिसंपत्तियों को लोड करने के लिए।

मुझे Google या यूनिटी डॉक्यूमेंटेशन में इस बारे में कोई जानकारी नहीं मिल पाई है ।


2
मुझे लगता है कि स्प्लैश स्क्रीन दिखाई देने पर एकता पहले से ही आपके पूरे एप्लिकेशन को लोड कर रही है। मुझे नहीं लगता कि आप जो करना चाहते हैं वह संभव है, लेकिन मैं इस बार गलत होना पसंद करूंगा।
हेलियम

2
यह एक XY समस्या का एक सा लगता है: आप उस स्क्रीन के दौरान सामान क्यों लोड करना चाहते हैं?
doppelgreener

1
आपके खेल के पहले दृश्य में जो कुछ भी आप डालते हैं, वह लोड होता है जबकि स्प्लैश स्क्रीन ऊपर है, है ना? तो, क्या यह उस सामग्री को शामिल करने के लिए पर्याप्त नहीं होगा जिसे आप उस पहले दृश्य में लोड करना चाहते हैं (या तो ऑफ-कैमरा, अक्षम, या केवल संदर्भित है यदि आप उस सामग्री को तुरंत दिखाई नहीं देना चाहते हैं)? या आप किसी अन्य स्रोत से वेब सर्वर की तरह सामग्री लोड करने की कोशिश कर रहे हैं?
DMGregory

@DMGregory ग्रेट पॉइंट। मैंने सवाल अपडेट किया। मैं कोड चलाने की कोशिश कर रहा हूं।
Evorlor

हम समझते हैं कि आप कोड चलाने की कोशिश कर रहे हैं (लोडिंग स्क्रिप्ट जरूरी कोड हैं) - लेकिन क्या कोड और क्यों? आपको एक समस्या मिली है और आपने तय किया है कि समाधान उस कोड को एकता स्प्लैश स्क्रीन के दौरान चलाना है; ऐसा क्यों है?
doppelgreener

जवाबों:


9

मैंने अभी कुछ परीक्षण किए हैं, और मैंने पाया कि पहले दृश्य में वस्तुओं के लिए निर्माणकर्ता वास्तव में कॉल करता है जबकि स्प्लैश स्क्रीन अभी भी प्रदर्शित होती है।

यहाँ कुछ समय मैं एक स्टॉपवॉच के साथ मापा जाता है:

Constructed  0     s
Awake        2.118 s
OnEnable     2.12  s
Start        2.744 s
First Update 2.919 s

इसलिए, ऐसा लग रहा है कि कंस्ट्रक्टर से निकालकर स्प्लैश स्क्रीन के अंत (डिफ़ॉल्ट सेटिंग्स के साथ) से लगभग 3 सेकंड पहले हम स्क्रिप्ट को ट्रिगर कर सकते हैं। आप अपने लोडिंग कोड को ट्रिगर करने का प्रयास कर सकते हैं (संभवतः अपने स्वयं के धागे पर)।

बस सावधान रहें कि यह संभवतः लोडिंग थ्रेड से बुलाया जा रहा है, इसलिए चूंकि हम मुख्य थ्रेड पर नहीं हैं इसलिए हम यहां क्या करने की अनुमति के साथ थोड़ा अधिक सीमित होंगे। यदि कोई विशिष्ट चीज है जिसे आप लोड करने वाले थ्रेड पर समर्थित नहीं हैं, तो अपने आवेदन के विवरण के साथ एक नया प्रश्न पोस्ट करने पर विचार करें और हम उस मामले के लिए वर्कअराउंड ढूंढने का प्रयास कर सकते हैं।


1
समाप्ति से 3 सेकंड पहले, आपका मतलब है, शुरू होने से पहले एक सेकंड?
जैकब

मेरे प्रयोगों में, Update()कंस्ट्रक्टर को निकाल दिए जाने के बाद मेरी स्क्रिप्ट को 2.9 सेकंड का पहला टिक मिलता है । यह सब मैं मौजूदा इंस्ट्रूमेंटेशन के बारे में बता सकता हूं।
DMGregory

2

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

मुझे इसकी पुष्टि करने के लिए जानकारी नहीं मिल रही है, लेकिन मेरे अवलोकन से, ऐसा लगता है कि एकता आपके प्रारंभिक दृश्य को लोड कर रही है, जबकि स्प्लैश स्क्रीन दिखाई जा रही है।

कुछ प्लेटफार्मों पर, स्प्लैश स्क्रीन के दूर जाने से पहले खेल चलना शुरू हो जाता है, अगर लोडिंग काफी तेज हो।

यह सब किसी भी समय, किसी भी प्लेटफ़ॉर्म पर, किसी भी संस्करण अपडेट पर बदल सकता है। इस बात की कोई गारंटी नहीं है कि यह सुसंगत होगा, इसलिए आप अपनी लोडिंग स्क्रीन का उपयोग करना बेहतर समझते हैं।


डबल लोड स्क्रीन क्या आप सुझाव दे रहे हैं?
एवोरेलर

अनिवार्य रूप से हाँ। यह एकता के साथ करने का तरीका है। अपने खेल या कुछ स्टूडियो लोगो एनीमेशन के लिए एक स्प्लैश / लोडिंग स्क्रीन डालें, जबकि यह अगले दृश्य को लोड करता है।
स्टीफन होकेनहुल

1
@ यह मेरे खेल के साथ और पूरी तरह से ठीक काम करता है। हालांकि यह आपको उस समय का उपयोग करने की अनुमति नहीं देता है, जो एकता इंट्रो लेता है, क्योंकि यह इंट्रो बहुत कम हो सकता है, आप बस एक लोडिंग स्क्रीन (हालांकि सामान्य) बना सकते हैं और इसका उपयोग कर सकते हैं।
जॉन हैमिल्टन ने

-1

संक्षिप्त उत्तर है नहीं , आप ऐसा नहीं कर सकते।

दृश्य प्रबंधन के संदर्भ में उपरोक्त दोनों उत्तर सही हैं। दृश्य को लोड करने के लिए आप दृश्य प्रबंधक का उपयोग कर सकते हैं और चूंकि यह async है आप समानांतर में अन्य कोड चला सकते हैं।

को देखो SceneManager.LoadScene अधिक जानकारी के लिए प्रलेखन।

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

चूंकि इसमें छोटे पदचिह्न हैं, इसलिए यह बहुत तेज़ी से लोड होगा और इस प्रकार आपके कोड को लगभग तुरंत चला देगा। फिर आप वह कर सकते हैं जो आपको करना है, और बाद में अन्य दृश्य लोड करें ।

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

तो प्रवाह कुछ इस तरह होगा:

  1. स्पलैश स्क्रीन (यहां कोई छवि नहीं है, बस इसे काला करें)
  2. छप दृश्य (आपके प्रारंभिक कोड और अगले दृश्य लोडर के साथ छोटा पदचिह्न)
  3. इंट्रो सीन (नियमित इंट्रो सीन)
  4. .... (हमेशा की तरह अन्य दृश्य)

दृश्य जितना छोटा होगा वह उतना ही तेज होगा। आप लोड किए गए स्प्लैश स्क्रीन में किसी भी ऑब्जेक्ट से जुड़ी स्प्लैश कंट्रोलर जैसी किसी चीज का उपयोग कर सकते हैं ।

using UnityEngine;
using UnityEngine.SceneManagement;

public class SplashController: MonoBehaviour
{
    void Start()
    {

        // RunSomeSyncMethod();

        SceneManager.LoadScene("OtherSceneName", LoadSceneMode.Additive);
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.