با Geospatial Creator in Unity شروع کنید

ابزار ARCore Geospatial Creator برای Unity به شما این امکان را می‌دهد که با نمایش داده‌های نقشه‌های گوگل در قالب کاشی‌های سه‌بعدی جدید، پیش‌نمایشی از محتوای Geospatial را در ویرایشگر Unity مشاهده کنید. این به شما کمک می‌کند تا در حین ساخت برنامه خود، تجسم کنید که محتوا در دنیای واقعی کجا قرار خواهد گرفت.

ابزار Geospatial Creator به عنوان بخشی از افزونه‌های ARCore برای بنیاد AR در دسترس است. این آموزش سریع به شما نشان می‌دهد که چگونه از Geospatial Creator در Unity برای افزودن محتوای واقعیت افزوده مکانی به برنامه ARCore Geospatial Sample استفاده کنید.

اگر برنامه‌ای دارید که می‌خواهید به جای نمونه جغرافیایی از آن استفاده کنید، ابتدا باید راهنمای توسعه‌دهنده جغرافیایی برای یونیتی ما را دنبال کنید. پس از اینکه برنامه شما برای استفاده از API جغرافیایی پیکربندی شد، به مرحله افزودن وابستگی‌های مورد نیاز در زیر بروید و از آنجا ادامه دهید.

پیش‌نیازها

برای پیکربندی محیط Unity خود جهت ایجاد تجربیات AR، بخش «شروع کار با افزونه‌های ARCore برای بنیاد AR» را دنبال کنید.

در حالی که افزونه‌های ARCore از نسخه‌های قبلی یونیتی پشتیبانی می‌کنند، Geospatial Creator به یونیتی 2021.3 یا جدیدتر نیاز دارد.

مجوز API

برای استفاده از API ARCore Geospatial و API Google Map Tiles، باید دسترسی API را تنظیم کنید.

API کاشی‌های نقشه گوگل

رابط برنامه‌نویسی کاربردی Map Tiles یک نمایش سه‌بعدی و واقع‌گرایانه از مکان‌های پشتیبانی‌شده ارائه می‌دهد. ما از این کاشی‌ها در ویرایشگر Unity برای پیش‌نمایش منطقه اطراف صحنه AR شما استفاده خواهیم کرد.

برای فعال کردن API و کسب اطلاعات بیشتر در مورد Map Tiles، به صفحه Map Tiles API مراجعه کنید.

API مکانی ARCore

API مکانی ARCore توسط برنامه شما در زمان اجرا برای ایجاد و تعامل با لنگرهای مکانی استفاده می‌شود.

برای فعال کردن APIهای مکانی، API مربوط به ARCore را در برنامه خود تنظیم کنید. می‌توانید از روش‌های احراز هویت بدون کلید (توصیه شده) یا کلید API استفاده کنید.

برنامه نمونه جغرافیایی را گسترش دهید

در این راهنما، به شما نشان خواهیم داد که چگونه از Geospatial Creator برای افزودن محتوای مکانی به برنامه ARCore Geospatial Sample استفاده کنید.

پیکربندی نمونه مکانی

ابتدا، با برنامه ARCore Geospatial Sample آشنا شوید. در یک پروژه جدید Unity، Unity Package Manager را باز کنید و بسته ARCore Extensions را انتخاب کنید. در پنل جزئیات Package Manager، Samples را باز کرده و Geospatial Sample را به پروژه Unity خود وارد کنید.

قبل از اجرای برنامه، باید قابلیت‌های ARCore و Geospatial را در پروژه خود فعال کنید. از مسیر Edit > Project Settings... > XR Plug-in Management اقدام کنید. برای فعال کردن ارائه‌دهنده افزونه ARCore برای اندروید و/یا ارائه‌دهنده افزونه ARKit برای iOS، کادرهای مربوطه را علامت بزنید.

