این راهنما مروری بر توسعه با Unity برای Android XR ارائه میدهد. Android XR با ابزارها و ویژگیهای آشنایی که از Unity انتظار دارید، کار میکند و از آنجایی که پشتیبانی Unity از Android XR بر پایه OpenXR ساخته شده است، بسیاری از ویژگیهای شرح داده شده در OpenXR Overview در Unity نیز پشتیبانی میشوند.
برای یادگیری موارد زیر، این راهنما را دنبال کنید:
- پشتیبانی از یونیتی برای اندروید XR
- اصول اولیه Unity XR
- توسعه و انتشار برنامهها برای اندروید XR
- بستههای یونیتی برای اندروید XR
- یونیتی OpenXR: بسته اندروید XR
- افزونههای اندروید XR برای یونیتی
- ویژگیها و ملاحظات سازگاری
- ورودی و تعامل
پشتیبانی از یونیتی برای اندروید XR
وقتی برنامههای Unity را برای Android XR میسازید، میتوانید از ابزارها و قابلیتهای واقعیت ترکیبی در آخرین نسخههای Unity 6 بهره ببرید. این شامل قالبهای واقعیت ترکیبی است که از XR Interaction Toolkit ، AR Foundation و OpenXR Plugin استفاده میکنند تا به شما در شروع سریع کار کمک کنند. هنگام ساخت برنامهها با Unity برای Android XR، Universal Render Pipeline (URP) را به عنوان خط لوله رندر و Vulkan را به عنوان API گرافیکی توصیه میکنیم. این ویژگیها به شما امکان میدهند از برخی از ویژگیهای گرافیکی Unity که فقط با Vulkan پشتیبانی میشوند، بهره ببرید. برای اطلاعات بیشتر در مورد نحوه پیکربندی این تنظیمات، راهنمای تنظیم پروژه را بررسی کنید.
مبانی Unity XR
اگر در توسعه Unity یا XR تازهکار هستید، میتوانید برای درک مفاهیم اولیه XR و گردشهای کاری به راهنمای XR Unity مراجعه کنید. راهنمای XR شامل اطلاعاتی در مورد موارد زیر است:
- افزونههای ارائهدهنده XR ، از جمله Unity OpenXR: Android XR و افزونههای Android XR برای Unity
- بستههای پشتیبانی XR برای افزودن ویژگیهای اضافی در سطح برنامه
- یک راهنمای معماری XR که پشته فناوری XR یونیتی و زیرسیستمهای XR را شرح میدهد.
- راهاندازی پروژه XR
- ساخت و اجرای برنامههای XR
- راهنمایی گرافیک XR ، شامل Universal Render Pipeline، رندر استریو، رندر foveated، نواحی رندر چندنمایی و زمانبندی فریم VR
- هدایت صوتی XR ، شامل پشتیبانی از فضاسازهای صوتی
توسعه و انتشار اپلیکیشن برای اندروید
یونیتی مستندات جامعی برای توسعه، ساخت و انتشار برای اندروید ارائه میدهد که موضوعاتی از جمله مجوزهای اندروید در یونیتی ، تنظیمات ساخت اندروید ، ساخت برنامه برای اندروید و ارائه به گوگل پلی را پوشش میدهد.
بستههای یونیتی برای اندروید XR
دو بسته وجود دارد که از ساخت برنامههای Unity برای Android XR پشتیبانی میکنند. هر دوی این بستهها، افزونههای ارائه دهنده XR هستند که میتوانند از طریق بسته مدیریت افزونه XR Unity فعال شوند. مدیر افزونه XR، تنظیمات پروژه را برای مدیریت و ارائه کمک در بارگیری، مقداردهی اولیه، تنظیمات و پشتیبانی ساخت برای افزونههای XR اضافه میکند. برای اینکه برنامه شما بتواند ویژگیهای OpenXR را در زمان اجرا اجرا کند، پروژه باید این ویژگیها را از طریق مدیر افزونه فعال کرده باشد.
این تصویر نمونهای از جایی را نشان میدهد که میتوانید این گروههای ویژگی را از طریق ویرایشگر یونیتی فعال کنید.
یونیتی OpenXR اندروید XR
بسته Unity OpenXR Android XR یک افزونه XR برای افزودن پشتیبانی از Android XR به Unity است. این افزونه XR بخش عمدهای از پشتیبانی Android XR را برای Unity فراهم میکند و پشتیبانی از دستگاههای Android XR را برای پروژههای AR Foundation فعال میکند. AR Foundation برای توسعهدهندگانی طراحی شده است که میخواهند تجربیات AR یا واقعیت ترکیبی ایجاد کنند. این بسته رابط کاربری ویژگیهای AR را فراهم میکند، اما خود هیچ ویژگیای را پیادهسازی نمیکند. بسته Unity OpenXR Android XR پیادهسازی را ارائه میدهد. برای شروع کار با این بسته، به دفترچه راهنمای بسته که شامل یک راهنمای شروع به کار است، مراجعه کنید.
افزونههای اندروید XR برای یونیتی
افزونههای اندروید XR برای یونیتی، بسته Unity OpenXR Android XR را تکمیل میکنند و شامل ویژگیهای اضافی برای کمک به شما در ساخت تجربیات فراگیر هستند. میتوان از آن به تنهایی یا همراه با بسته Unity OpenXR Android XR استفاده کرد.
برای شروع کار با این بسته، راهنمای راهاندازی پروژه یا راهنمای سریع ما برای وارد کردن افزونههای Android XR برای Unity را دنبال کنید.
ویژگیها و ملاحظات سازگاری
جدول زیر ویژگیهای پشتیبانیشده توسط Unity OpenXR را شرح میدهد: بسته Android XR و بسته Android XR Extensions for Unity، و میتوان از آن برای تعیین اینکه کدام بسته شامل ویژگیهای مورد نیاز شما و هرگونه ملاحظات سازگاری است، استفاده کرد.
ویژگی | Unity OpenXR: رشته ویژگی اندروید XR | افزونههای اندروید XR برای رشته ویژگی یونیتی | موارد استفاده و رفتار مورد انتظار |
---|---|---|---|
اندروید XR: جلسه واقعیت افزوده
| اندروید XR (افزونهها): مدیریت نشست
| برای استفاده از ویژگیهای هر یک از بستهها، باید ویژگی AR Session را برای آن بسته فعال کنید. میتوانید هر دو مجموعه ویژگی را همزمان فعال کنید؛ ویژگیهای جداگانه، تداخلها را بر اساس آن مدیریت خواهند کرد. | |
ناموجود | ناموجود | ردیابی دستگاه برای ردیابی موقعیت و چرخش دستگاه در فضای فیزیکی استفاده میشود. شیء بازی XR Origin به طور خودکار ردیابی دستگاه را مدیریت میکند و با استفاده از کامپوننت XROrigin و سلسله مراتب GameObject با یک دوربین و TrackedPoseDriver ، دادههای قابل ردیابی را به سیستم مختصات Unity تبدیل میکند. | |
اندروید XR: دوربین واقعیت افزوده | ناموجود | این ویژگی از تخمین نور و عبور از تمام صفحه پشتیبانی میکند. | |
اندروید XR: هواپیمای واقعیت افزوده | اندروید XR (افزونهها): صفحه | این دو ویژگی یکسان هستند؛ از یکی از آنها استفاده کنید. اندروید XR (افزونهها): صفحه (Plane) گنجانده شده است تا توسعهدهندگان بتوانند از ویژگیهای اندروید XR (افزونهها): ردیابی اشیاء و لنگرهای پایدار بدون نیاز به وابستگی به بسته Unity OpenXR اندروید XR استفاده کنند. در آینده، اندروید XR (افزونهها): صفحه به نفع اندروید XR: AR Anchor حذف خواهد شد. | |
ناموجود | اندروید XR (افزونهها): ردیابی اشیا | این ویژگی، پشتیبانی از تشخیص و ردیابی اشیاء در محیط فیزیکی را فراهم میکند که در ترکیب با یک کتابخانه اشیاء مرجع استفاده میشود. | |
اندروید XR: چهره واقعیت افزوده
| اندروید XR: ردیابی چهره
| پشتیبانی از چشمهای آواتار از طریق ویژگی Android XR: AR Face ارائه میشود. از طریق ویژگی Android XR: Face Tracking به حالات چهره کاربر دسترسی پیدا کنید. این دو ویژگی را میتوان با هم استفاده کرد. | |
اندروید XR: واقعیت افزوده، پخش پرتو
| ناموجود | این ویژگی به شما امکان میدهد یک پرتو ایجاد کنید و تقاطع بین آن پرتو و سطوح قابل ردیابی یا سطوح قابل ردیابی عمق که در محیط فیزیکی شناسایی شدهاند را محاسبه کنید. | |
اندروید XR: لنگر واقعیت افزوده | اندروید XR (افزونهها): Anchor
| هر دو ویژگی شامل پشتیبانی از لنگرهای فضایی و لنگرهای صفحهای هستند؛ از یکی از این ویژگیها استفاده کنید. برای لنگرهای پایدار، از Android XR (افزونهها): Anchor استفاده کنید. در آینده، Android XR (افزونهها): Anchor حذف خواهد شد و تمام ویژگیهای Anchor در Android XR: AR Anchor قرار خواهند گرفت. | |
اندروید XR: انسداد واقعیت افزوده
| ناموجود | انسداد به محتوای واقعیت ترکیبی در برنامه شما اجازه میدهد تا در پشت اشیاء محیط فیزیکی پنهان یا تا حدی مبهم به نظر برسد. | |
معیارهای عملکرد | معیارهای عملکرد اندروید XR | ناموجود | از این ویژگی برای دسترسی به معیارهای عملکرد دستگاههای Android XR استفاده کنید. |
پشتیبانی از لایه ترکیب (پلاگین OpenXR و لایه ترکیب XR مورد نیاز است) | اندروید XR: لایه ترکیب Passthrough
| از پشتیبانی لایه ترکیب یونیتی برای ایجاد لایههای ترکیب پایه (مثلاً چهارگوش، استوانه، تصویر) استفاده کنید. اندروید XR: لایه ترکیب Passthrough میتواند برای ایجاد یک لایه عبوری با یک مش سفارشی، که از GameObject یونیتی میخواند، استفاده شود. | |
رندرینگ Foveated (پلاگین OpenXR مورد نیاز است)
| فوویشن (میراث) | رندرینگ Foveated با کاهش وضوح نواحی در دید جانبی کاربر، امکان افزایش سرعت رندرینگ را فراهم میکند. ویژگی رندرینگ Foveated یونیتی فقط برای برنامههایی که از URP و Vulkan استفاده میکنند پشتیبانی میشود. ویژگی Foveation (Legacy) در افزونههای اندروید XR برای یونیتی همچنین از Built-in Render Pipeline و OpenGL ES پشتیبانی میکند. توصیه میکنیم در صورت امکان از ویژگی رندرینگ Foveated یونیتی استفاده کنید و توجه داشته باشید که هنگام ساخت برای اندروید XR، استفاده از URP و Vulkan توصیه میشود. | |
ناموجود | اندروید XR: فضای مرجع نامحدود | این ویژگی حالت مبدا ردیابی XRInputSubsystem را روی Unbounded تنظیم میکند. Unbounded نشان میدهد که XRInputSubsystem تمام InputDevices را در رابطه با یک نقطه مرجع جهانی که میتواند تغییر کند، ردیابی میکند. | |
ناموجود | حالت ترکیبی محیط | این ویژگی به شما امکان میدهد حالت ترکیبی XR Environment را تنظیم کنید، که نحوه ترکیب تصاویر مجازی با محیط دنیای واقعی را هنگام فعال بودن passthrough کنترل میکند. |
ورودی و تعامل
اندروید XR از ورودی طبیعی چندوجهی پشتیبانی میکند.
علاوه بر ردیابی دست و چشم، از لوازم جانبی مانند کنترلرهای 6DoF، ماوس و کیبورد فیزیکی نیز پشتیبانی میشود. این بدان معناست که انتظار میرود برنامههای اندروید XR از تعامل با دست پشتیبانی کنند و نمیتوان فرض کرد که همه دستگاهها با کنترلر عرضه شوند.
پروفایلهای تعامل
یونیتی از پروفایل تعامل برای مدیریت نحوه ارتباط برنامه XR شما با دستگاهها و پلتفرمهای مختلف XR استفاده میکند. این پروفایلها ورودیها و خروجیهای مورد انتظار را برای پیکربندیهای سختافزاری مختلف تعیین میکنند و سازگاری و عملکرد سازگار را در طیف وسیعی از پلتفرمها ارتقا میدهند. با فعال کردن پروفایلهای تعامل، میتوانید اطمینان حاصل کنید که برنامه XR شما به درستی با دستگاههای مختلف کار میکند، نگاشت ورودی سازگار را حفظ میکند و به ویژگیهای خاص XR دسترسی دارد. برای تنظیم یک پروفایل تعامل:
- پنجره تنظیمات پروژه را باز کنید (منو: ویرایش > تنظیمات پروژه ).
- برای باز کردن بخش افزونهها (در صورت لزوم)، روی XR Plug-in Management کلیک کنید.
- در فهرست افزونههای XR، OpenXR را انتخاب کنید.
- در بخش پروفایلهای تعامل ، دکمه + را برای افزودن پروفایل انتخاب کنید.
- نمایه مورد نظر برای اضافه کردن را از لیست انتخاب کنید.
تعامل دست
تعامل دست ( XR_EXT_hand_interaction
) توسط افزونه OpenXR ارائه میشود و شما میتوانید با فعال کردن نمایه تعامل دست ، طرحبندی دستگاه <HandInteraction>
را در سیستم ورودی یونیتی نمایش دهید. از این نمایه تعامل برای ورودی دست که توسط چهار حالت عمل تعریف شده توسط OpenXR پشتیبانی میشود، استفاده کنید: "نیشگون گرفتن"، "فشار دادن"، "هدف گرفتن" و "گرفتن". اگر به تعامل دست اضافی یا قابلیت ردیابی دست نیاز دارید، به XR Hands در این صفحه مراجعه کنید.
تعامل نگاه چشم
تعامل نگاه چشم ( XR_EXT_eye_gaze_interaction
) توسط افزونه OpenXR ارائه شده است و میتوانید از این طرحبندی برای بازیابی دادههای حالت چشم (موقعیت و چرخش) که افزونه برمیگرداند، استفاده کنید. برای اطلاعات بیشتر در مورد تعامل نگاه چشم، به راهنمای ورودی OpenXR مراجعه کنید .
تعامل کنترلکننده
اندروید XR از پروفایل کنترلر Oculus Touch برای کنترلرهای 6DoF پشتیبانی میکند. هر دوی این پروفایلها توسط افزونه OpenXR ارائه شدهاند.
تعامل با ماوس
پروفایل تعامل ماوس اندروید XR ( XR_ANDROID_mouse_interaction
) توسط افزونههای اندروید XR برای یونیتی ارائه میشود. این پروفایل، طرحبندی دستگاه <AndroidXRMouse>
را در سیستم ورودی یونیتی نمایش میدهد.
تعامل با حالت کف دست
افزونه OpenXR از تعامل حالت کف دست ( XR_EXT_palm_pose
) پشتیبانی میکند که طرحبندی <PalmPose>
را در سیستم ورودی یونیتی نمایش میدهد. حالت کف دست قرار نیست جایگزینی برای افزونهها یا بستههایی باشد که ردیابی دست را برای موارد استفاده پیچیدهتر انجام میدهند؛ در عوض میتوان از آن برای قرار دادن محتوای بصری خاص برنامه مانند تصاویر آواتار استفاده کرد. حالت کف دست شامل موقعیت کف دست و جهت آن است.
دستهای XR
بسته XR Hands به شما امکان میدهد با استفاده از XR_EXT_hand_tracking
و XR_FB_hand_tracking_aim
به دادههای ردیابی دست دسترسی پیدا کنید و یک پوشش برای تبدیل دادههای مفاصل دست از ردیابی دست به حالتهای ورودی ارائه میدهد. برای استفاده از ویژگیهای ارائه شده توسط بسته XR Hands، ویژگیهای Hand Tracking Subsystem و Meta Hand Tracking Aim OpenXR را فعال کنید.
اگر به دادههای جزئیتر در مورد حالت دست یا مفاصل دست نیاز دارید یا وقتی نیاز به کار با حرکات سفارشی دارید، بسته XR hands میتواند مفید باشد.
برای جزئیات بیشتر، به مستندات یونیتی برای تنظیم XR Hands در پروژه خود مراجعه کنید.
مناطق اطمینان ردیابی چهره
افزونهی XR_ANDROID_face_tracking
مقادیر اطمینان را برای سه ناحیهی صورت ارائه میدهد: بالا سمت چپ، بالا سمت راست و پایین صورت. این مقادیر، که از ۰ (بدون اطمینان) تا ۱ (بالاترین اطمینان) متغیر هستند، دقت ردیابی چهره را برای هر ناحیه نشان میدهند.
شما میتوانید از این مقادیر اطمینان برای غیرفعال کردن تدریجی blendshapes یا اعمال فیلترهای بصری (مانند تار کردن) به ناحیه چهره مربوطه استفاده کنید. برای غیرفعال کردن اولیه blendshapes در ناحیه چهره مربوطه.
ناحیه «پایینی صورت» نمایانگر همه چیز زیر چشمها، از جمله دهان، چانه، گونه و بینی است. دو ناحیه بالایی شامل چشمها و ناحیه ابرو در سمت چپ و راست صورت است.
قطعه کد سیشارپ زیر نحوه دسترسی و استفاده از دادههای اعتماد را در یک اسکریپت یونیتی نشان میدهد:
using UnityEngine;
using Google.XR.Extensions;
public class FaceTrackingConfidence : MonoBehaviour
{
void Update()
{
if (!XRFaceTrackingFeature.IsFaceTrackingExtensionEnabled.HasValue)
{
DebugTextTopCenter.text = "XrInstance hasn't been initialized.";
return;
}
else if (!XRFaceTrackingFeature.IsFaceTrackingExtensionEnabled.Value)
{
DebugTextTopCenter.text = "XR_ANDROID_face_tracking is not enabled.";
return;
}
for (int x = 0; x < _faceManager.Face.ConfidenceRegions.Length; x++)
{
switch (x)
{
case (int)XRFaceConfidenceRegion.Lower:
regionText = "Bottom";
break;
case (int)XRFaceConfidenceRegion.LeftUpper:
regionText = DebugTextConfidenceLeft;
break;
case (int)XRFaceConfidenceRegion.RightUpper:
regionText = DebugTextConfidenceRight;
break;
}
}
}
برای اطلاعات بیشتر، به مستندات افزونههای اندروید XR برای یونیتی مراجعه کنید.
روشی برای رندر کردن دستها انتخاب کنید
اندروید XR از دو روش برای رندر کردن دستها پشتیبانی میکند: مش دست و یک تصویرساز پیشساخته.
مش دستی
بسته اندروید XR Unity شامل یک ویژگی Hand Mesh است که دسترسی به XR_ANDROID_hand_mesh extension
را فراهم میکند. ویژگی Hand Mesh، مشهایی را برای دستهای کاربر فراهم میکند. مش دست شامل رئوس مثلثهایی است که هندسه یک دست را نشان میدهند. این ویژگی برای ارائه یک مش شخصیسازی شده که هندسه واقعی دستهای کاربر را برای تجسم نشان میدهد، در نظر گرفته شده است.
پیش ساخته XR Hands
بسته XR Hands شامل نمونهای به نام Hands visualizer است که شامل دستهای چپ و راست کاملاً ریگبندی شده برای رندر کردن نمایش متناسب با متن از دستهای کاربر است.
حرکات سیستم
اندروید XR شامل یک ژست حرکتی سیستمی است که به کاربران امکان میدهد منویی را برای بازگشت به عقب، باز کردن لانچر یا مشاهدهی نمای کلی برنامههای در حال اجرا باز کنند. کاربر میتواند این منوی سیستمی را با استفاده از نیشگون گرفتن دست غالب خود فعال کند.
وقتی کاربر با منوی ناوبری سیستم تعامل دارد، برنامه فقط به رویدادهای ردیابی سر پاسخ میدهد. بسته XR Hands میتواند تشخیص دهد که کاربر چه زمانی اقدامات خاصی مانند تعامل با این منوی ناوبری سیستم را انجام میدهد. بررسی AimFlags
، SystemGesture
و DominantHand
به شما امکان میدهد بدانید که این اقدام سیستمی چه زمانی انجام میشود. برای اطلاعات بیشتر در مورد AimFlags
، به مستندات Enum MetaAimFlags یونیتی مراجعه کنید.
جعبه ابزار تعامل XR
بسته ابزار تعامل XR یک سیستم تعاملی سطح بالا و مبتنی بر مولفه برای ایجاد تجربیات VR و AR است. این بسته چارچوبی را فراهم میکند که تعاملات سهبعدی و رابط کاربری را از طریق رویدادهای ورودی Unity در دسترس قرار میدهد. این بسته از وظایف تعاملی شامل بازخورد لمسی، بازخورد بصری و حرکت پشتیبانی میکند.
OpenXR™ و لوگوی OpenXR علائم تجاری متعلق به گروه Khronos هستند و به عنوان یک علامت تجاری در چین، اتحادیه اروپا، ژاپن و بریتانیا ثبت شدهاند.