Unity AR Foundation: פיתוח אפליקציות AR חוצות פלטפורמות

פיתוח אפליקציית AR שעובדת על כל המכשירים הוא אתגר: הבדלים בין ARKit ל-ARCore גורמים לרוב לכשלים במחצית מהסמארטפונים. אנחנו בונים פתרונות AR חוצי-פלטפורמות על Unity באמצעות AR Foundation, ומבטיחים פעולה תקינה גם ב-iOS וגם ב-Android. הצוות שלנו מוסר את הפרויקט במפתח מלא—מבדיקת היתכנות ועד פרסום—עם תמיכה ויציבות מתמשכים.

פיתוח ותמיכה בכל סוגי היישומים הניידים:

יישומים ניידים למידע ובידור
אפליקציות חדשות, משחקים, מדריכים, קטלוגים מקוונים, אפליקציות מזג אוויר, אפליקציות כושר ובריאות, אפליקציות נסיעות, אפליקציות חינוכיות, רשתות חברתיות ומסנג'רים, חידונים, בלוגים ופודקאסטים, פורומים, אגרגטורים
יישומים ניידים למסחר אלקטרוני
חנויות מקוונות, אפליקציות B2B, מרקטפלייסים, בורסות מקוונות, שירותי קאשבק, בורסות, פלטפורמות דרופשיפינג, תוכניות נאמנות, משלוחי מזון ומוצרים, מערכות תשלום.
יישומים ניידים לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, ניהול פרויקטים, כלים לצוותי מכירות, ניהול פיננסי, ניהול ייצור, ניהול לוגיסטיקה ומשלוחים, ניהול משאבי אנוש, מערכות ניטור נתונים
יישומים ניידים לשירותים אלקטרוניים
פלטפורמות מודעות מסווגות, בתי ספר מקוונים, בתי קולנוע מקוונים, פלטפורמות שירות אלקטרוניות, פלטפורמות קאשבק, אירוח וידאו, פורטלים נושאיים, פלטפורמות הזמנות ותזמון מקוונות, פלטפורמות מסחר מקוונות

אלה הם רק חלק מסוגי היישומים הניידים שאנו עובדים איתם, ולכל אחד מהם עשויים להיות מאפיינים ופונקציונליות ספציפיים משלו, המותאמים לצרכים ולמטרות הספציפיות של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
Unity AR Foundation: פיתוח אפליקציות AR חוצות פלטפורמות
מורכב
~5 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    869
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1289
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

עבדנו על פרויקטים שבהם מפתחים ניסו להטמיע AR ישירות דרך ARKit ו-ARCore, רק כדי לסיים עם קוד שרץ על חצי מהמכשירים. AR Foundation (Unity) מאפשר פיתוח אפליקציות AR חוצות-פלטפורמות עם בסיס קוד אחד ושתי buildים. אבל זה לא הופך את ערכות התכונות לזהות—חסימת LiDAR עובדת רק במכשירי iOS Pro, ו-Depth API מבוסס ML הוא בלעדי לאנדרואיד בשבבים ללא ToF. כתיבת AR Foundation ללא הבנת ההבדלים הללו מובילה לחריגות זמן ריצה בחצי מהמכשירים. הניסיון שלנו מראה שבדיקת יכולות דרך descriptor ויישום מנגנוני fallback מונעת 90% מהקריסות. אנו מציעים פתרון מקיף—מביקורת ועד פרסום—עם אבטחת איכות ותמיכה בכל שלב. צרו קשר לייעוץ על הפרויקט שלכם. שילוב AR Foundation מתחיל ב-$1,500 עבור זיהוי מישורים בסיסי והצבת אובייקטים בשתי הפלטפורמות, וחוסך עד $10,000 בזמן פיתוח בהשוואה ליישום native.

AR Foundation פותר אתגרים חוצי-פלטפורמות

גרסת AR Foundation 6.x (Unity LTS העדכני) מכסה את כל התכונות המרכזיות של שתי הפלטפורמות: זיהוי מישורים, מעקב תמונות, מעקב פנים, סיווג mesh, ענני נקודות. עם זאת, היישום הבסיסי שונה, וחלק מהדגלים עובדים רק אם ה-backend של הפלטפורמה תומך בהם. להלן קוד אימות טיפוסי:

[SerializeField] AROcclusionManager occlusionManager;
void Start()
{
    if (occlusionManager.descriptor?.supportsEnvironmentDepthImage == true)
    {
        occlusionManager.requestedEnvironmentDepthMode = EnvironmentDepthMode.Fastest;
        occlusionManager.requestedOcclusionPreferenceMode = OcclusionPreferenceMode.PreferEnvironmentOcclusion;
    }
    else
    {
        occlusionManager.enabled = false;
    }
}

