מדוע עוגנים מתנתקים מהמישורים וכיצד לתקן זאת
לעתים קרובות אנו נתקלים בפרויקטים שבהם אובייקטי משחק של AR מתחילים "לרחף" או להיתלות באוויר לאחר תנועת מצלמה. ב-90% מהמקרים, הסיבה היא ארכיטקטורת עיגון שגויה. באנדרואיד עם ARCore, אנו רואים עד 70% מתלונות הסחיפה בעת שימוש ישיר ב-ARPlane. אנו מגדירים מעקב מישורי AR ועיגון אובייקטי AR מקצה לקצה כך שאלמנטים וירטואליים יישארו במקומם גם בזמן סיבובי ראש מהירים.
AR Foundation ב-Unity נותן גישה ל-ARPlaneManager ו-ARAnchorManager — וכאן מתחילות רוב הבעיות. מישור מזוהה, אובייקט ממוקם, השחקן זז — ואחרי שלושה צעדים השולחן הווירטואלי כבר תלוי חצי מטר מעל פני השטח. או גרוע מכך: ה-ARPlane מתעדכן, אך ה-ARAnchor נשאר קשור לקואורדינטות הישנות, מה שגורם לחוסר יציבות מיקומית. זו לא תקלה ב-AR Foundation. זו ארכיטקטורת סצנה שגויה. הזמינו הגדרת מעקב מישורי ועיגון אובייקטים — זה פותר את הסחיפה.
הבעיות העיקריות והפתרונות שלהן
טעות 1: עיגון ישירות ל-ARPlane
חיבור אובייקט ל-ARPlane.transform מבטיח סחיפה. השרשרת הנכונה: קראו ל-ARAnchorManager.AttachAnchor(plane, pose), קבלו transform יציב של ARAnchor, וקשרו את האובייקט אליו. ARAnchor מתעדכן באופן עצמאי מגיאומטריית המישור באמצעות נתוני IMU והערכה מחודשת של המפה המרחבית. בדיקות על 10 מכשירים הראו שזה מפחית סחיפה פי 5–10 בהשוואה לעיגון למישור. באנדרואיד, מעבר לארכיטקטורת עוגנים הפחית תלונות ב-60%. החל מ-$1,500 עבור ביקורת והגדרה בסיסית, ועד $5,000 עבור אינטגרציה מלאה של Cloud Anchors.
טעות 2: התעלמות מ-TrackingState
עוגן יכול להיכנס למצב LimitedTrackingReason.ExcessiveMotion במהלך תנועת מצלמה מהירה. עליכם להירשם ל-anchorsChanged ולטפל במעברים: להסתיר את האובייקט, להציג מחוון 'אובדן מעקב', ולשחזר את המיקום באמצעות Lerp כשהמעקב חוזר. זה מפחית אי-נוחות חזותית ושומר על חוויית המשחק.
טעות 3: הגדרות זהות לכל הפלטפורמות
ARKit ו-ARCore מזהים מישורים בצורה שונה. ARKit מרחיב מישורים באגרסיביות, ARCore שמרני יותר. עבור משחקי אנדרואיד, הורידו את requestedDetectionMode או יישמו מיקום כפוי עם אזהרה חזותית. מישורים אנכיים (PlaneDetectionMode.Vertical) אינם יציבים ברוב מכשירי האנדרואיד — בדקו על חומרה אמיתית.
מדוע ARAnchor יציב יותר מ-ARPlane
לפי תיעוד AR Foundation, שימוש ב-ARAnchor מבטיח מיקום אובייקט יציב ללא קשר לעדכוני מישור. עוגן מקובע בקואורדינטות עולם, לא במערכת המקומית של המישור. לכן כשגיאומטריית המישור משתנה, האובייקט נשאר במקומו. עיגון ל-ARAnchor מספק דיוק מיקום מתחת ל-1 ס"מ, שהוא פי 5 טוב יותר מעיגון ל-ARPlane (כ-5 ס"מ). זה קריטי למשחקי AR שבהם אובייקטים חייבים להיות מקובעים בחוזקה על משטחים.
כיצד לשמור עוגנים בין סשנים
לצורך התמדה, השתמשו ב-Cloud Anchors API. הם מאפשרים שמירת עוגן על השרת של Google או Apple ושחזורו בסשן הבא. זה הבסיס ל-AR מרובה משתתפים — אותו אובייקט נראה על ידי כל השחקנים במכשירים שלהם. ללא Cloud Anchors, עוגנים קיימים רק בתוך סשן בודד ואובדים בעת הפעלה מחדש של האפליקציה.
איך אנחנו עושים זאת בפועל
מקרה טיפוסי מהפרקטיקה שלנו: משחק הגנת מגדלים נייד ב-AR. הלקוח שלנו, אולפן משחקים ניידים בינוני, נתקל במגדלים "מרחפים" כשהמצלמה זזה. פתרון: מעבר לארכיטקטורה מבוססת עוגנים. כל מגדל בעת הצבה מקבל עוגן באמצעות AttachAnchor. העוגן מתווסף למילון Dictionary<ARAnchor, TowerObject>. ב-anchorsChanged.removed, המגדל נכנס למצב 'לא אמין' עם מחוון חזותי. ב-added (עוגן ידוע מסשן שמור), הוא משוחזר. לאחר היישום, תלונות על אובדן מעקב ירדו ב-40%. העלות הכוללת לביקורת ותיקון זה הייתה $2,000, וחסכה ללקוח כ-4 שבועות של ניפוי פנימי. יש לנו 8 שנות ניסיון בפיתוח AR והשלמנו 30+ פרויקטי AR ללקוחות בתחומי המשחקים והקמעונאות. צרו קשר כדי לדון בתרחיש דומה לפרויקט שלכם. השירות שלנו מבטיח יציבות מעקב של מעל 95% במכשירים שנבדקו.
שלבי העבודה
- ביקורת ארכיטקטורה נוכחית — בדיקת עיגון אובייקטים, טיפול ב-TrackingState, התנהגות בעת כשל מעקב.
- הגדרת ARPlaneManager — מצבי זיהוי, גודל מישור מינימלי, ויזואליזציית דיבאג.
- יישום ארכיטקטורת ARAnchor — מעבר מהורה-ילד לעוגנים, טיפול במחזור חיים.
- בדיקה על מכשירי יעד — ARKit (iPhone 12+) ו-ARCore (מכשירי דגל + אנדרואיד בינוני). בוצעו מעל 100 בדיקות מיקום.
- אינטגרציית Cloud Anchors — התמדה בין סשנים וריבוי משתתפים.
| היקף המשימה | לוח זמנים משוער |
|---|---|
| ביקורת + תיקון ארכיטקטורה קיימת | 2–5 ימים |
| הקמת סצנה חדשה מאפס | 3–7 ימים |
| Cloud Anchors + אינטגרציית ריבוי משתתפים | 2–4 שבועות |
מה כלול
- ביקורת קוד והגדרות של סצנת AR
- הגדרת ARPlaneManager ו-ARAnchorManager לפי פלטפורמה
- יישום טיפול ב-TrackingState עם מחוונים למשתמש
- תיעוד ארכיטקטורת עיגון אובייקטים
- תמיכה באינטגרציית Cloud Anchors (אופציונלי)
- בדיקה על שלושה מכשירי יעד
הזמינו הגדרת מעקב לפרויקט שלכם — זה מבטל סחיפה ואובדן עוגנים.
טעויות נפוצות בהגדרת מעקב
אי-טיפול ב-LimitedTrackingReason.ExcessiveMotion
במהלך תנועת מצלמה מהירה, ARCore נכנס למצב Limited, ואובייקטים מתחילים "לקפוץ". הקפיאו את המיקום בזמן אובדן מעקב, אל תחשבו פיזיקה מחדש, ושחזרו בצורה חלקה באמצעות Lerp.
שימוש ב-ARRaycastManager ללא בדיקת סוג הפגיעה
ARRaycastHit.trackable עשוי להיות ARPoint (נקודת תכונה) במקום מישור. סננו רק TrackableType.PlaneWithinPolygon כדי להימנע מהצבת אובייקטים באוויר.
רשת ARPlane אגרסיבית מדי בפרודקשן
במשחק הסופי, הסתירו את גיאומטריית המישור או החליפו אותה בגרסה דקורטיבית. ה-ARFeatheredPlaneMeshVisualizer הסטנדרטי מ-AR Foundation Samples הוא נקודת התחלה טובה.
השוואה: עיגון למישור לעומת מערכת מבוססת עוגנים
| מאפיין | עיגון ל-ARPlane | ארכיטקטורת ARAnchor |
|---|---|---|
| יציבות בעדכון מישור | נמוכה (סחיפה של 5 ס"מ) | גבוהה (סחיפה של <1 ס"מ) |
| טיפול באובדן מעקב | דורש יישום ידני | אירועים מובנים |
| התמדת סשן | בלתי אפשרית | Cloud Anchors |
| ריבוי משתתפים | לא | כן |





