NavMesh ופתרון נתיבים למשחקי מובייל: פיתוח מומחה

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

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

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

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
NavMesh ופתרון נתיבים למשחקי מובייל: פיתוח מומחה
מורכב
~3-5 ימים

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

שאלות נפוצות

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

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

פיתוח NavMesh וניווט למשחקי מובייל: פיתוח מקצועי

דמיינו משחק RTS למובייל עם מאה יחידות. כל אחת משתמשת ב-A*—ה-FPS צונח ל-10. מערכות הניווט שלנו פותרות את זה. אנחנו מפתחים מערכות ניווט למשחקי מובייל כבר 5+ שנים, עם למעלה מ-20 פרויקטים שמשתמשים ב-NavMesh ובניווט. ניווט איכותי הוא ההבדל בין פרויקט שניתן לשחק בו לבין אב טיפוס שננטש. כאן אנחנו מסבירים איך אנחנו מתמודדים עם אתגרים: מ-NavMesh סטטי ועד Flow Field לנחילים.

אויב שהולך דרך קירות או NPC שנתקע בפינה—זו לא תקלה, זה היעדר מערכת ניווט מתאימה. במכשירי מובייל, הוספת מאה סוכנים עם ניווט מלא יכולה להוריד את ה-FPS ל-15. אנחנו משלבים NavMesh, A* ו-Flow Field כדי להבטיח תנועה חלקה עם צריכת CPU מינימלית. הניסיון שלנו מראה שבישום נכון של NavMesh מבטל 80% מבעיות הניווט. אנחנו מבטיחים שכל סוכן מגיע ליעדו בלי להיתקע.

איך NavMesh עובד במכשירי מובייל

NavMesh הוא ייצוג פשוט של הרמה שסוכן יכול לנוע בה. הוא נבנה פעם אחת כשהרמה נטענת (או נאפה בעורך מראש). ב-Unity, זה ה-NavMeshAgent המובנה; ב-Godot, NavigationServer3D.

פרמטרי בישום מרכזיים של NavMesh שמשפיעים על איכות:

Agent Radius: 0.4 // радиус капсулы агента — NavMesh строится с отступом
Agent Height: 1.8 // высота — для обнаружения низких проходов
Max Slope: 45° // максимальный угол подъёма
Step Height: 0.4 // высота ступеньки, которую агент преодолевает