ללא בדיקת [SerializeField] AROcclusionManager occlusionManager; void Start() { if (occlusionManager.descriptor?.supportsEnvironmentDepthImage == true) { occlusionManager.requestedEnvironmentDepthMode = EnvironmentDepthMode.Fastest; occlusionManager.requestedOcclusionPreferenceMode = OcclusionPreferenceMode.PreferEnvironmentOcclusion; } else { occlusionManager.enabled = false; } } , מקבלים descriptor ב-Pixel 5 (ללא ToF). המהנדסים שלנו תמיד כוללים בדיקות כאלה.

ארכיטקטורת הסצנה קריטית ליציבות

AR Foundation בנוי על רכיבים המקושרים ל-NotSupportedException ו-ARSession:

  • XROrigin — זיהוי ומעקב מישורים
  • ARPlaneManager — raycasting נגד גיאומטריה במעקב
  • ARRaycastManager — מעקב מבוסס סמנים
  • ARTrackedImageManager — ניהול מחזור חיים של עוגנים

הצבת אובייקטים נכונה באמצעות הקשה עם ARAnchorManager:

[SerializeField] ARRaycastManager raycastManager;
[SerializeField] ARAnchorManager anchorManager;
[SerializeField] GameObject prefabToPlace;
private List<ARRaycastHit> hits = new List<ARRaycastHit>();

void Update()
{
    if (Input.touchCount == 0) return;
    var touch = Input.GetTouch(0);
    if (touch.phase != TouchPhase.Began) return;
    if (raycastManager.Raycast(touch.position, hits, TrackableType.PlaneWithinPolygon))
    {
        var hitPose = hits[0].pose;
        var anchor = anchorManager.AttachAnchor(
            hits[0].trackable as ARPlane,
            hitPose
        );
        Instantiate(prefabToPlace, anchor.transform);
    }
}

ARRaycastManager קושר את האובייקט למישור ספציפי—אם המישור מעדכן את הגיאומטריה שלו (ARKit משכלל צורות ללא הרף), האובייקט נשאר מעוגן. ללא הצמדת עוגן, האובייקט נסחף.

מעקב תמונות: ספריית ייחוס

תמונות מקובצות ל-[SerializeField] ARRaycastManager raycastManager; [SerializeField] ARAnchorManager anchorManager; [SerializeField] GameObject prefabToPlace; private List<ARRaycastHit> hits = new List<ARRaycastHit>(); void Update() { if (Input.touchCount == 0) return; var touch = Input.GetTouch(0); if (touch.phase != TouchPhase.Began) return; if (raycastManager.Raycast(touch.position, hits, TrackableType.PlaneWithinPolygon)) { var hitPose = hits[0].pose; var anchor = anchorManager.AttachAnchor( hits[0].trackable as ARPlane, hitPose ); Instantiate(prefabToPlace, anchor.transform); } } דרך Unity Editor. מגבלות: ARKit מאפשר עד 100 תמונות בספרייה עם מעקב מקביל של עד 4. ל-ARCore יש כמעט בלתי מוגבל תמונות, אבל עוקב בו-זמנית עד 20 לכל היותר.

[SerializeField] ARTrackedImageManager trackedImageManager;

void OnEnable() => trackedImageManager.trackablesChanged.AddListener(OnImageChanged);

void OnDisable() => trackedImageManager.trackablesChanged.RemoveListener(OnImageChanged);

void OnImageChanged(ARTrackablesChangedEventArgs<ARTrackedImage> args)
{
    foreach (var added in args.added)
    {
        SpawnContent(added.referenceImage.name, added.transform);
    }

    foreach (var updated in args.updated)
    {
        SetVisible(updated.referenceImage.name, updated.trackingState == TrackingState.Tracking);
    }
}

ביצועים: Unity + AR = המשך בזהירות

Unity אינה הסביבה הקלה ביותר עבור AR. בעיות טיפוסיות:

השהיות של אוסף זבל (Garbage collector). ה-GC של .NET/Mono עוצר את ה-thread הראשי. בסשן AR של 60 FPS, השהיה של 16ms משמעותה פריים שנפל ואובייקטים רועדים. פתרון: השתמשו ב-AttachAnchor שהוקצו מראש (העבירו ל-XRReferenceImageLibrary), הימנעו מ-[SerializeField] ARTrackedImageManager trackedImageManager; void OnEnable() => trackedImageManager.trackablesChanged.AddListener(OnImageChanged); void OnDisable() => trackedImageManager.trackablesChanged.RemoveListener(OnImageChanged); void OnImageChanged(ARTrackablesChangedEventArgs<ARTrackedImage> args) { foreach (var added in args.added) { SpawnContent(added.referenceImage.name, added.transform); } foreach (var updated in args.updated) { SetVisible(updated.referenceImage.name, updated.trackingState == TrackingState.Tracking); } } בתוך List<T>.

