אנחנו מקבלים לעיתים קרובות הזמנות לסימולטורים ניידים – ממשחקי טיימר חקלאיים ועד סימולציות פיזיקליות בקנה מידה מלא של תחבורה או בנייה. לכולם יש דבר אחד משותף: מערכות מורכבות ומקושרות שחייבות לעבוד בסנכרון ולספק תחושה של עולם "חי" גם כשהאפליקציה סגורה. אנו מפתחים פרויקטים כאלה במפתח מלא: מהקונספט ועד לשחרור בחנות.
כיצד להבטיח התקדמות אופליין ללא אובדן נתונים?
המאפיין הטכני העיקרי של סימולטורים הוא התקדמות אופליין. השחקן חוזר אחרי 8 שעות, ואירועים אמורים להתרחש: יבולים הבשילו, משאבים נוצרו, שרשראות ייצור הושלמו.
גישה נאיבית: בפתיחת האפליקציה, להריץ לולאה עם צעד deltaTime ולחשב הכל מהשמירה האחרונה. זה עובד עבור מערכות פשוטות. עבור תלותים מורכבים (משאב A נדרש ל-B, B ל-C, ו-A עלול להיגמר באמצע התקופה), יש צורך בסימולציה דיסקרטית עם טיק קבוע.
בצעו את השלבים הבאים:
- שמרו
lastTickTimestampומצב משחק בכל טיק. - בחידוש, חשבו
missedTicks = (now - lastTick) / tickInterval. - הריצו סימולציה עבור
missedTicksצעדים עםtickInterval(לדוגמה, דקה אחת). כל טיק הוא דטרמיניסטי: הפעל ייצור, צריכה, אירועים. - הגבילו
maxOfflineTicks(לדוגמה, 8 שעות = 480 טיקים); עודף אובד או נצבר במאגר.
| שיטה | מורכבות | ביצועים | מתאים ל |
|---|---|---|---|
| לולאה פשוטה בפתיחה | נמוכה | גבוהים | תהליכים ליניאריים פשוטים |
| סימולציה דיסקרטית עם טיקים | בינונית | בינוניים | שרשראות תלויות |
| היברידי (טיקים + טריגרים) | גבוהה | נמוכים | מערכות מורכבות מאוד מונעות אירועים |
למשחקים עם כלכלת שוק (מחירים משתנים כל 15 דקות) אנו משתמשים בגישה היברידית: טיקים לייצור בסיסי ואירועים נפרדים להשפעות חיצוניות. זה מפחית את עומס המעבד ב-30% בהשוואה לסימולציה מלאה.
פיזיקה בסימולטורים של תחבורה ובנייה
לסימולטורים פיזיקליים (אוטובוס, מנוף, בניית כבישים) ב-Unity אנו משתמשים ב-Configurable Joint למפרקים מורכבים + Rigidbody.AddForceAtPosition לשליטה פיזיקלית נכונה. WheelCollider הסטנדרטי טוב לפיזיקת רכב בסיסית, אך המגבלות שלו מופיעות במהירות עבור כלי רכב לא סטנדרטיים.
חשוב: סימולטורים פיזיקליים עם הרבה Rigidbody (30+) בסצנה דורשים כוונון Physics.simulationMode. שימוש ב-SimulationMode.Script (קריאה ידנית Physics.Simulate(fixedDeltaTime)) נותן שליטה מדויקת על סדר הצעדים – קריטי כשפיזיקה משולבת עם לוגיקת משחק.
באנדרואיד, פיזיקה עם Vulkan ו-ARMv8 מהירה משמעותית בזכות אופטימיזציות NEON SIMD ב-PhysX – השגת מהירות עד פי 2 לעומת OpenGL ES 3.0. אם מטרתכם אנדרואיד נמוך עם OpenGL ES 3.0, הגבילו את מספר ה-Rigidbody הפעילים באמצעות Sleep Threshold ו-Rigidbody.IsSleeping().
| פרמטר | Vulkan / ARMv8 | OpenGL ES 3.0 / ARMv7 |
|---|---|---|
| מהירות פיזיקה | גבוהה (NEON SIMD) | בינונית (ללא NEON) |
| מקסימום Rigidbody פעילים | 60+ | 30 |
| simulationMode מומלץ | אוטומטי או Script | Script עם שליטה ידנית |
למה מודל מבוסס סוכנים מתאים לסימולטורים ניהוליים?
לסימולטורים של טייקונים (מסעדה, שדה תעופה, בית חולים) – מודל מבוסס סוכנים. כל NPC הוא סוכן אוטונומי עם Behaviour Tree או Utility AI. Unity NavMesh Agent לתנועה, מערכת משימות מותאמת אישית לפעולות (קבלת הזמנה, משלוח, ניקוי).
עבור 50+ סוכנים, עברו לסוכנים מבוססי ECS באמצעות Unity DOTS: מיקומים ומצבים ב-NativeArray, חישובי נתיבים דרך Job System. Unity DOTS – חבילה רשמית ל-ECS. סוכני DOTS מהירים עד פי 5 מסוכני MonoBehaviour עבור 100+ NPCs. סוכני NavMesh על DOTS עדיין בתצוגה מקדימה, אבל לסימולטורים איזומטריים דו-ממדיים, ניווט אריחים מותאם אישית עם A* Pathfinding Project (פרויקט A* Pathfinding של Aron Granberg) נותן ביצועים טובים פי 3.
דוגמה: התנהגות מלצר בסימולטור מסעדה
סוכן: מלצר. עץ התנהגות: - קבלת הזמנה (מעבר לשולחן, קבלת הזמנה) - מסירת הזמנה למטבח (מעבר למטבח, העברת הזמנה) - איסוף מנות מוכנות (מעבר לאזור הגשה, לקיחת מגש) - הגשת מנות ללקוחות (מעבר לשולחן, מתן מגש) - פינוי כלים (מעבר לשולחן, לקיחת צלחות) במקביל: אם פנוי – קבלת הזמנה חדשה. אם לקוח עוזב ללא תשלום – קריאה למנהל.שמירת מצב מורכב
סימולטורים עם מאות אובייקטים ומצביהם – מאות קילובייטים של נתוני שמירה. JsonUtility של Unity לא יכול להתמודד עם גרפים מורכבים של אובייקטים. אנו משתמשים ב-Newtonsoft.Json עם ממירים מותאמים אישית או MemoryPack לסריאליזציה בינארית (מהיר פי 5–10 לנפחים גדולים). שמירה אוטומטית דרך UniTask.Delay על חוט רקע – סריאליזציה ב-Task.Run, כתיבה לדיסק ב-UniTask.SwitchToMainThread עם השפעה מינימלית. קריסה במהלך כתיבה לא חייבת לפגוע בשמירה הקיימת – כתבו לקובץ זמני, ואז בצעו שינוי שם אטומי.
מה כלול
- מסמך קונספט עם ארכיטקטורה ומדדים.
- אב טיפוס של מכניקות מפתח (סימולציית אופליין, פיזיקה, סוכנים).
- קוד מלא עם הערות ו-README.
- הוראות בנייה (iOS/Android).
- תמיכה לאחר שחרור – תיקון באגים, אופטימיזציה, עדכונים לגרסאות מערכת הפעלה חדשות.
ציר זמן ועלות
ציר זמן פיתוח: מ-4 חודשים לסימולטורים פשוטים ועד 15 חודשים לפרויקטים מורכבים עם פיזיקה. העלות מחושבת באופן אישי – צרו קשר כדי שנוכל להעריך את הפרויקט שלכם תוך יומיים. תקציבים טיפוסיים מתחילים ב-$15,000 לסימולטור בסיסי, עם תוצאות מוכחות מ-7+ שנות ניסיון ו-15+ פרויקטים בחנויות.
אנו מבטיחים עבודה באיכות גבוהה ותקשורת שקופה. פנו אלינו – נדון בפרטי הסימולטור שלכם. קבלו ייעוץ לפרויקט שלכם כבר עכשיו.







