সাবস্পেস মডিফায়ার সম্পর্কে বোঝা

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

SubspaceModifier হল Subspace-এ কম্পোজেবলের জন্য কম্পোজ মডিফায়ার-এর মতো। SubspaceModifier-এর সাহায্যে আপনি 3D স্পেসে কম্পোজেবল ম্যানিপুলেট করতে পারবেন, যা আপনাকে 3D লেআউট নোডে পজিশন, রোটেট ও আচরণ যোগ করতে সাহায্য করবে।

লেআউট

ডিফল্ট হিসেবে, Subspace হল অ্যাপ দেখার জন্য সাজেস্ট করা স্পেসের মাধ্যমে বাউন্ড করা। আপনার সাবস্পেস কম্পোনেন্টের লেআউট পরিমাপ করার সময় এইসব বাউন্ড ব্যবহার করা হয়, যা 2D Compose লেআউটে বাউন্ডের মতো।

সীমা পূরণ করুন

fillMaxSize, fillMaxWidth, fillMaxHeight এবং fillMaxDepth মডিফায়ারগুলি কন্টেন্টকে (আংশিকভাবে) তার পেরেন্টের বাউন্ডারি পূরণ করতে সাহায্য করে। ফিল মডিফায়ার ব্যবহার করলে, আপনার অ্যাপের লেআউট কন্টেন্ট XR ডিভাইসের ডিসপ্লে বৈশিষ্ট্যের উপর নির্ভর করে না।

সাইজ ও প্রয়োজনীয় সাইজ সেট করুন

size, width, height এবং depth মডিফায়ারগুলি কন্টেন্টের পছন্দের সাইজ ঘোষণা করে। কন্টেন্টের সঠিক সাইজ ঘোষণা করতে, requiredSize, requiredWidth, requiredHeight এবং requiredDepth ব্যবহার করুন। এইসব ইউনিট অবশ্যই dp-এ উল্লেখ করতে হবে; মিটার থেকে dp-তে কনভার্ট করতে, Meter.toDp() ব্যবহার করুন।

পজিশন কম্পোজেবল

offset

offset মডিফায়ার x, y, এবং z অক্ষ বরাবর 3D স্পেসে কম্পোজেবলকে সরায়। এইসব ইউনিট অবশ্যই dp-এ উল্লেখ করতে হবে; মিটার থেকে dp-তে কনভার্ট করতে, Meter.toDp() ব্যবহার করুন।

rotate

rotate মডিফায়ার স্পেসে প্রদত্ত কম্পোজেবল রোটেট করে। আপনি বিভিন্ন উপায়ে ঘোরানোর দিক ও পরিমাণ নির্দিষ্ট করতে পারবেন:

  • পিচ, ইয়াও ও রোল ব্যবহার করে, যা যথাক্রমে x, y ও z অক্ষের চারপাশে রোটেশন নির্দিষ্ট করে,
  • axisAngle ব্যবহার করে, যা হল Vector3, এটি ঘূর্ণনের অক্ষ এবং কত ডিগ্রি ঘোরাতে হবে তা দেখায়,
  • Quaternion ব্যবহার করে যা রোটেশনকে দেখায়।

rotateToLookAtUser

rotateToLookAtUser মডিফায়ার ক্রমাগত কন্টেন্ট রোটেট করে যাতে এটি সব সময় ব্যবহারকারীর দিকে মুখ করে থাকে। এছাড়াও, আপনি এই মডিফায়ার ব্যবহার করে "বিলবোর্ড" এফেক্ট পেতে পারেন যেখানে কন্টেন্ট Y-অ্যাক্সিসে ব্যবহারকারীর দিকে মুখ করে ঘোরে এবং একই সাথে সোজা ও মাধ্যাকর্ষণের সাথে অ্যালাইন করা থাকে। এটি করতে, rotateToLookAtUser মডিফায়ারের সাথে gravityAligned মডিফায়ার যোগ করুন।

কম্পোজেবল সরানো ও ছোট বড় করা

ব্যবহারকারীদের 3D স্পেসে অবজেক্টের পজিশন ও সাইজ সরাসরি পরিবর্তন করতে দিন।

এলিমেন্ট সরানো হচ্ছে

movable মডিফায়ার উপস্থিত ও চালু থাকলে, ড্র্যাগ করা যায় এমন UI কন্ট্রোল দেখানো হয় যা ব্যবহারকারীকে 3D স্পেসে এলিমেন্ট সরাতে দেয়। আপনি সম্পূর্ণ Subspace, স্পেশিয়াল লেআউট কম্পোনেন্ট (যেমন SpatialRow এবং SpatialColumn) এবং ব্যক্তিগত কম্পোনেন্টে (যেমন SpatialPanel এবং SpatialGltfModel) movable মডিফায়ার প্রয়োগ করতে পারবেন।