سپس، از مسیر Edit > Project Settings... > XR Plug-in Management ، پنل ARCore Extensions را باز کنید. مطمئن شوید که گزینه "Geospatial" تیک خورده باشد (هنوز نیازی به فعال کردن Geospatial Creator ندارید) و اعتبارنامه‌های API خود را وارد کنید. برای جزئیات بیشتر به مستندات "فعال کردن Geospatial Unity API" برای اندروید و iOS مراجعه کنید.

چند تنظیم پخش‌کننده‌ی مخصوص پلتفرم دیگر نیز وجود دارد که برای هر برنامه‌ی Unity که از ARCore استفاده می‌کند، ضروری است. برای تغییرات مورد نیاز، به بخش «پیکربندی تنظیمات پخش‌کننده» در مستندات ما مراجعه کنید.

در این مرحله، هیچ شیء بازی در صحنه شما وجود ندارد، به جز آنچه برای اجرای نمونه مکانی مورد نیاز است. این زمان مناسبی برای ساخت و اجرای برنامه است. اگر به درستی پیکربندی شود، در زمان اجرا، برنامه نمای دوربین دستگاه شما را نمایش می‌دهد. با حرکت شما، دقت مکانی نمایش داده شده در بالای صفحه شروع به بهبود می‌کند. با ضربه زدن روی صفحه، لنگرهای مکانی ایجاد خواهید کرد که در حین حرکت شما در مکان اصلی خود باقی می‌مانند.

در ادامه، نحوه استفاده از Geospatial Creator برای ایجاد و تجسم محتوای پیشرفته AR از درون ویرایشگر Unity را نشان خواهیم داد. این محتوا در مکان‌های خاص طول و عرض جغرافیایی در جهان در برنامه شما ظاهر می‌شود.

اضافه کردن وابستگی‌های مورد نیاز

ابزار Geospatial Creator از یک بسته‌ی Unity شخص ثالث به نام Cesium برای رندر کردن کاشی‌های نقشه‌ی گوگل در پنجره‌ی Scene ویرایشگر Unity استفاده می‌کند. قبل از فعال کردن ویژگی‌های Geospatial Creator، بیایید بسته‌ی Cesium را به پروژه‌ی خود اضافه کنیم.

توصیه می‌کنیم آخرین نسخه از بسته Cesium for Unity را از صفحه GitHub Cesium نصب کنید:

  1. جدیدترین نسخه از پیش کامپایل شده .tgz از Cesium for Unity را از صفحه انتشارهای GitHub آنها دانلود کنید. نسخه پیشنهادی فعلی بسته Cesium for Unity نسخه ۱.۱.۰ است.
  2. با کلیک روی منوی «پنجره» یونیتی و سپس انتخاب «مدیر بسته‌ها»، مدیر بسته‌های یونیتی را باز کنید.
  3. روی نماد "+" کلیک کنید و "افزودن بسته از tarball" را انتخاب کنید.
  4. فایل Cesium for Unity .tgz که در مرحله ۱ دانلود کردید را انتخاب کنید.
  5. ممکن است از شما خواسته شود که وابستگی‌های اضافی مانند Text Mesh Pro را نصب کنید.

Add a .tgz package with Unity Package Manager

فعال کردن سازنده جغرافیایی

اکنون آماده فعال کردن Geospatial Creator هستید:

  1. از پنجره تنظیمات ساخت (Build Settings)، مطمئن شوید که پلتفرم انتخابی شما «اندروید» یا «آی‌او‌اس» است. ویژگی‌های Geospatial Creator در حال حاضر برای سایر پلتفرم‌ها در دسترس نیست.
  2. به تنظیمات پروژه > مدیریت افزونه XR > افزونه‌های ARCore بروید.
  3. اگر در مرحله‌ی قبل کلید(های) API مربوط به ARCore Android و/یا iOS خود را تنظیم نکرده‌اید، حتماً اکنون این کار را انجام دهید.
  4. هر دو گزینه‌ی «Geospatial» و «Geospatial Creator» را فعال کنید. پس از کلیک برای فعال کردن گزینه‌ی «Geospatial Creator»، یک ویزارد غیرمادی نمایش داده می‌شود تا تأیید کند که پروژه‌ی شما با «Geospatial Creator» سازگار است.
  5. روی «پایان» در ویزارد کلیک کنید.