במכשירי מובייל, זה קריטי: אפו את ה-NavMesh בעורך מראש, לא בזמן ריצה. בישום בזמן ריצה (דרך Agent Radius: 0.4 // радиус капсулы агента — NavMesh строится с отступом Agent Height: 1.8 // высота — для обнаружения низких проходов Max Slope: 45° // максимальный угол подъёма Step Height: 0.4 // высота ступеньки, которую агент преодолевает ) לוקח 100–500ms ויוצר לחץ על ה-GC. למכשולים דינמיים, השתמשו ב-NavMeshBuilder.BuildNavMeshAsync עם NavMeshObstacle—הוא חוצב את עצמו מה-NavMesh תוך 10–30ms.

למה A* לא תמיד מתאים לסוכנים המוניים

לניווט, Unity משתמש באלגוריתם A* המובנה עם הוריסטיקת מרחק אוקלידי. לרוב משחקי המובייל, זה אופטימלי. אבל יש תרחישים שבהם A* הסטנדרטי נכשל:

  • מכשולים דינמיים—השחקן מציב מחסומים, דלת נסגרת. הפתרון הוא Carve = true עם NavMeshObstacle, אבל חישוב מחדש יקר. חלופה לשינויים תכופים היא ניווט Flow Field: חישוב מוקדם של שדה וקטורי ליעד, סוכנים עוקבים אחרי השדה בלי חיפוש נתיב אישי.
  • סוכנים רבים שמכוונים לנקודה אחת—משחקי זומבים, tower defense. A* לכל סוכן בנפרד עם 100+ סוכנים הורג את הביצועים. Flow Field מחושב פעם אחת לכל השדה—סוכנים קוראים את הערך של התא שלהם. O(1) לכל סוכן לעומת O(n log n) ל-A*.
מאפיין A* Flow Field
חישוב לכל סוכן O(n log n) O(1)
תמיכה במכשולים דינמיים דורש חישוב נתיב מחדש לכל סוכן דורש חישוב שדה מחדש (פעם אחת לכולם)
זיכרון נמוך (נתיב סוכן) בינוני (שדה וקטורי בגודל המפה)
מספר סוכנים מומלץ עד 50 50–500
התרחיש הטוב ביותר סוכנים מפוזרים, שינויים נדירים התנהגות נחיל, מפה יציבה

Flow Field מהיר פי 5–10 מ-A* עם 100+ סוכנים—הוכח בפרויקטים אמיתיים. במקרה אחד, הפחתנו עלויות פיתוח ב-$2000 על ידי החלפת A* ב-Flow Field.

// Unity: базовый Flow Field запрос для тайловой карты
public class FlowField
{
    private Vector2[,] directions;
    private int width, height;

    public void Calculate(Vector2Int target, bool[,] obstacles)
    {
        var costField = new int[width, height];
        var queue = new Queue<Vector2Int>();
        queue.Enqueue(target);
        costField[target.x, target.y] = 0;

        while (queue.Count > 0)
        {
            var current = queue.Dequeue();
            foreach (var neighbor in GetNeighbors(current))
            {
                if (!obstacles[neighbor.x, neighbor.y] && costField[neighbor.x, neighbor.y] == int.MaxValue)
                {
                    costField[neighbor.x, neighbor.y] = costField[current.x, current.y] + 1;
                    queue.Enqueue(neighbor);
                }
            }
        }
    }

    public Vector2 GetDirection(Vector2Int position) => directions[position.x, position.y];
}

איך ליישם תנועת NPC חלקה?

ניווט נותן מסלול—רשימה של נקודות ציון. התנהגויות היגוי הופכות את זה לתנועה חלקה:

  • Seek / Arrive: לנוע לעבר היעד עם האטה כשמתקרבים
  • Obstacle Avoidance: להתחמק ממכשולים דינמיים דרך Raycast (מרחק 2–3 יחידות)
  • Separation: סוכנים נמנעים מהתקבצות (רדיוס 1.5 יחידות)
  • Cohesion: הקבוצה נשארת יחד (להתנהגות להקה)

Carve = true כולל התנהגויות היגוי בסיסיות. לכיוונון עדין, השתמשו ב-// Unity: базовый Flow Field запрос для тайловой карты public class FlowField { private Vector2[,] directions; private int width, height; public void Calculate(Vector2Int target, bool[,] obstacles) { var costField = new int[width, height]; var queue = new Queue<Vector2Int>(); queue.Enqueue(target); costField[target.x, target.y] = 0; while (queue.Count > 0) { var current = queue.Dequeue(); foreach (var neighbor in GetNeighbors(current)) { if (!obstacles[neighbor.x, neighbor.y] && costField[neighbor.x, neighbor.y] == int.MaxValue) { costField[neighbor.x, neighbor.y] = costField[current.x, current.y] + 1; queue.Enqueue(neighbor); } } } } public Vector2 GetDirection(Vector2Int position) => directions[position.x, position.y]; } מחבילת NavMeshAgent (אלגוריתם ORCA). זה נותן התחמקות מהתנגשויות ריאלית בלי deadlocks הדדיים.

איך להבטיח ביצועים במובייל?

אל תחשבו מחדש את הנתיב בכל פריים. כל RVOSimulator מפעיל בקשת ניווט חדשה. למרדף אחרי שחקן, חישוב מחדש כל 0.3–0.5 שניות מספיק:

private float pathUpdateTimer = 0f;
private const float PATH_UPDATE_INTERVAL = 0.3f;

void Update()
{
    pathUpdateTimer += Time.deltaTime;
    if (pathUpdateTimer >= PATH_UPDATE_INTERVAL)
    {
        agent.SetDestination(player.position);
        pathUpdateTimer = 0f;
    }
}

LOD לניווט. סוכנים מחוץ למסך משביתים את NavMeshAgent ומשתמשים בטלפורטציה לפי נקודות ציון. ניווט מלא מופעל רק כשהם בתוך ה-frustum. זה חוסך 30% CPU.

Unity Job System ל-A*. אם צריך ניווט מותאם אישית על מפה גדולה, com.unity.ai.navigation + NavMeshAgent.SetDestination() מעבירים את החישוב מהראשי thread. Burst Compiler נותן האצה של פי ~10. בפרויקט אחד, הפחתנו את זמן חישוב הנתיב מ-5ms ל-0.4ms.

ניפוי באגים וויזואליזציה

קשה לנפות ניווט בלי ויזואליזציה. בעורך, אנחנו מציירים את נתיב ה-NavMesh:

void OnDrawGizmos()
{
    if (agent != null && agent.hasPath)
    {
        Gizmos.color = Color.yellow;
        var corners = agent.path.corners;
        for (int i = 0; i < corners.Length - 1; i++)
        {
            Gizmos.DrawLine(corners[i], corners[i + 1]);
        }
    }
}

אנחנו גם מתייחסים לתיעוד ה-NavMesh של Unity כדי לוודא פרמטרי בישום.

פרטי אופטימיזציית קוד

עבור Flow Field, אנחנו משתמשים ב-NativeArray<Vector2> עם Job System—נותן האצה של פי 10 במכשירי מובייל.

תהליך

  1. ניתוח רמה—גיאומטריה סטטית, מכשולים דינמיים, מספר סוכנים (לא יותר מ-500 במכשיר ממוצע).
  2. בחירת אלגוריתם—NavMesh + A* לתרחישים טיפוסיים, Flow Field לסוכנים המוניים.
  3. הגדרת NavMesh—פרמטרי בישום, אינטגרציה עם גיאומטריה.
  4. יישום היגוי—כיוונון חלקות, התחמקות ממכשולים.
  5. אופטימיזציה—LOD, מרווחי עדכון, Job System.
  6. בדיקות—במכשירי יעד עם Unity Profiler (FPS, זיכרון).
שלב משך מה כלול
ניתוח יום אחד הערכת גיאומטריה, מספר NPCs, הערכת ביצועים
עיצוב 1–2 ימים בחירת אלגוריתם, מפרט AI
יישום 3–10 ימים קוד, אינטגרציה עם לוגיקת המשחק
אופטימיזציה 2–3 ימים LOD, Job System, פרופיילינג
בדיקות 1–2 ימים אימות על 3–5 מכשירים

מה כלול

  • מערכת ניווט מוכנה עם קוד מקור
  • תיעוד להגדרת פרמטרי NavMesh
  • הדרכת צוות (שעתיים אונליין)
  • שבועיים של תמיכה טכנית לאחר המסירה
  • התאמה למכשירי יעד (iOS/Android)

הזמינו פיתוח מערכת ניווט—קבלו ייעוץ והערכה תוך 24 שעות.

לוחות זמנים משוערים

  • ניווט בסיסי דרך NavMeshAgent ל-5–10 סוגי סוכנים—3–5 ימים.
  • מערכת מותאמת אישית עם Flow Field, מכשולים דינמיים ואופטימיזציית LOD—2–4 שבועות.

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