সাবস্পেস হলো আপনার অ্যাপের মধ্যেকার ত্রিমাত্রিক স্থানের একটি বিভাজন, যেখানে আপনি ত্রিমাত্রিক মডেল স্থাপন করতে, ত্রিমাত্রিক লেআউট তৈরি করতে এবং অন্যথায় দ্বিমাত্রিক বিষয়বস্তুতে গভীরতা যোগ করতে পারেন। একটি সাবস্পেস শুধুমাত্র তখনই রেন্ডার করা হয় যখন স্পেশিয়ালাইজেশন সক্রিয় থাকে। হোম স্পেসে বা নন-এক্সআর ডিভাইসগুলিতে, সেই সাবস্পেসের ভেতরের যেকোনো কোড উপেক্ষা করা হয়।
আপনার লেআউট তৈরি করতে এবং 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ব্যবহার করে চাইল্ডের অবস্থান পরিবর্তন করা। - একটি 3D অবজেক্ট উপস্থাপন করা যা আপনার 2D UI-এর উপরে ভাসমান থাকে এবং 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 এর সম্পূর্ণ রেফারেন্স ডকুমেন্টেশন দেখুন।