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