پس از اتمام ویزارد، یونیتی کامپایل اسکریپت‌های شما را آغاز می‌کند. قبل از ادامه، صبر کنید تا کامپایل مجدد کامل شود. (اگر پلتفرم انتخابی شما «اندروید» یا «آی‌او‌اس» نیست، اکنون به یکی از آنها تغییر دهید.)

یک مبدا خالق جغرافیایی با کاشی‌های نقشه اضافه کنید

صحنه شما دقیقاً به یک شیء "Geospatial Creator Origin" نیاز دارد. این شیء به عنوان نقطه مرجع برای تبدیل مقادیر عرض جغرافیایی، طول جغرافیایی و ارتفاع دنیای واقعی به مختصات بازی Unity استفاده می‌شود.

برای افزودن یک مبدأ سازنده جغرافیایی به صحنه خود، Game Object > XR > Geospatial Creator Origin را انتخاب کنید. شیء تازه ایجاد شده به یک مرجع جغرافیایی نیاز دارد که عرض جغرافیایی، طول جغرافیایی و ارتفاع مشخصی را به موقعیت مبدأ در مختصات بازی پیوند می‌دهد. از پنجره Inspector در Geospatial Creator Origin خود، با کلیک بر روی دکمه Add Cesium Georeference Component ، یک مرجع جغرافیایی اضافه کنید.

Add the Geospatial Creator Origin GameObject

علاوه بر اینکه مرجع اشیاء واقعیت افزوده شما است، Cesium Georeference یک شیء Cesium 3D Tileset را به صحنه اضافه می‌کند. این شیء، کاشی‌های نقشه گوگل را در نمای صحنه ویرایشگر رندر می‌کند و به شما امکان می‌دهد دقیقاً تصور کنید که محتوای واقعیت افزوده شما در کجای دنیا ظاهر می‌شود. در قسمت بازرس Geospatial Creator Origin فیلدی برای اضافه کردن کلید API کاشی‌های نقشه که قبلاً تنظیم کرده‌اید، وجود دارد. پس از تنظیم این کلید، باید بارگذاری کاشی‌های نقشه را در نمای صحنه مشاهده کنید.

حالا فیلدهای عرض جغرافیایی، طول جغرافیایی و ارتفاع را طوری تغییر دهید که نزدیک به جایی باشند که می‌خواهید محتوای واقعیت افزوده در برنامه‌تان نمایش داده شود.

نمای صحنه در ویرایشگر اکنون باید کاشی‌های نقشه را در عرض و طول جغرافیایی مشخص شده مبدا شما نشان دهد. در زمان اجرا، فرض می‌کنیم که برنامه شما از دوربین واقعیت افزوده استفاده خواهد کرد، بنابراین Geospatial Creator قبلاً شیء Cesium 3D Map Tileset را با برچسب "EditorOnly" پیکربندی کرده است. به همین دلیل، کاشی‌ها در زمان اجرا در بازی شما دانلود یا رندر نمی‌شوند. این را می‌توان از طریق بازرس شیء Cesium3DTileset تغییر داد. برای کسب اطلاعات بیشتر در مورد Georeference و اشیاء بازی 3D Tileset Cesium، به مستندات Cesium for Unity مراجعه کنید.

یک لنگر خالق جغرافیایی اضافه و قرار دهید

اکنون آماده‌اید تا محتوای واقعیت افزوده (AR) را در صحنه خود قرار دهید! برای افزودن یک لنگر به سلسله مراتب صحنه خود، روی GameObject > XR > Geospatial Creator Anchor کلیک کنید. از طریق بازرس لنگر، می‌توانید عرض جغرافیایی، طول جغرافیایی و ارتفاع دقیق را مشخص کنید. تبدیل شیء بلافاصله به موقعیت صحیح در صحنه شما به‌روزرسانی می‌شود و می‌توانید دقیقاً ببینید که شیء در کجای دنیا ظاهر خواهد شد.

Add the Geospatial Creator Anchor