עומס DrawCall. כל אובייקט AR ללא batching הוא draw call נפרד. השתמשו ב-GPU Instancing בחומרים ו-Static Batching עבור אובייקטים שלא זזים. באנדרואיד, העדיפו backend של Vulkan על פני OpenGLES להפחתת עומס CPU.

דחיסת טקסטורות. ASTC ל-iOS, ETC2 לאנדרואיד. בפרויקט AR Foundation המכוון לשתי הפלטפורמות, הגדירו Override for Platform בהגדרות ייבוא הטקסטורה. ASTC באנדרואיד דורש תמיכת GPU (זמין בכל המכשירים התואמים ARCore).

טיפים לאופטימיזציית ביצועים | בעיה | פתרון | |---------|----------| | השהיות GC | List שהוקצה מראש, הימנעו מ-new ב-Update | | עומס DrawCall | GPU Instancing, Static Batching, Vulkan באנדרואיד | | דחיסת טקסטורות | ASTC ל-iOS, ETC2 לאנדרואיד, Override לפלטפורמה |

Build ופרסום

AR Foundation דורש הגדרות Player ספציפיות:

  • iOS: Raycast חובה (דרישת App Store), יכולת new
  • אנדרואיד: הרשאת Update() ב-AndroidManifest, Camera Usage Description ב-dependencies

ARCore בודק AR Services בעת ההפעלה—עליכם לטפל ב-ARKit. בלעדיו, האפליקציה קורסת בשקט במכשירים לא תואמים.

מה כלול בעבודה שלנו

תוצרים כוללים: ניתוח דרישות ובחירת מחסנית טכנולוגית (Unity LTS, AR Foundation 6.x, StoreKit 2 / Billing 6 לרכישות), יישום עם בדיקות יכולות מכשיר ולוגיקת fallback, אופטימיזציית ביצועים (GC, batching, טקסטורות), הגדרת build ופרסום (App Store Connect / Google Play Console), תיעוד API ותצורה, הדרכת צוות ותמיכה של שבועיים לאחר השחרור.

הצוות שלנו מורכב ממפתחי Unity מוסמכים עם ניסיון של 10+ שנים ומעל 50 פרויקטי AR שסופקו. קבלו ייעוץ לפרויקט שלכם—כתבו לנו.

לוחות זמנים

שילוב AR Foundation בסיסי עם זיהוי מישורים והצבת אובייקטים (iOS + אנדרואיד): מ-5 ימים. AR מבוסס סמנים עם ספריית תמונות ואנימציות מותאמות: 1–2 שבועות. פתרון מלא עם חסימה, מעקב פנים ופרסום לשתי הפלטפורמות: 3–6 שבועות.

טעויות נפוצות בשילוב AR Foundation שיש להימנע מהן

  • אי-בדיקת descriptor — קריסה במכשירים ללא ToF.
  • העלאת טקסטורות ASTC לאנדרואיד ללא תמיכה — טקסטורות שחורות.
  • שימוש ב-CAMERA בתוך com.google.ar.core — מיקרו-הקפאות כל 10–20 שניות.
  • אי-טיפול ב-ARUnavailableException — קריסה שקטה במכשירי אנדרואיד ישנים.
  • חסר new — דחייה ב-App Store.

השוואת AR Foundation עם גישות אחרות

גישה זמן פיתוח (iOS + אנדרואיד) בסיס קוד ביצועים
ARKit + ARCore ישיר 2–3 שבועות 2 בסיסי קוד מקסימליים
AR Foundation 5–14 ימים C# יחיד 95–98% מ-native
Vuforia 7–10 ימים C# יחיד + רישיון 80–90%

AR Foundation מנצח אינטגרציה ישירה בכך שהוא מקצר את זמן הפיתוח ב-40–50% עם אובדן ביצועים מינימלי. צרו קשר להערכת עלויות השילוב שלכם—נבחן את המשימה ונציע פתרון.

כיצד לשלב AR Foundation (שלב אחר שלב)

  1. הקימו פרויקט Unity עם חבילת AR Foundation.
  2. הגדירו XR Plug-in Management עבור ARCore ו-ARKit.
  3. הוסיפו AR Session ו-XR Origin לסצנה.
  4. יישמו זיהוי מישורים עם AR Plane Manager.
  5. הוסיפו raycasting להצבת אובייקטים.
  6. בנו ובדקו על מכשירים.