টার্গেট ফলো করে এমন সাবস্পেস যোগ করুন

প্রযোজ্য XR ডিভাইস
এই নির্দেশিকা আপনাকে এই ধরনের XR ডিভাইসের জন্য অভিজ্ঞতা তৈরি করতে সাহায্য করে।
XR হেডসেট
তারযুক্ত XR গ্লাস

যদিও একটি স্ট্যান্ডার্ড Subspace সিস্টেম দ্বারা নির্ধারিত একটি নির্দিষ্ট অবস্থানে থাকে, কখনও কখনও আপনি আপনার অ্যাপের স্পেশিয়াল UI ব্যবহারকারীর সাথে ডাইনামিকভাবে সরানো বা এর এনভায়রনমেন্টে বা বাস্তব জগতে একটি নির্দিষ্ট লোকেশনে সংযুক্ত রাখতে চাইতে পারেন। আপনি FollowTarget-কে follow প্যারামিটারে পাস করতে পারেন Subspace-এর জন্য, যাতে হেড-লকড HUD বা বাস্তব জগতের অবজেক্টের সাথে অ্যাটাচ করা তথ্য প্যানেলের মতো অভিজ্ঞতা তৈরি করা যায়।

ব্যবহারকারীর ভিউ অনুসরণ করে এমন সাবস্পেস যোগ করুন

ব্যবহারকারীর ফিল্ড অফ ভিউয়ের সাথে সম্পর্কিত পজিশনে সাবস্পেস যোগ করতে, FollowTarget.view ব্যবহার করুন। আপনার উল্লেখ করা ফলো মোডের উপর নির্ভর করে, এটি আপনাকে ব্যবহারকারীর মাথার মুভমেন্ট ক্রমাগত ট্র্যাক করতে বা তারা কোথায় দেখছেন তার উপর ভিত্তি করে স্ট্যাটিক্যালি কন্টেন্ট প্লেস করতে দেয়। আপনি এটি HUD, স্থায়ী বিজ্ঞপ্তি বা দ্রুত অ্যাকশন কন্ট্রোলের মতো জিনিসের জন্য ব্যবহার করতে পারেন।

অনুমতি ঘোষণা ও অনুরোধ করা

অনুমতির অনুরোধ করার আগে, আপনাকে অবশ্যই <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 ফিচারের জন্য পারসেপশন ক্ষমতা নিয়ে কাজ করার পাশাপাশি প্রয়োজনীয় অনুমতি সেট-আপ করা এবং 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 যাতে আপনার অ্যাঙ্কর করা POI প্যানেলের মাধ্যমে ক্লিপিং না করে (Z-ফাইটিং), এই পদ্ধতিগুলি ব্যবহার করে আপনার লেআউট ভলিউম স্পষ্টভাবে ম্যানেজ করুন:

  1. অফসেট ব্যবহার করুন: Z-অ্যাক্সিসে পেরিফেরাল UI (যেমন আপনার HUD) আরও কাছে বা দূরে ঠেলে দিতে অথবা ব্যবহারকারীর দৃষ্টির প্রান্তে শিফট করতে SubspaceModifier.offset ব্যবহার করুন।
  2. সাইজ সীমাবদ্ধ করুন: আপনার স্পেসের বাউন্ডিং বক্স সীমাবদ্ধ করতে requiredSizeIn-এর মতো মডিফায়ার প্রয়োগ করুন।

কোঅর্ডিনেট স্পেস, লেআউট কনস্ট্রেন্ট এবং উপলভ্য সব ট্র্যাকিং কনফিগারেশন সম্পর্কে আরও জানতে, Subspace রেফারেন্স ডকুমেন্টেশন দেখুন।