همانطور که طول و عرض جغرافیایی لنگر را تنظیم می‌کنید، مکانی را انتخاب کنید که نزدیک باشد تا بتوانید در زمان اجرا، قرارگیری آن را در مکان صحیح تأیید کنید. هنگام تنظیم ارتفاع لنگر خالق جغرافیایی، سه گزینه دارید:

  • ویژگی Terrain، لنگر را در سطح زمین و در طول و عرض جغرافیایی مشخص شده قرار می‌دهد. سطح زمین در زمان اجرا توسط سیستم موقعیت‌یابی بصری تعیین می‌شود. اگر با APIهای مکانی ARCore تازه‌کار هستید، "Terrain" انتخاب خوبی است، زیرا لنگر مستقیماً روی زمین و با دقت عمودی بالایی تعیین می‌شود. فیلد "Altitude Offset" به شما امکان می‌دهد لنگر را با مقدار ثابتی (بر حسب متر) بالاتر یا پایین‌تر از سطح زمین قرار دهید. به عنوان مثال، تعیین مقدار offset برابر با "1.0" باعث می‌شود لنگر یک متر بالاتر از سطح زمین "شناور" شود.
  • روف‌تاپ، لنگر را نسبت به بالای هر سازه‌ای در عرض و طول جغرافیایی مشخص قرار می‌دهد. مانند لنگر زمین، فیلد «جابجایی ارتفاع» به شما امکان می‌دهد لنگر را نسبت به موقعیت سقف، بر حسب متر، به بالا یا پایین حرکت دهید.
  • WGS84 لنگر را در یک ارتفاع مطلق خاص، بر حسب متر، بر اساس سیستم مختصات WGS84 قرار می‌دهد. قرار دادن جسم به این روش ممکن است نیاز به کمی آزمون و خطا داشته باشد، زیرا ارتفاع "0" در WSG84 لزوماً نشان دهنده سطح متوسط ​​دریا نیست و ممکن است با ارتفاع GPS مطابقت نداشته باشد. همچنین، اگرچه طول و عرض جغرافیایی کاشی‌های سه‌بعدی رندر شده بسیار دقیق است، تلاش برای قرار دادن جسم در سطح زمین با استفاده از کاشی‌های سه‌بعدی به عنوان مرجع می‌تواند منجر به خطای ارتفاع تا چند متر شود.

برای کسب اطلاعات بیشتر در مورد انواع مختلف لنگرهای مکانی ARCore، به راهنمای توسعه‌دهنده مکانی مراجعه کنید.

هر دو لنگر زمینی و پشت بام دارای یک فیلد WGS84 Altitude هستند. این مقدار فقط در حالت ویرایشگر برای تنظیم ارتفاع شیء در نمای صحنه استفاده می‌شود. ارتفاع زمین و پشت بام فقط در زمان اجرا تعیین می‌شود، بنابراین فیلد WGS84 Altitude به شما امکان می‌دهد لنگر را در یک ارتفاع خاص در حین توسعه برنامه تجسم کنید. فیلد WGS84 Altitude در زمان اجرا برای لنگرهای زمینی و پشت بام نادیده گرفته می‌شود.

هندسه را به لنگر اضافه کنید

اگر اکنون برنامه را بسازید و اجرا کنید، لنگر را در برنامه فعال شده با AR خود نخواهید دید. دلیلش این است که هیچ هندسه‌ای به آن متصل نیست. بیایید یک شیء اولیه سه‌بعدی ساده به لنگر اضافه کنیم: در سلسله مراتب صحنه، روی شیء AR Geospatial Creator Anchor خود کلیک راست کنید. از منوی زمینه، 3D Object > Cube را انتخاب کنید. باید یک مکعب خاکستری را در نمای صحنه خود به عنوان فرزند لنگر خود ببینید. اگر تصمیم دارید موقعیت یا چرخش شیء را در ویرایشگر جابجا کنید، توصیه می‌کنیم شیء ریشه Anchor را به جای شیء اولیه Cube فرزند جابجا کنید. این کار به کاهش خطا در ترجمه از طول/عرض جغرافیایی به مختصات بازی کمک می‌کند.

