সাবস্পেস হল আপনার অ্যাপের মধ্যে 3D স্পেসের একটি পার্টিশন যেখানে আপনি 3D মডেল রাখতে, 3D লেআউট তৈরি করতে এবং অন্যথায় 2D কন্টেন্টে গভীরতা যোগ করতে পারেন। স্পেশিয়ালাইজেশন চালু থাকলে তবেই সাবস্পেস রেন্ডার করা হয়। Home Space বা XR নয় এমন ডিভাইসে, সেই সাবস্পেসের মধ্যে থাকা যেকোনও কোড উপেক্ষা করা হয়।
স্পেশিয়াল লেআউট এবং সাবস্পেসে ব্যবহার করা যায় এমন কম্পোনেন্ট সম্পর্কে আরও জানতে, স্পেশিয়ালাইজড কম্পোনেন্ট দেখুন।
সাবস্পেস হায়ারার্কি সম্পর্কে
টপ-লেভেল Subspace হল আপনার অ্যাপের মাধ্যমে কল করা সবচেয়ে বাইরের সাবস্পেস।
Subspace পদ্ধতিতে প্রতিটি কল একটি নতুন, স্বতন্ত্র স্পেশিয়াল UI
হায়ারার্কি তৈরি করে। এটি যে পেরেন্ট Subspace-এর মধ্যে নেস্ট করা আছে, তার স্পেশিয়াল পজিশন, ওরিয়েন্টেশন বা স্কেল
ইনহেরিট করে না।
SpatialPanel, Orbiter, SpatialPopup বা অন্য কম্পোনেন্টের মধ্যে এম্বেড করা বা নেস্টেড Subspace তৈরি করতে, PlanarEmbeddedSubspace ব্যবহার করুন।
PlanarEmbeddedSubspace-এর সাথে Subspace-এর দুটি প্রধান পার্থক্য আছে:
- এগুলি যে 2D লেআউটে চলছে, সেখানে অংশগ্রহণ করে। এর অর্থ হল, সাবস্পেসের উচ্চতা ও প্রস্থ তার 2D পেরেন্ট লেআউটের উচ্চতা ও প্রস্থ দ্বারা সীমাবদ্ধ থাকবে।
- এগুলি যে এন্টিটিতে ইনভোক করা হয়, তার চাইল্ড হিসেবে কাজ করে। এর অর্থ হল,
আপনি যদি
SpatialPanel-এর মধ্যে নেস্ট করা সাবস্পেস কম্পোজেবল কল করেন, তাহলে সেই সাবস্পেসটি হলSpatialPanel-এর চাইল্ড, যেখানে এটি কল করা হয়েছে।
PlanarEmbeddedSubspace-এর এই আচরণগুলি এই ধরনের ক্ষমতা চালু করে:
- মূল এন্টিটির সাথে চাইল্ড এন্টিটি সরানো হচ্ছে
- অফসেট ব্যবহার করে বাচ্চার লোকেশন অফসেট করা হচ্ছে
SubspaceModifier - আপনার 2D UI-এর উপরে ভাসমান 3D অবজেক্ট দেখানো এবং 2D লেআউটে উপযুক্ত স্পেসের উচ্চতা ও প্রস্থের সাথে ম্যাচ করা
সাবস্পেসের জন্য লেআউট অ্যাডাপ্ট করুন
Android XR-এ, ডিফল্ট হিসেবে ফুল স্পেস মোডে আপনার অ্যাপের লেআউট
Subspace-এর VolumeConstraints-এর সাথে বাউন্ড করা থাকে। এই কারণে, ব্যবহারকারীর জন্য কতটা জায়গা উপলভ্য আছে তা বিবেচনা করে
আপনার লেআউট অ্যাডজাস্ট
করতে হবে। 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-এ সম্পূর্ণ রেফারেন্স ডকুমেন্টেশন দেখুন।