এই মুভমেন্টের নির্দিষ্ট আচরণ প্রদত্ত movePolicy দ্বারা সংজ্ঞায়িত করা হয়েছে:

  • MovePolicy.Default (বা MovePolicy.system()): সিস্টেমটি সম্পূর্ণভাবে মুভমেন্ট ম্যানেজ করে এবং ব্যবহারকারীর ইনপুটের উপর ভিত্তি করে অটোমেটিক নতুন পোজ ও স্কেল গণনা করে এবং প্রয়োগ করে।
  • MovePolicy.custom(): ইনপুটের ভিত্তিতে সিস্টেম টার্গেট Pose গণনা করে, কিন্তু সংশ্লিষ্ট এলিমেন্টে এটি অটোমেটিক প্রয়োগ করে না। আপনার অ্যাপে মুভমেন্ট সীমাবদ্ধ করতে বা কাস্টম মুভমেন্ট তৈরি করতে এটি উপযোগী।
  • MovePolicy.anchor(): ব্যবহারকারীকে শনাক্ত করা বাস্তব-জগতের প্লেনে মুভেবল এলিমেন্ট স্ন্যাপ ও অ্যাঙ্কর করতে দেয়।

অ্যাঙ্কর কম্পোজেবল

বাস্তব জগতের সারফেসে একটি মুভেবল সাবস্পেস কম্পোজেবল অ্যাঙ্কর করতে, MovePolicy.anchor() movable মডিফায়ারে পাস করুন। এই নীতি ব্যবহারকারীদের টেবিল, দেওয়াল বা মেঝের মতো ফিজিক্যাল সারফেসে এলিমেন্ট (যেমন SpatialPanel এবং SpatialGltfModel) স্ন্যাপ করতে দেয়।

নিম্নলিখিত প্যারামিটার ব্যবহার করে আপনি ফিল্টার করতে পারবেন যে কোন শনাক্ত করা প্লেনে একটি এলিমেন্ট স্ন্যাপ করতে পারে (খালি থাকলে, এলিমেন্টটি যেকোনও শনাক্ত করা প্লেনে অ্যাঙ্কর করতে পারে):

  • anchorPlaneOrientations: PlaneOrientation ভ্যালুর একটি সেট (Horizontal, Vertical, বা Any)।
  • anchorPlaneSemantics: PlaneSemantic ভ্যালুর একটি সেট (Wall, Floor, Ceiling, Table, অথবা Any).

এলিমেন্ট ছোট বড় করা হচ্ছে

resizable() মডিফায়ার থাকলে এবং চালু করা হলে, UI কন্ট্রোল দেখানো হবে যা ব্যবহারকারীকে 3D স্পেসে এলিমেন্টের সাইজ পরিবর্তন করার অনুমতি দেয়। ছোট বড় করার নির্দিষ্ট আচরণ প্রদত্ত resizePolicy দ্বারা সংজ্ঞায়িত করা হয়:

  • ResizePolicy.default(): সিস্টেম অটোমেটিক সাইজ পরিবর্তন করার জেসচার ম্যানেজ করে এবং কন্টেন্টে নতুন ডাইমেনশন প্রয়োগ করে।
  • ResizePolicy.custom(): সিস্টেম একটি SpatialResizeEvent প্রদান করে এবং সংশ্লিষ্ট এলিমেন্টে ছোট বড় করার ফলাফল অটোমেটিক প্রয়োগ করে না।

কম্পোজেবলের চেহারা পরিবর্তন করুন

alpha

alpha মডিফায়ার এলিমেন্ট ও তার চাইল্ডের অস্বচ্ছতা সেট করে, যেখানে 0f সম্পূর্ণ স্বচ্ছ ও 1.0f সম্পূর্ণ অস্বচ্ছতা দেখায়।

scale

scale মডিফায়ার অনুভূমিক, উল্লম্ব ও গভীরতা অক্ষ বরাবর কম্পোজেবলের কন্টেন্ট স্কেল করে।

টেস্টিং ও অ্যাক্সেসিবিলিটি

semantics

semantics মডিফায়ার লেআউট নোডে সিম্যান্টিক্স যোগ করে, যা টেস্টিং ও অ্যাক্সেসিবিলিটির ক্ষেত্রে ব্যবহার করা হয়। Jetpack Compose-এ সিম্যান্টিক্স এবং SemanticsModifier দেখুন।

testTag

testTag মডিফায়ার হল SemanticsPropertyReceiver.testTag-এর শর্টহ্যান্ড, যা টেস্ট ফ্রেমওয়ার্ককে টেস্টে এলিমেন্ট খুঁজতে দেয়।