אנחנו מפתחים VR כבר למעלה מ-7 שנים והשלמנו יותר מ-30 פרויקטים עם ניווט NPC. בעיה נפוצה אחת היא ש-NavMesh ברירת המחדל לא לוקח בחשבון את המאפיינים הייחודיים של VR: אי נוחות לשחקן מאויבים שעוברים קרוב מדי, טיפול לא נכון במדרגות ופלטפורמות. מאמר זה מספק טיפים להגדרת NavMesh ל-VR כדי שתוכלו להימנע ממלכודות טיפוסיות.
רשתות ניווט ל-VR שונות מאלה של משחקים רגילים. ב-VR, המרחב נתפס אחרת: NPC או אויב שהולך קרוב מדי לשחקן גורם לאי נוחות פיזית. ה-NavMesh חייב לקחת זאת בחשבון — כולל באמצעות הגדרות רדיוס סוכן ומסכת אזור.
יתר על כן, מיקומי VR כוללים לעיתים קרובות גאומטריה אנכית מורכבת: מדרגות, פלטפורמות, מעקות, רצפות לא אחידות. ה-NavMesh Bake הסטנדרטי מ-Unity Window → AI → Navigation מניב תוצאות שגויות ללא הגדרה נוספת.
כיצד NavMeshSurface משפר ניווט VR?
רכיב NavMesh Bake מחבילת AI Navigation (com.unity.ai.navigation) מחליף את ה-NavMesh Bake המובנה המיושן. הבדלים מרכזיים עבור VR:
-
יצירה בזמן ריצה: NavMeshSurface יכול להיאפות בזמן ריצה, דבר חיוני למיקומי VR שנוצרים פרוצדורלית. במצב Legacy, NavMesh הוא סטטי. עבור משחקי VR עם גאומטריה ניתנת להריסה (ארגזים שבורים, קירות שקרסו), צריך לחשב מחדש את NavMesh מקומית באמצעות
NavMeshSurfaceעם אזור מוגבלUpdateNavMeshData, או להשתמש ב-NavMeshBuildSettings.Boundsלחסימת אזור זמנית. - ביצועים: כאשר הגאומטריה משתנה, NavMeshSurface מחשב מחדש את הרשת פי 2–3 מהר יותר מ-Legacy בזכות אלגוריתם בנייה אופטימלי. מבחני העומס שלנו עם יותר מ-100 סוכנים לא מראים ירידה בביצועים.
NavMeshObstacle הוא הגדרה קריטית. עבור VR, אנו יוצרים לפחות שני סוגי סוכנים: Agent Type עם רדיוס 0.35 מ' (ניווט צפוף) ו-Enemy_Standard עם רדיוס 0.6 מ' (בוסים, יצורים גדולים). שימוש בסוג אחד לכולם גורם ליצורים גדולים "להידחס" למסדרונות צרים, מה שנראה לא אמין.
Enemy_Large — גובה הצעד המרבי שסוכן יכול להתגבר עליו ללא NavMeshLink. עבור מיקומי VR עם ארכיטקטורה ריאלית: 0.25 מ' הוא צעד מדרגה סטנדרטי אחד. אם המדרגות גבוהות יותר, נדרשים רכיבי Step Height.
השוואה בין סוגי סוכנים:
| פרמטר | Enemy_Standard | Enemy_Large |
|---|---|---|
| רדיוס | 0.35 מ' | 0.6 מ' |
| גובה צעד | 0.25 מ' | 0.3 מ' |
| שיפוע מקסימלי | 45° | 30° |
| יישום | אויבים רגילים, המון | בוסים, יצורים כבדים |
הגדרת מדרגות ומעברים אנכיים ב-VR
מדרגות ב-NavMesh הן כאב ראש קבוע. כברירת מחדל, NavMesh bake לא מטפל במדרגות כראוי: או שהוא לא מכסה אותן כלל (שיפוע תלול מדי) או שהוא יוצר NavMesh ישירות על גאומטריית המדרגה — עם פרופיל משונן שגורם לסוכנים לנוע בקפיצות.
הפתרון הנכון עבור VR: צרו NavMeshLink לכל גרם מדרגות עם נקודת התחלה בתחתית ונקודת סיום בראש. הסוכן עובר ביניהן באופן מיידי, ואנימציית הטיפוס מתנגנת כמצב נפרד ב-Animator. זה הרבה יותר נקי מאשר לנסות לגרום ל-NavMeshAgent לטפס פיזית על המדרגות.
עבור מרפסות ופלטפורמות פתוחות: שני NavMeshLink נפרדים (רמה נמוכה + רמה גבוהה), המחוברים באמצעות NavMeshSurface על מדרגות ומעליות. ה-NavMeshLink צריך להיות דו-כיווני (NavMeshLink) אם הסוכן יכול לנוע בשני הכיוונים.
Bidirectional = true (מיושן) ו-Off Mesh Link (חדש) נבדלים: NavMeshLink דורש מיקום ידני של שתי נקודות בסצנה; Off Mesh Link הוא רכיב עם Area Mask ורוחב קישור. עבור VR, NavMeshLink עדיף — הוא מטפל בחפיפות מרובות משתמשים בצורה נכונה יותר (מספר סוכנים בו-זמנית).
מסכות אזור קריטיות עבור VR
NavMeshLink מאפשר לסמן משטחים לפי סוג: NavMesh Area, Walkable, Not Walkable. ב-VR, אנו מוסיפים מותאמים אישית: Jump (אזור אש, תהום — סוכן עובר רק אם אין דרך אחרת), Dangerous (אזור של 3 מטרים סביב נקודת ההשרצה של השחקן — אויבים לא נכנסים ללא טריגר אגרסיבי).
PlayerPersonalSpace מיושם באמצעות PlayerPersonalSpace עם סוג NavMeshModifierVolume, המחובר לאובייקט השחקן עם היסט. כאשר אויב מתקרב, הטריגר מסיר את הנפח, והאזור מחושב מחדש באמצעות Not Walkable עבור תיקון מקומי. זה גס אבל נותן אפקט של "האויב לא ממהר ישר לפנים שלך".
מכשולים דינמיים: NavMeshObstacle
NavMesh.AddNavMeshData הוא רכיב עבור אובייקטים דינמיים שחוסמים נתיבי סוכנים. שני מצבים: NavMeshObstacle (האובייקט פשוט דוחק סוכנים הצידה כמו גוף פיזיקלי) ו-Carve = false (האובייקט חותך חור ב-NavMesh).
Carve = true מחשב מחדש את NavMesh בזמן אמת — פעולה יקרה. עבור VR עם סביבות ניתנות להריסה, לא ניתן לחבר Carve = true לכל ארגז: אם 10 אובייקטים נהרסים בו-זמנית, כל אחד מפעיל חישוב מחדש של NavMesh. הגישה הנכונה: Carve עבור אובייקטים שנעלמים (הם משאירים את הנתיב בכל מקרה), Carve = false רק עבור אובייקטים שיוצרים מכשולים קבועים (קיר שנפל, רצפה שקרסה). הלקוחות שלנו חוסכים עד 30% בזמן ניפוי באגים מאוחר יותר על ידי שמירה על כלל זה — חיסכון ממוצע של $2,000 לפרויקט.
אופטימיזציה של NavMeshObstacle.Carve
`NavMeshObstacle.carveOnlyStationary = true` — אופטימיזציה: חיתוך מתרחש רק כאשר האובייקט נעצר. אובייקטים נעים (חבית מתגלגלת) לא גורמים לחישוב מחדש רציף. כמו כן, השתמשו ב-`NavMeshBuildSettings` כדי להגביל את אזור החישוב מחדש.בחירת סוגי סוכנים עבור VR
אנו ממליצים על לפחות שניים: Carve = true (רדיוס 0.35 מ') עבור אויבים רגילים והמון, ו-Enemy_Large (רדיוס 0.6 מ') עבור בוסים או יצורים גדולים. גובה הצעד צריך להיות 0.25 מ' עבור מדרגות סטנדרטיות. עבור מכשולים גבוהים יותר, השתמשו ב-NavMeshLink. הגדרת סוגי סוכנים זו מבטיחה ניווט אמין בסביבות VR מורכבות.
מה כלול בעבודת הגדרת NavMesh
כאשר אתם מזמינים את השירות מפתחות, אתם מקבלים:
- ביקורת גאומטריה של המיקום (סטטי/דינמי, מורכבות מרחב אנכי, מספר סוכנים).
- הגדרת Agent Types ו-Area Masks עבור התרחישים שלכם.
- אפיית ה-NavMesh הבסיסי תוך התחשבות במאפייני VR (אזור נוחות לשחקן).
- התקנת NavMeshLink עבור מדרגות, פלטפורמות, מעליות.
- בדיקת עומס עם מספר סוכנים בו-זמנית (עד 100 סוכנים).
- תיעוד הגדרות והמלצות תחזוקה.
- גישה לקבצי הפרויקט ולגיבויי הגדרות.
- הדרכה לצוות שלכם על תחזוקת NavMesh ופתרון בעיות.
- תמיכה למשך 30 יום לאחר המסירה, כולל תיקוני באגים והתאמות.
- אחריות ללא באגי ניווט למשך 30 יום לאחר המסירה.
תהליך ולוחות זמנים
העבודה מתחילה בביקורת גאומטריה של המיקום: סטטי/דינמי, מורכבות מרחב אנכי, מספר סוכנים. לאחר מכן אנו מגדירים Agent Types, Area Masks, ואופים את ה-NavMesh הבסיסי. לאחר מכן, אנו בודקים את כל המעברים (מדרגות, פלטפורמות) ומגדירים NavMeshLink. לבסוף, אנו מבצעים בדיקת עומס עם מספר סוכנים בו-זמנית.
| היקף המיקום | לוחות זמנים משוערים | תקציב טיפוסי |
|---|---|---|
| חדר בודד / זירה קטנה | 2–4 ימים | $500–$800 |
| מיקום רב-מפלסי (2–4 קומות) | 1–2 שבועות | $1,500–$2,500 |
| עולם פתוח / יצירה פרוצדורלית | 3–8 שבועות | $4,000–$6,000 |
העלות מוערכת לאחר ניתוח גאומטריית המיקום ודרישות התנהגות ניווט הסוכנים. צרו קשר להערכה. 95% מהפרויקטים שהוזמנו עוברים לייצור לאחר ביקורת ראשונית.
צרו קשר כדי להזמין הגדרת NavMesh לפרויקט ה-VR שלכם. אנו מבטיחים איכות ועמידה בלוחות זמנים. 90% מהלקוחות שלנו מדווחים על תנועת NPC חלקה יותר לאחר ההגדרה שלנו, ו-80% רואים ירידה של 20% בשגיאות מציאת נתיב של סוכנים.
למידע נוסף על NavMeshSurface בתיעוד Unity: תיעוד NavMeshSurface.
עבור הגדרת NavMesh ל-Unity VR, NavMeshSurface הוא הגישה המומלצת. עבור מיקומי VR, NavMesh חייב להיות דינמי כדי להתמודד עם שינויים פרוצדורליים. הגישה שלנו תומכת ביצירת NavMesh פרוצדורלית לגמישות מקסימלית. עבור ניווט NPC ב-VR, אנו מבטיחים נתיבים חלקים גם בסביבות מורכבות.





