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

इन XR डिवाइसों पर काम करने वाले ऐप्लिकेशन
इस गाइड की मदद से, इन XR डिवाइसों के लिए ऐप्लिकेशन बनाए जा सकते हैं.
एक्सआर हेडसेट
तार वाले एक्सआर स्मार्ट ग्लास

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

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

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

सबसे ऊपर मौजूद Subspace, आपके ऐप्लिकेशन से लागू किया गया सबसे बाहरी सबस्पेस होता है. Subspace को हर बार कॉल करने पर, एक नई और अलग Spatial यूज़र इंटरफ़ेस (यूआई) हैरारकी बनती है. यह, नेस्ट किए गए किसी भी पैरंट Subspace की स्पेस से जुड़ी पोज़िशन, ओरिएंटेशन या स्केल को इनहेरिट नहीं करता.

SpatialPanel, Orbiter, SpatialPopup या किसी अन्य कॉम्पोनेंट में, एम्बेड किया गया या नेस्ट किया गया Subspace बनाने के लिए, PlanarEmbeddedSubspace का इस्तेमाल करें.

PlanarEmbeddedSubspace में, Subspace से दो मुख्य अंतर होते हैं:

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

PlanarEmbeddedSubspace के इन व्यवहारों से, ये सुविधाएं मिलती हैं:

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

सबस्पेस के लिए लेआउट अडजस्ट करना

Android XR पर, आपके ऐप्लिकेशन का लेआउट, डिफ़ॉल्ट रूप से फ़ुल स्पेस मोड में VolumeConstraints of Subspace से जुड़ा होता है. इस वजह से, आपको उपयोगकर्ता के लिए उपलब्ध दिखने वाले स्पेस की मात्रा को ध्यान में रखना चाहिए और उसके हिसाब से अपना लेआउट अडजस्ट करना चाहिए. recommendedContentBoxInFullSpace, ActivitySpace में बाउंडिंग बॉक्स के लिए खास डाइमेंशन उपलब्ध कराता है, ताकि कॉन्टेंट को उपयोगकर्ता के फ़ील्ड ऑफ़ व्यू में दिखाया जा सके.

आपके ऐप्लिकेशन का मुख्य कॉन्टेंट, इस बॉक्स में फ़िट होना चाहिए. अगर आपके पास ऐसा कॉन्टेंट है जो सुझाई गई सीमाओं से बाहर होना चाहिए, तो ऐसा लेआउट इस्तेमाल करें जो उपयोगकर्ताओं को अपना सिर घुमाकर स्पेस एक्सप्लोर करने के लिए बढ़ावा दे. recommendedContentBoxInFullSpace की डिफ़ॉल्ट पाबंदी को, साइज़ के हिसाब से कस्टम मॉडिफ़ायर लागू करके बदला जा सकता है. जैसे, SubspaceModifier.requiredSizeIn. अनबाउंडेड बिहेवियर के लिए, allowUnboundedSubspace = true सेट करें.

ज़रूरत के हिसाब से इन खास डाइमेंशन को पाने के लिए, मौजूदा सेशन का इस्तेमाल करके recommendedContentBoxInFullSpace को कॉल करें. यह उदाहरण देखें:

val session = LocalSession.current
session?.scene?.activitySpace?.recommendedContentBoxInFullSpace

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

कोड के इस उदाहरण में, आपके ऐप्लिकेशन में Subspace और PlanarEmbeddedSubspace जोड़ने का तरीका बताया गया है:

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

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

@Composable
private fun PrimaryPane() {
    // This is an embedded subspace, because PrimaryPane is in a SpatialPanel
    // and that SpatialPanel is in the top-level Subspace
    PlanarEmbeddedSubspace {
        SpatialPanel {}
    }
}

ज़्यादा जानकारी के लिए, Subspace और PlanarEmbeddedSubspace के बारे में पूरी रेफ़रंस वाली जानकारी देखें.