अपने ऐप्लिकेशन में सबस्पेस जोड़ना

सबस्पेस, आपके ऐप्लिकेशन में मौजूद 3D स्पेस का एक हिस्सा होता है. यहां 3D मॉडल डाले जा सकते हैं, 3D लेआउट बनाए जा सकते हैं, और 2D कॉन्टेंट में डीपथ जोड़ी जा सकती है. सबस्पेस सिर्फ़ तब रेंडर होता है, जब स्पेसलाइज़ेशन की सुविधा चालू हो. होम स्पेस या नॉन-एक्सआर डिवाइसों पर, उस सबस्पेस में मौजूद किसी भी कोड को अनदेखा किया जाता है.

3D मॉडल डालने के लिए, सबस्पेस कॉम्पोज़ेबल का इस्तेमाल किया जा सकता है. जैसे, Volume और SpatialPanel. Orbiter या SpatialDialog जैसे कुछ XR कॉम्पोनेंट, स्टैंडर्ड 2D कॉम्पोज़ेबल होते हैं. इनका इस्तेमाल, 2D यूज़र इंटरफ़ेस (यूआई) की हैरारकी में कहीं भी किया जा सकता है. हालांकि, SubspaceComposable को आपके ऐप्लिकेशन के सबस्पेस में ही शुरू किया जाना चाहिए. ऐसा करने के लिए, ApplicationSubspace या Subspace कॉम्पोज़ेबल का इस्तेमाल करें.

जैसा कि नाम से पता चलता है, ApplicationSubspace कॉम्पोज़ेबल में आपके ऐप्लिकेशन का सारा स्पेसिएलाइज़ किया गया कॉन्टेंट होना चाहिए. Subspace कॉम्पोज़ेबल, आपके ऐप्लिकेशन के मौजूदा यूज़र इंटरफ़ेस (यूआई) के लेआउट में, 3D स्पेस के किसी सेगमेंट को नेस्ट करने के लिए सबसे सही है.

किसी भी दूसरे कॉम्पोज़ेबल की तरह, Subspace को सीधे अपने 2D यूज़र इंटरफ़ेस (यूआई) के लेआउट में कॉल किया जा सकता है. हालांकि, यह जानना ज़रूरी है कि हैरारकी में Subspace को कहां से शुरू किया जाता है.

सबस्पेस की हैरारकी के बारे में जानकारी

टॉप-लेवल सबस्पेस, आपके ऐप्लिकेशन से शुरू होने वाला सबसे बाहरी सबस्पेस होता है. अपने टॉप-लेवल सबस्पेस के लिए, ApplicationSubspace कॉम्पोनेंट का इस्तेमाल करें. हालांकि, अगर आपने अपने ऐप्लिकेशन में सिर्फ़ सबस्पेस कॉम्पोनेंट का इस्तेमाल किया है, तो सबसे बाहरी Subspaceकॉम्पोनेंट ही आपका टॉप-लेवल सबस्पेस होगा. डिफ़ॉल्ट रूप से, इस टॉप-लेवल सबस्पेस का साइज़, ऐप्लिकेशन देखने के लिए सुझाए गए स्पेस के हिसाब से तय होता है. आम तौर पर, इस स्पेस में ही ऐप्लिकेशन का स्पेस लेआउट और SpatialPanel रखा जाता है. अगर आपको टॉप-लेवल सबस्पेस की सीमाओं को बदलना है, तो अपने ApplicationSubspace में अलग-अलग VolumeConstraints पास करें.

हालांकि, अगर टॉप-लेवल सबस्पेस में मौजूद पैनल में, 2D यूज़र इंटरफ़ेस (यूआई) की हैरारकी के अंदर कोई दूसरा सबस्पेस नेस्ट किया जाता है, तो नेस्ट किया गया सबस्पेस अलग तरह से काम करता है.

नेस्ट किए गए सबस्पेस, टॉप-लेवल Subspace से दो मुख्य बातों में अलग होते हैं:

  • ये उस 2D लेआउट में काम करते हैं जिसमें इन्हें चालू किया जाता है. इसका मतलब है कि सबस्पेस की ऊंचाई और चौड़ाई, उसके 2D पैरंट लेआउट की ऊंचाई और चौड़ाई के हिसाब से तय होगी.
  • ये उस इकाई के चाइल्ड के तौर पर काम करते हैं जिसमें इन्हें शुरू किया जाता है. इसका मतलब है कि अगर किसी SpatialPanel में नेस्ट किए गए Subspace कॉम्पोज़ेबल को कॉल किया जाता है, तो वह सबस्पेस उस SpatialPanel का चाइल्ड होता है जिसमें उसे कॉल किया गया है.

नेस्ट किए गए सबस्पेस के इन व्यवहारों की मदद से, ये सुविधाएं चालू की जा सकती हैं:

  • पैरंट इकाई के साथ चाइल्ड इकाई को ट्रांसफ़र करना
  • ऑफ़सेट का इस्तेमाल करके, बच्चे की जगह की जानकारी में बदलाव करना SubspaceModifier
  • 3D ऑब्जेक्ट को दिखाना, जो आपके 2D यूज़र इंटरफ़ेस (यूआई) के ऊपर होवर करता है और 2D लेआउट में सही जगह की ऊंचाई और चौड़ाई से मेल खाता है

अपने ऐप्लिकेशन में सबस्पेस जोड़ना

यहां दिए गए कोड के उदाहरण में, अपने ऐप्लिकेशन में टॉप-लेवल और नेस्ट किए गए सबस्पेस जोड़ने का तरीका बताया गया है:

setContent {
    // This is a top-level subspace
    ApplicationSubspace {
        SpatialPanel {
            MyComposable()
        }
    }
}

@Composable
private fun MyComposable() {
    Row {
        PrimaryPane()
        SecondaryPane()
    }
}

@Composable
private fun PrimaryPane() {
    // This is a nested subspace, because PrimaryPane is in a SpatialPanel
    // and that SpatialPanel is in a top-level Subspace
    Subspace {
        ObjectInAVolume(true)
    }
}