स्टैंडर्ड Subspace, सिस्टम के हिसाब से तय की गई जगह पर ही रहता है. हालांकि, कभी-कभी ऐसा हो सकता है कि आपको अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) को उपयोगकर्ता के साथ डाइनैमिक तौर पर मूव करना हो या उसे उसके आस-पास या असल दुनिया में किसी खास जगह पर अटैच करना हो. Subspace के follow पैरामीटर में FollowTarget को पास किया जा सकता है. इससे, हेड-लॉक किए गए HUD या असल दुनिया के ऑब्जेक्ट से जुड़े जानकारी पैनल जैसे अनुभव बनाए जा सकते हैं.
उपयोगकर्ता के व्यू के हिसाब से सबस्पेस जोड़ना
उपयोगकर्ता के फ़ील्ड ऑफ़ व्यू (कैमरे से दिख रहा व्यू) के हिसाब से सबस्पेस जोड़ने के लिए, FollowTarget.view का इस्तेमाल करें. आपके चुने गए फ़ॉलो मोड के आधार पर, यह उपयोगकर्ता के सिर के मूवमेंट को लगातार ट्रैक करता है या कॉन्टेंट को स्टैटिक तौर पर वहां दिखाता है जहां उपयोगकर्ता देख रहा है. इसका इस्तेमाल एचयूडी, लगातार दिखने वाली सूचनाओं या तुरंत कार्रवाई करने वाले कंट्रोल जैसी चीज़ों के लिए किया जा सकता है.
अनुमतियों का एलान करना और उनके लिए अनुरोध करना
अनुमतियों का अनुरोध करने से पहले, आपको <uses-permission> एलिमेंट का इस्तेमाल करके, अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में उनका एलान करना होगा.
<manifest ...>
<!-- Only declare permissions that your app actually needs. In this example,
we declare permissions for head tracking. -->
<uses-permission android:name="android.permission.HEAD_TRACKING"/>
<application ...>
...
</application>
</manifest>
अब अनुमतियों का अनुरोध करें. ज़्यादा जानकारी के लिए, अनुमति के सिद्धांतों और वर्कफ़्लो को देखें. इससे यह पक्का किया जा सकेगा कि आपके उपयोगकर्ताओं को सबसे अच्छा अनुभव मिले. जैसे, यह देखना कि उपयोगकर्ता ने आपके ऐप्लिकेशन को रनटाइम की अनुमतियां पहले ही दे दी हैं या नहीं और क्या आपके ऐप्लिकेशन को इस अनुमति का अनुरोध करने से पहले, उपयोगकर्ता को इसकी वजह बतानी चाहिए.
अपना सेशन कॉन्फ़िगर करना
इसके बाद, आपको अपने ऐप्लिकेशन के उस सेशन को कॉन्फ़िगर करना होगा जो DeviceTrackingMode.SPATIAL को सेट करके,
Jetpack Compose for XR का इस्तेमाल करने पर आपके लिए बनाया जाता है:
val session = checkNotNull(LocalSession.current)
session.configure(
config = Config.Builder(session.config).setDeviceTracking(DeviceTrackingMode.SPATIAL)
.build()
)
सबस्पेस बनाना
आखिर में, आपको एक ऐसा सबस्पेस बनाना होगा जो उपयोगकर्ता के व्यू को टारगेट करे. साथ ही, उसमें फ़ॉलो मोड भी शामिल हो:
// Example: A subspace that softly follows the user's view (like a HUD)
Subspace(
follow = FollowTarget.view(
// Customizing the soft follow to move slightly faster and tracking all dimensions
mode = FollowMode.soft(
)
),
modifier = modifier,
) {
SpatialPanel {
// SpatialPanel Content
}
}
उपयोगकर्ता के व्यू को टारगेट करने वाले सबस्पेस के लिए फ़ॉलो मोड
FollowTarget.view को टारगेट के तौर पर इस्तेमाल करने पर, कॉन्टेंट के काम करने के तरीके को पसंद के मुताबिक बनाया जा सकता है. इसके लिए, FollowMode तय करें:
FollowMode.soft: कॉन्टेंट, टारगेट की गतिविधियों के साथ धीरे-धीरे आगे बढ़ता है. इससे एक स्मूद फ़्लोटिंग इफ़ेक्ट बनता है.FollowMode.snap: कॉन्टेंट को उपयोगकर्ता के सामने एक बार दिखाया जाता है. यह उपयोगकर्ता के शुरुआती व्यू पोज़ के आधार पर होता है. इसके बाद, कॉन्टेंट अपनी जगह पर बना रहता है.FollowMode.tight: कॉन्टेंट, उपयोगकर्ता के व्यू को तुरंत ट्रैक करता है. इसमें बहुत कम देरी होती है. इससे कॉन्टेंट, उपयोगकर्ता के मूवमेंट से जुड़ा रहता है.
फ़ॉलो करने के सभी मोड में, यह चुना जा सकता है कि मूवमेंट के कौनसे डाइमेंशन ट्रैक किए जाएं. इसके लिए, ये विकल्प उपलब्ध हैं:
- X अक्ष
- Y अक्ष
- पिच करें
- रोल
- यॉ
RotationOnly: इसकी मदद से, रोटेशन (पिच, यॉ, और रोल) से जुड़े डाइमेंशन को ट्रैक करने के लिए, एक वैल्यू तय की जा सकती है.
इनमें से किसी भी डाइमेंशन को चुना जा सकता है. इसके अलावा, TrackedDimensions.All की डिफ़ॉल्ट वैल्यू का इस्तेमाल किया जा सकता है, जो इन सभी को ट्रैक करती है.
पर्यावरण से जुड़ी किसी सुविधा के हिसाब से सबस्पेस जोड़ना
उपयोगकर्ता के आस-पास के माहौल में, किसी खास फ़िज़िकल फ़ीचर के लिए स्पेशल कॉन्टेंट को लॉक करने वाला सबस्पेस जोड़ने के लिए, FollowTarget.anchor() का इस्तेमाल करें. इस तरह के टारगेट का इस्तेमाल, किसी पहचाने गए प्लेन, ऐंकर या जियोस्पेशल लोकेशन को फ़ॉलो करने के लिए करें.
रीयल-वर्ल्ड सुविधाओं को ट्रैक करने के लिए, अतिरिक्त अनुमतियों और सेशन कॉन्फ़िगरेशन की ज़रूरत होती है. यह इस बात पर निर्भर करता है कि किस सुविधा को ट्रैक किया जा रहा है.
ARCore की सुविधाओं के लिए, आस-पास की चीज़ों को पहचानने की क्षमता के साथ काम करने के बारे में ज़्यादा जानकारी पाने के लिए, Jetpack XR SDK का दस्तावेज़ देखें. इसमें, FollowTarget.anchor() का इस्तेमाल करने के लिए ज़रूरी अनुमतियां सेट अप करने और सेशन को कॉन्फ़िगर करने के बारे में भी बताया गया है. Jetpack XR SDK के दस्तावेज़ में, प्लेन, ऐंकर, और जियोस्पेशल पोज़ के बारे में भी जानकारी दी गई है.
नीचे दिए गए उदाहरण में, एक सबस्पेस बनाया गया है जो असल दुनिया के ऐंकर को फ़ॉलो करता है:
// A subspace locked to a real-world anchor
Subspace(
follow = FollowTarget.anchor(anchor = myAnchor)
) {
// Rotate the panel to ensure it faces the user while remaining anchored
SpatialPanel(SubspaceModifier.rotateToLookAtUser()) {
// SpatialPanel Content
}
}
स्पेशल ओवरलैप से बचना
आपके बनाए गए हर Subspace में, अपना अलग 3D सीन मैनेज होता है. साथ ही, इसमें मौजूद अन्य सबस्पेस की जानकारी नहीं होती. इसलिए, यह अपने-आप टकराव से नहीं बचता.
हेड-लॉक किए गए HUD को, ऐंकर किए गए लोकप्रिय जगह के पैनल से क्लिप होने से रोकने के लिए (Z-फ़ाइटिंग), इन तरीकों का इस्तेमाल करके अपने लेआउट वॉल्यूम को साफ़ तौर पर मैनेज करें:
- ऑफ़सेट का इस्तेमाल करें:
SubspaceModifier.offsetका इस्तेमाल करके, पेरिफ़रल यूज़र इंटरफ़ेस (जैसे, HUD) को Z-ऐक्सिस पर पास या दूर ले जाएं या उसे उपयोगकर्ता के विज़न के किनारों पर शिफ़्ट करें. - साइज़ पर पाबंदी लगाना: अपने स्पेस के बाउंडिंग बॉक्स को सीमित करने के लिए,
requiredSizeInजैसे मॉडिफ़ायर लागू करें.
कोऑर्डिनेट स्पेस, लेआउट की पाबंदियों, और उपलब्ध सभी ट्रैकिंग कॉन्फ़िगरेशन के बारे में ज़्यादा जानने के लिए, Subspace का रेफ़रंस दस्तावेज़ देखें.