सबस्पेस, आपके ऐप्लिकेशन में मौजूद 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) } }