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