התלונה "המשחק נתקע" אינה אבחנה. הוא נתקע כי המעבד לא עומד בקצב של כרטיס המסך, כי ה-GC אוסף זבל, כי הטקסטורות לא נכנסות ל-VRAM, כי ה-shader כבד מדי עבור Adreno 618, או כי ההתנהגות של Metal השתנתה ב-iOS. ללא פרופיילר, זה ניחוש. עם פרופיילר—מספרים קונקרטיים ואשם קונקרטי.
פרופיילנו מעל 100 משחקי מובייל—מהיפרק'ז'ואל ועד פרויקטים של AA. עם 5+ שנים בשוק, בנינו מאגר של בעיות טיפוסיות ופתרונות מוכנים. במאמר זה, אנו מפרקים כיצד אנו מוצאים צווארי בקבוק ומה כולל התפוקה. אם אתם זקוקים להערכת ביצועים מהירה של המשחק שלכם, צרו קשר—אנו יכולים להעריך את הפרויקט שלכם תוך 1-2 ימים.
כיצד אנו מפרופיילים ביצועי משחקי מובייל
התהליך כולל מספר שלבים. ראשית, אנו בוחרים את מכשיר היעד—זה שבו המשחק נתקע. לאחר מכן אנו מצמידים פרופיילרים ואוספים נתונים לפחות 10 דקות של משחק כדי ללכוד throttling. לאחר הניתוח, אנו מספקים דוח עם מדדים ספציפיים.
Unity Profiler הוא נקודת ההתחלה. מצב Deep Profile מאט את המשחק אך מציג את כל הקריאות עם הקצאות. הוא מתחבר ל-build דרך Development Build + Autoconnect Profiler או דרך USB. אנו תמיד מפרופיילים על המכשיר, לא על העורך: לעורך יש GC שונה, render backend שונה והשהיות שונות.
סמנים מרכזיים ב-CPU trace:
-
GC.Collect— קפיצות של איסוף זבל. אם >1 ms ומתרחש יותר מפעם בכמה שניות, יש בעיית הקצאה בנתיב חם. -
Camera.Render→RenderForwardOpaque.Render— עומס GPU ראשי. -
Physics.Processing— פיזיקה. אם >3 ms עם תקציב של 60 FPS, יש יותר מדי קולידרים או הגדרות Fixed Timestep לא אופטימליות.
Android GPU Inspector (AGI) — עבור אנדרואיד על Qualcomm או Mali. הוא מציג זמן GPU לכל draw call, בועות בצנרת, ניצול ALU. קריטי להבנת מה כבד על ה-GPU: גיאומטריה, overdraw, או fill rate. לפי תיעוד AGI, בועות בצנרת יכולות להוות עד 40% מזמן הפריים במכשירים ישנים יותר.
Xcode Instruments — עבור iOS. אנו משתמשים ב-Metal System Trace ל-GPU, Time Profiler ל-CPU, ו-Allocations לזיכרון. Thermal State ב-Instruments מראה מתי המכשיר מתחיל throttling עקב התחממות יתר—סיבה נפוצה ל-FPS לא יציב לאחר כמה דקות של משחק.
Snapdragon Profiler — חלופה ל-AGI עבור Adreno. פשוט יותר להגדרה במצב snapshot, מציג היטב את יעילות ה-shader. בהשוואה ל-AGI, AGI מדויק פי שניים בזיהוי בועות בצנרת.
כיצד להבדיל בין CPU-bound ל-GPU-bound
סימן ל-CPU-bound: VSync ממתין פחות מ-1 ms ל-GPU (ה-GPU מסיים מוקדם), אך הפריים עדיין לוקח 20+ ms. ה-CPU הוא צוואר הבקבוק.
אשמים נפוצים: לוגיקה כבדה ב-Update(), שאילתות LINQ בנתיבים חמים (כל אחת יוצרת הקצאה), או FindObjectsOfType בתוך Update (O(n) על כל אובייקטי הסצנה). ב-Memory Profiler, זה נראה כהקצאת GC.Alloc קבועה של כמה KB בכל פריים.
פתרון: מעבר ל-Data-Oriented Technology Stack (DOTS/ECS) עבור אובייקטים המוניים, או לפחות שמירת תוצאות במטמון, החלפת LINQ בלולאות מפורשות, ושימוש בארכיטקטורה מונעת אירועים במקום polling.
סימן ל-GPU-bound: זמן GPU גבוה, אך מספר Draw Call נמוך. ב-AGI, זמן Fragment Shader גבוה נראה לעין.
Overdraw—ציור אותם פיקסלים מספר פעמים עקב אובייקטים שקופים חופפים. ב-Unity, ניתן לראות זאת בתצוגת Overdraw של Scene View. אזורים אדומים כהים פירושם שכל פיקסל מצויר 4+ פעמים. נפוץ במשחקי 2D עם שכבות חלקיקים רבות.
פתרון: מיון אובייקטים שקופים, הגבלת מספר החלקיקים הפעילים בו-זמנית, החלפת ספיירים שקופים באטומים היכן שאפשר מבחינה אמנותית.
מדוע Thermal Throttling היא בעיה נפוצה
באייפון, לאחר כמה דקות של משחק אינטנסיבי, טמפרטורת המעבד מגיעה לסף, ו-iOS מפחיתה את תדר ה-CPU/GPU. ה-FPS יורד מ-60 ל-40–45 ללא כל שינוי בעומס במשחק. זה נבדק דרך .serious (iOS)—ב-.critical או .critical, כדאי להפחית את איכות הגרפיקה מראש.
באנדרואיד, מנגנון דומה הוא PowerManager.getThermalHeadroom() (API 29+). ב-70% מהמקרים, throttling מתחיל לאחר 5-7 דקות של משחק.
מה כולל דוח הפרופיילינג שלנו
לאחר פרופיילינג, אנו מספקים דוח עם סמנים ספציפיים: מה נתקע, על איזה מכשיר זה מתרחש, כמה ms זה לוקח, והמלצת תיקון עם עדיפות. לא "לייעל פיזיקה" אלא "FixedUpdate ב-EnemyAI.cs קורא ל-Physics2D.OverlapCircleAll כל 20 ms עם 200 אויבים פעילים—סה"כ 4.2 ms CPU; לשכתב ל-Physics2D.OverlapCircleNonAlloc עם מאגר תוצאות."
מבנה דוח לדוגמה
- בעיה: קפיצת GC כל 5 שניות (20 ms) - סיבה: הקצאות מחרוזות ב-Update() - המלצה: החלפה ב-StringBuilder, עדיפות גבוהה - השפעה צפויה: זמן GC יקטן ל-2 msבנוסף, אנו מספקים:
- גישה ליומני פרופיילינג וצילומי מסך,
- הדרכת צוות על שימוש בכלים,
- תמיכה במהלך יישום התיקונים למשך 10 ימי עבודה.
ציר זמן: ביקורת ודוח בשלושה ימי עבודה. יישום תיקונים על סמך התוצאות הוא הערכה נפרדת החל מ-5 ימים.
| כלי | פלטפורמה | מטרה עיקרית |
|---|---|---|
| Unity Profiler | iOS/Android | פרופיילינג CPU ו-GC |
| Android GPU Inspector | Android (Qualcomm/Mali) | צנרת GPU, יעילות shader |
| Xcode Instruments | iOS | GPU, CPU, זיכרון, מצב תרמי |
| Snapdragon Profiler | Android (Adreno) | חלופה ל-AGI עבור Adreno |
השוואת כלים לדיוק זיהוי צווארי בקבוק:
| תכונה | Unity Profiler | AGI | Xcode Instruments |
|---|---|---|---|
| CPU bound | מצוין | אין | מצוין |
| GPU bound | בינוני | מצוין | מצוין |
| Throttling תרמי | עקיף | אין | ישיר |
| Overdraw | בינוני | מצוין | טוב |
אנו מבטיחים שכל מדידה מדויקת—כל התוצאות ניתנות לשחזור על מכשירים זהים. מהנדסים מוסמכים (Unity Certified Developer, Apple Certified iOS Developer) מבצעים את הביקורת. ניסיון: 5+ שנים ו-100+ פרויקטים. קבלו ייעוץ לפרויקט שלכם—צרו קשר כדי לדון בפרטים.