A Geospatial Creator Anchor with a Cube primitive

البته، می‌توانید هندسه‌های پیچیده‌تر و اجزا و فرزندان دلخواه را نیز به لنگر اضافه کنید.

برنامه خود را بسازید و اجرا کنید

وقت آن رسیده که لنگر خود را در دنیای واقعی ببینید! سعی کنید برنامه خود را بسازید و اجرا کنید، سپس به مکانی که انتظار دارید مکعب را ببینید، بروید. آیا آنجاست؟ تبریک می‌گویم، شما آماده‌اید تا تجربیات واقعیت افزوده پیچیده‌تری را با Geospatial Creator بسازید!

در صورت بروز هرگونه مشکل، به راهنمای عیب‌یابی مراجعه کنید.

اکنون زمان بسیار خوبی برای اضافه کردن لنگرهای سازنده موقعیت مکانی واقعیت افزوده (AR Geospatial Creator Anchors) با هندسه‌های مختلف است. سعی کنید چندین لنگر پشت بام و زمین و انحرافات آنها را آزمایش کنید. اسکریپت‌هایی را برای متحرک‌سازی یا فعال کردن تعامل با اشیاء اضافه کنید.

آشنایی با لنگرهای سازنده جغرافیایی و کلاس ARGeospatialAnchor

هنگام ساخت تجربیات پیچیده و تعاملی واقعیت افزوده، درک رابطه بین Geospatial Creator Anchors و کلاس ARGeospatialAnchor از زبان C# در ARCore مفید است:

یک ARGeospatialAnchor فقط می‌تواند در زمان اجرا با فراخوانی یکی از توابع روی ARAnchorManager ایجاد شود و آنها فقط زمانی می‌توانند ایجاد شوند که جلسه AR تثبیت شده باشد. یک Geospatial Creator Anchor را می‌توان به عنوان یک placeholder در صحنه شما در نظر گرفت که منتظر آماده شدن جلسه AR برای حل اشیاء ARGeospatialAnchor است. پس از آماده شدن جلسه، placeholder به طور خودکار ARAnchorManager را برای ایجاد و حل ARGeospatialAnchor فراخوانی می‌کند.

بلافاصله پس از اینکه لنگر زمان اجرا حل شد، لنگر خالق جغرافیایی در سلسله مراتب صحنه شما خود را به عنوان یک فرزند به شیء بازی جدید متصل می‌کند. این بدان معناست که هر مؤلفه یا فرزندی از لنگر خالق جغرافیایی، زیر مؤلفه‌ها یا نوه‌های شیء بازی جدید ARGeospatialAnchor خواهد شد. به عنوان مثال، transform یک شیء هندسی اولیه متصل به لنگر خالق جغرافیایی از transform ARGeospatialAnchor به ارث می‌برد و بنابراین در مکان مورد انتظار در جلسه AR زمان اجرا قرار می‌گیرد.

اگر نیاز دارید که اشیاء بازی ARGeospatialAnchor خاصی را در زمان اجرا شناسایی کنید، می‌توانید در صحنه به دنبال اشیاء بگردید که ویژگی name آنها با لنگر ایجاد شده با استفاده از Geospatial Creator مطابقت دارد. اگر جلسه AR مقداردهی اولیه شده باشد، parent آن شیء، شیء ARGeospatialAnchor مربوطه خواهد بود.

عیب‌یابی

چرا لنگر من حرکت می‌کند؟

ممکن است متوجه شوید، به خصوص وقتی که برنامه برای اولین بار اجرا می‌شود، که به نظر می‌رسد لنگر به آرامی "جابجا" می‌شود، یا حتی به طور ناگهانی چند متر می‌پرد. این اتفاق زمانی می‌افتد که جلسه VPS هنوز در حال تعیین و اصلاح مکان دقیق دوربین است. با بهبود دقت افقی و عمودی در چندین فریم، لنگر در مکان دقیق‌تری دوباره ترسیم می‌شود و توهم حرکت را ایجاد می‌کند. ممکن است بخواهید شیء را به طور متفاوتی (یا اصلاً) رندر کنید تا زمانی که دقت مکان به یک آستانه خاص برسد. برای انجام این کار، می‌توانید از ویژگی ARCoreEarthManager.CameraGeospatialPose برای تعیین دقت به‌روزرسانی فریم فعلی استفاده کنید.

