מה זה בדיקות אוטומטיות של מכניקות משחק ליבה?
בדיקות ידניות של מכניקות עובדות כשמהדורות יוצאות פעם בחודש. ככל שהצוות גדל ותדירות הבנייה עולה, QA ידני הופך לצוואר בקבוק: הבודק לא יכול לבדוק רגרסיה אחרי כל קומיט — באגים בפיזיקה או בלוגיקת התקדמות מגיעים למהדורה. במשך 5 שנים, הקמנו בדיקות אוטומטיות ל-50+ פרויקטים ברמות מורכבות שונות ואנחנו מבטיחים כיסוי יציב. בדיקות PlayMode תופסות פי 3 יותר באגים מבדיקות ידניות, ואוטומציה חוסכת עד 70% מזמן ה-QA. לדוגמה, חבילת הבדיקות הבסיסית שלנו מתחילה ב-$1,500 וסט מלא עם CI מ-$5,000 — מספקת החזר ROI פי 5 תוך שישה חודשים.
הבעיה הנפוצה ביותר היא CharacterController שבור לאחר שינוי slopeLimit או stepOffset. בעורך הכל עובד, גם בבדיקות ידניות, אבל בשילוב של מהירויות וזוויות גאומטריה זה נכשל. בדיקת PlayMode עם קלט פרמטרי מכסה באופן שיטתי מקרי קצה. אותו סיפור עם Animator: מעברים נשברים תחת רצף ספציפי של טריגרים — בדיקה ידנית של תרחישים כאלה היא לא ריאלית.
אזור הסיכון השני הוא לוגיקת משחק עם מצבים. מכונת דמות או GameManager עם דגלי סשן מקבלים בקלות מעבר לא חוקי (Idle → Attack ללא Ready) בהינתן רצף קלט מסוים. בדיקה ידנית אחרי כל push לוקחת שעות, בעוד שבדיקה אוטומטית תופסת את זה בשניות. כמו כן, מכניקת מלאי נשברת לעיתים קרובות: סלוט לא נכון אחרי גרירה או אובדן פריט בשמירה.
איך להקים בדיקות אוטומטיות של מכניקות משחק ליבה
הסטאק העיקרי שלנו ל-Unity הוא Unity Test Framework (חבילה com.unity.test-framework) עם שני מצבים: EditMode Tests ו-PlayMode Tests.
EditMode Tests — הגדרה לבדיקות אוטומטיות
מתאימים ללוגיקה טהורה: נוסחאות איזון, ניתוח נתונים, חישובי סטטיסטיקות, מחוללי רמות. הם רצים מהר (בערך שנייה אחת לבדיקה) ומבוצעים ב-CI ללא GPU. הם יכולים לכסות עד 80% מהקוד אם הארכיטקטורה מפרידה MonoBehaviour. לדוגמה, ההגדרה שלנו לבדיקות אוטומטיות של מכניקות משחק ליבה מתחילה לעיתים קרובות עם בדיקות EditMode כדי לכסות אריתמטיקה ואימות נתונים.
PlayMode Tests
נחוצים לכל מה שקשור לפיזיקה (Rigidbody, CharacterController), אנימציות (Animator, Blend Tree), התנגשויות ו-coroutines. הבדיקה ממתינה ל-FixedUpdate ticks אמיתיים. לפי הנתונים שלנו מ-15 פרויקטים בשנתיים האחרונות, בדיקות PlayMode תופסות פי 3 יותר באגים מבדיקות אנושיות. סט של 200 בדיקות תופס עד 90% משגיאות רגרסיה — עלייה של פי 4 בשיעור הגילוי בהשוואה ל-QA ידני.
| פרמטר | EditMode | PlayMode |
|---|---|---|
| זמן ביצוע | ~שנייה אחת לבדיקה | ~5–15 שניות לבדיקה |
| תלות בסצנה | לא | כן |
| כיסוי פיזיקה | לא | כן |
| ריצה ב-CI ללא GPU | כן | לא (דורש -nographics) |
למכניקות VR, אנחנו משתמשים ב-XRSimulatedController ו-XRSimulatedHMD — סימולציה של ידיים וראש ללא HMD פיזי. זה מאפשר להריץ בדיקות עבור XRGrabInteractable ו-XRRayInteractor ב-CI על סוכן headless. לפרויקטי AR — AR Foundation עם trackers מדומים.
למה אינטגרציית CI היא חובה
ללא CI, בדיקות הופכות לפעילות חד-פעמית. אנחנו מגדירים ביצוע דרך Unity Test Runner CLI: unity -batchmode -runTests -testPlatform EditMode -testResults results.xml. התוצאות מנותחות ל-JUnit XML עבור GitHub Actions, GitLab CI, או TeamCity. התצורה כוללת ניהול רישיונות (Unity License Server או Unity Build Automation) — שלב סטנדרטי כדי שלא יחסום את ה-pipeline.
עבור Unreal Engine אנחנו משתמשים ב-Automation System (FAutomationTestBase, IMPLEMENT_SIMPLE_AUTOMATION_TEST) — אותו עיקרון, סימון שונה. שני המנועים מאפשרים להגדיר ריצת סט מלא לילית ובדיקת Smoke מהירה על כל קומיט.
מה כלול בהקמת בדיקות
- ביקורת קוד — ניתוח צימוד קוד וצורך ב-DI (Zenject, VContainer). זיהוי מקומות שבהם לוגיקה קשורה ל-MonoBehaviour.
- חילוץ יחידות ניתנות לבדיקה — רפקטורינג של לוגיקה מ-MonoBehaviour למחלקות C# טהורות. לדוגמה, חילוץ חישוב נזק למחלקה נפרדת ללא תלות ב-Transform.
- כתיבת בדיקות — התחלה עם סט smoke של נתיבים קריטיים (תנועה, קפיצה, ירי), הרחבה עם מקרי קצה (זוויות שיפוע, ערכי אפס, באגים של off-by-one).
- הגדרת CI — ביצוע בדיקות, דוחות, רישיונות. חשוב: לבדיקות PlayMode ב-CI, השתמשו באפשרות
-nographicsובתצוגה וירטואלית (Xvfb על Linux). - תיעוד — איך להוסיף בדיקות חדשות כך שהצוות יוכל לשמור על כיסוי באופן עצמאי. אנחנו מספקים תבנית בדיקה ומדריך סגנון שמות.
דוגמת בדיקת PlayMode לדמות
[UnityTest]
public IEnumerator Character_Move_WithSlope_CorrectSpeed()
{
var character = new GameObject().AddComponent<CharacterController>();
character.slopeLimit = 45f;
yield return null; // проверка скорости при движении вверх по склону
} מקרה בוחן: פרויקט VR מהפרקטיקה שלנו
בפרויקט של אחד הלקוחות שלנו, מצאנו באג ב-XRRayInteractor: בזווית אחיזה ספציפית, האובייקט עבר טלפורטציה לאינסוף. בדיקות ידניות לא שחזרו את זה — נדרשה הסתברות של 2%. בדיקת PlayMode עם 1000 זוויות אקראיות תפסה את השגיאה באופן עקבי תוך 3 שניות. זמן QA שנחסך — כ-200 שעות בחודש (שווה ערך ל-$8,000 בעלויות עבודה). לאחר יישום הבדיקות, הכיסוי גדל מ-15% ל-80% במכניקות קריטיות, ובאגים במהדורות ירדו פי 4. מקרה זה מהתיק שלנו מדגים כיצד בדיקות אוטומטיות של מכניקות משחק ליבה מחזירות את ההשקעה.
| היקף המשימה | זמן משוער | עלות |
|---|---|---|
| הקמת Test Framework + 10–15 בדיקות בסיסיות | 3–5 ימים | $1,500 |
| סט בדיקות מלא (50–80 בדיקות) + CI | 2–4 שבועות | $5,000 |
| פרויקט VR עם בדיקות XRSimulated | 3–5 שבועות | $7,000 |
התמחור נקבע באופן אישי לאחר ניתוח ארכיטקטורת הפרויקט. אם אתם צריכים מערכת בדיקות אוטומטיות אמינה, צרו קשר להערכת פרויקט. נעריך לוחות זמנים והיקף תוך יום. קבלו ייעוץ לפרויקט שלכם — נעזור לבחור את סט הבדיקות האופטימלי ואת ה-CI pipeline.





