בפרויקט MazeMates מימשתי מערכת מדריך (Tutorial) מלאה ומערכת מולטיפלייר מבוססת Unity Netcode for GameObjects ו־Unity Relay, כך שהמשחק עובד גם ב־WebGL וניתן להרצה דרך itch.io ללא צורך בשרת ייעודי.
המימוש מאפשר:
- חוויית הדרכה מובנית וברורה לשני שחקנים (Traveller ו-Navigator)
- סנכרון מלא של מצב המשחק בזמן אמת
- חיבור שחקנים דרך Join Code בדפדפן
רכיב מרכזי האחראי על ניהול רצף המדריך.
תפקידים עיקריים:
- טעינת שלבי המדריך (TutorialSteps)
- הצגת הודעות הדרכה לשחקנים
- נעילה ושחרור של שליטה (תזוזה, פעולות, UI)
- האזנה לאירועים במשחק והתקדמות בין שלבים
- סנכרון מצב המדריך בין Client ל-Server באמצעות Netcode
ה-TutorialManager הוא NetworkBehaviour ולכן:
- רץ בצורה עקבית אצל Host ו-Clients
- מבטיח שכל שחקן נמצא באותו שלב מדריך
כל שלב במדריך מיוצג ע״י אובייקט עצמאי.
שדות עיקריים:
stepId– מזהה ייחודי לשלבdescription– תיאור פנימיconditionType– תנאי סיום השלב- הודעות ייעודיות:
- לשחקן Traveller
- לשחקן Navigator
יתרונות הגישה:
- הפרדה מלאה בין לוגיקה לתוכן
- ניתן לערוך / להוסיף שלבים בלי לגעת בקוד
- קל לבדיקה ולתחזוקה
המדריך מתקדם לפי תנאים מוגדרים מראש, כגון:
- תזוזת שחקן
- אינטראקציה עם דלת / פאזל
- פעולה ייחודית של ה-Navigator
- אירוע מותאם אישית (Custom Event)
התנאים מנוהלים בצורה דטרמיניסטית כדי למנוע חוסר סנכרון בין שחקנים.
המשחק מבוסס על:
NetworkManagerNetworkObjectNetworkBehaviour- RPCs (ClientRpc / ServerRpc)
מאפיינים:
- חלוקת תפקידים: Host = Traveller, Client = Navigator
- Spawn מסונכרן של שחקנים ואובייקטים
- סנכרון מצב משחק, מדריך ומשאבים
כדי לאפשר חיבור דרך WebGL (דפדפן), נעשה שימוש ב-Unity Relay.
מה זה נותן:
- אין צורך בפתיחת פורטים
- עובד מאחורי NAT / Firewall
- אידיאלי ל-itch.io
זרימת חיבור:
- Host יוצר Relay Allocation
- מתקבל Join Code
- Client מזין Join Code ומתחבר
- Unity Netcode מנהל את החיבור וה-Spawn
נוסף למשחק חדר Navigator תלת־ממדי ופונקציונלי לחלוטין, המשמש כעמדת שליטה ייעודית לשחקן ה-Navigator.
מאפייני החדר:
- סביבה תלת־ממדית מלאה ונפרדת מהמבוך
- מצלמה ייעודית ל-Navigator עם זוויות תצוגה קבועות
- מסכי תצוגה (TV / Panels) המציגים מידע מהמבוך בזמן אמת
- אינטראקציה ישירה עם אלמנטים במשחק:
- פתיחה ונעילה של דלתות
- הפעלת פאזלים
- שימוש במשאבים ייחודיים (כגון עזרה לשחקן השני)
- סנכרון מלא עם מצב ה-Traveller באמצעות Netcode
החדר משמש כ-Control Room, ומחזק את האסימטריה בין השחקנים:
- ה-Traveller פועל מתוך המבוך בגוף ראשון
- ה-Navigator מנהל, מכוון ומסייע מבחוץ בסביבה תלת־ממדית אינטראקטיבית
בוצעו התאמות ייעודיות:
- שימוש ב-Unity Relay במקום Transport ישיר
- וידוא שכל ה-Scenes מוגדרות כ-Network Scenes
- בדיקות Spawn ב-Editor וב-Build
- הימנעות מתלויות שאינן נתמכות בדפדפן
התוצאה:
- אותו קוד עובד גם ב-Editor וגם ב-WebGL
- ניתן לשחק ישירות דרך itch.io
נוספו בדיקות Edit Mode לווידוא:
- ייחודיות
stepId - תקינות הגדרות
TutorialStep - מניעת מצבים לא חוקיים במדריך
בדיקות אלו עוזרות לזהות תקלות מוקדם ולשמור על עקביות המערכת.
בפרויקט זה מימשתי:
- מערכת Tutorial מודולרית ומסונכרנת
- Multiplayer מלא לשני שחקנים
- חדר Navigator תלת־ממדי אינטראקטיבי
- חיבור אמין דרך Unity Relay
- תמיכה מלאה ב-WebGL ו-itch.io
המבנה מאפשר המשך פיתוח קל, הוספת שלבים, והרחבת המולטיפלייר ללא שינויי ליבה.