چرا لنگر من در ارتفاع اشتباه ظاهر می‌شود؟

هنگام استفاده از نوع ارتفاع «دستی» برای لنگرهای سازنده جغرافیایی، ارتفاع لنگر (برحسب متر) طبق WGS84 تنظیم می‌شود. در یک مکان مشخص، ممکن است تا چند متر بین سطح زمین ظاهری نشان داده شده در کاشی‌های نقشه و سطح زمین واقعی که توسط سیستم موقعیت‌یابی بصری (VPS) گوگل گزارش شده است، اختلاف وجود داشته باشد. اگر به نظر می‌رسد یک لنگر جغرافیایی در زمان اجرا به اشتباه قرار گرفته است، توصیه می‌کنیم ارتفاع VPS را شخصاً با استفاده از پوشش اشکال‌زدایی در برنامه نمونه تأیید کنید. سپس می‌توانید ارتفاع را در ویرایشگر یونیتی تغییر دهید تا با ارتفاع VPS شناخته شده در آن مکان مطابقت داشته باشد.

کاشی‌های نقشه در نمای صحنه ویرایشگر به درستی نمایش داده نمی‌شوند.

اگر به نظر می‌رسد که Cesium3DTileset در حال بارگذاری کاشی‌ها است، اما در نمای صحنه شما به رنگ ارغوانی خالص رندر می‌شوند، بسته Shader Graph یونیتی را به پروژه خود اضافه کنید. این بسته توسط Cesium مورد نیاز است، اگرچه پروژه‌هایی که از رندرکننده داخلی یونیتی استفاده می‌کنند، به طور پیش‌فرض آن را شامل نمی‌شوند.

برای افزودن Shader Graph، Unity Package Manager را باز کنید ( پنجره > مدیریت بسته‌ها ). با انتخاب "Packages: Unity Registry" از منوی کشویی بالای پنجره مدیریت بسته‌ها، مطمئن شوید که در حال مرور بسته‌های موجود در Unity Package Registry هستید. بسته com.unity.shadergraph را جستجو کرده و آخرین نسخه را نصب کنید. پس از بارگیری بسته، کاشی‌های سه‌بعدی باید دوباره بارگیری شوند و به درستی در نمای صحنه رندر شوند.

برنامه در زمان اجرا به جای نمای دوربین، صفحه سیاه نمایش می‌دهد.

خط لوله رندر جهانی (URP) یونیتی به طور پیش‌فرض برای دوربین واقعیت افزوده پیکربندی نشده است. اگر در زمان اجرا به جای خروجی دوربین، صفحه سیاه می‌بینید، باید AR Background Renderer Feature به هر رندر URP در صحنه خود اضافه کنید.

Add the AR Background Renderer Feature

برای افزودن این ویژگی، در پروژه خود عبارت "renderer" را جستجو کنید. برای هر شیء URP Renderer، روی دکمه "Add Renderer Feature" در Inspector کلیک کنید و AR Background Renderer را اضافه کنید.

چرا به نظر می‌رسد لنگرهایی که دور از مبدا قرار گرفته‌اند، نادرست قرار گرفته‌اند؟

تبدیل مختصات WGS84 به مختصات بازی Unity به دلیل دقت محاسباتی ممیز شناور، با خطا همراه است که می‌توان با اطمینان از نزدیکی مبدا به نقاط مرجع واقعیت افزوده، آن را به حداقل رساند. فواصل بیش از 20 کیلومتر ممکن است منجر به خطاهایی شود. اگر تجربه واقعیت افزوده شما مسافت‌های طولانی را در بر می‌گیرد، توصیه می‌کنیم از چندین صحنه، با یک نقطه مرجع منحصر به فرد در هر صحنه، استفاده کنید.