דמיינו שני שחקנים עם משקפי Quest 3 תופסים את אותו קובייה וירטואלית בו-זמנית. ללא סנכרון רשת תקין, אחד רואה קפיצה, השני רואה חוסר התאמה במיקום, והאינטראקציה המשותפת הופכת לכאוס. אנחנו פותרים את זה כבר למעלה מ-5 שנים, עם עשרות פרויקטים מסחריים של VR מרובה משתתפים תחת החגורה. צרו קשר כדי לדון בתרחיש שלכם בפירוט.
אנחנו מתכננים מודולי מרובה משתתפים מותאמים אישית לחוויות VR משותפות. סנכרון של שתי ידיים, ראש, אחיזות ואובייקטים פיזיקליים עם השהיה של 50–80 אלפיות השנייה הוא המומחיות שלנו. על חומרת הנייד של Quest עם רוחב פס מוגבל, אנחנו שומרים על 72 FPS יציבים אפילו עם 4–8 שחקנים. תקציב טיפוסי למודול כזה נע בין $10,000 ל-$25,000, כולל בדיקות עומס.
פתרונות רשת מוכנים—Photon Fusion, Photon PUN2, Mirror, Netcode for GameObjects (NGO)—לכל אחד יש את הפשרות שלו עבור VR. אנחנו בוחרים את המחסנית לפרויקט שלכם: Mirror לכותרי אינדי קטנים, Photon Fusion במצב Server לגדולים יותר. אנחנו מעריכים את הפרויקט שלכם ללא תשלום ומציעים את הארכיטקטורה האופטימלית.
למה מצב Server עדיף על מצב Shared עבור VR
Photon Fusion מציע שני מצבים: Shared (עמית-לעמית עם מארח אחד) ו-Server (שרת Photon ייעודי). עבור VR, מצב Server עדיף אפילו לפרויקטים קטנים יותר.
במצב Shared, שחקן אחד משמש כמארח ומנתב את כל התעבורה. ב-VR זה אומר: אם המארח מזיז את ידיו (מה שקורה 72–90 פעמים בשנייה), הנתונים שלו מעובדים מקומית, בעוד ששחקנים אחרים מקבלים אותם עם ה-RTT של המארח. עם חיבור מארח לא יציב, כל הסשן סובל. מצב Server מבטל את נקודת הכשל הבודדת הזו—Photon Cloud מטפל בממסר ובניהול מצב סמכותי.
הגדרה קונקרטית: NetworkRunner עם GameMode.Server, FixedUpdateNetwork במקום Update לפיזיקה דטרמיניסטית. עבור טרנספורמציות ידיים, אנחנו משתמשים ב-NetworkTransform עם InterpolationDataSource.Predicted—חיזוי בצד הלקוח מפחית את ההשהיה הנתפסת.
לפי תיעוד Photon, מצב Server מספק את ההשהיה הנמוכה ביותר עבור חוויות משותפות בזמן אמת.
איך לסנכרן אווטארים עם רוחב פס מינימלי
האתגר הטכני המרכזי של אווטארי VR במרובה משתתפים הוא שלשחקנים מרוחקים יש אווטאר בגוף מלא עם אנימציה, בעוד שהשחקן המקומי רואה רק ידיים בגוף ראשון. אנחנו צריכים לסנכרן את מיקום הראש ושתי הידיים, ואז לשחזר את תנוחת הגוף עבור אחרים.
הפתרון שלנו הוא Full Body IK עם מספר מוגבל של נקודות בקרה. ב-Unity, אנחנו משתמשים בחבילת Animation Rigging עם TwoBoneIKConstraint לזרועות ו-MultiParentConstraint לפלג הגוף העליון. הראש (מיקום HMD) מניע את פלג הגוף העליון דרך היסט הוריסטי היוריסטי (~0.3 מ'), ואז הזרועות דרך IK למיקומי הבקרים. זה לא מדויק פיזית אבל נראה משכנע בתנועה רגילה.
תעבורת רשת: שלושה טרנספורמציות (ראש + שתי ידיים) × 7 מספרי נקודה צפה (מיקום + סיבוב) × 90 פריימים לשנייה = ~7.5 KB/s לשחקן ללא דחיסה. עם NetworkTransform וקוונטיזציה ב-Photon Fusion, זה יורד ל-1.5–2 KB/s. עם 4–8 שחקנים, רוחב הפס נשאר ניתן לניהול.
איך ליישם אינטראקציית אחיזה במרובה משתתפים: שלב אחר שלב
- צרו
NetworkObjectעםRigidbodyו-NetworkTransform. - בצד הלקוח, הירשמו לאירוע האחיזה (לדוגמה,
OnTriggerEnter). - בקשו
StateAuthorityדרךRequestStateAuthorityעבור האובייקט הזה. - בצעו סימולציית תנועה בצד הסמכותי; שחקנים אחרים מבצעים אינטרפולציה של המיקום.
- בשחרור, החזירו
StateAuthorityלשרת.
סנכרון אובייקטים פיזיקליים
פריטים שניתן לאחוז, אובייקטים לזריקה, דלתות—כולם rigidbodies פיזיקליים. הבעיה הבסיסית: שני לקוחות מדמים פיזיקה בנפרד, והתוצאות מתפצלות. שחקן אחד זורק קובייה לקיר—היא קופצת ימינה בצד שלו, שמאלה בצד של אחר.
גישה 1: פיזיקה סמכותית על השרת. כל Rigidbody מדומים רק על ה-StateAuthority (במונחי Photon Fusion, זה שתפס את האובייקט). שחקנים אחרים מבצעים אינטרפולציה של המיקום. בעת אחיזה, האובייקט "מועבר" למחזיק החדש דרך RequestStateAuthority. חיסרון: טלפורטציה קלה נראית בהעברה אם המיקומים נסחפו.
גישה 2: פיזיקה בצד הלקוח עם פיוס. כל לקוח מדמה פיזיקה מקומית; השרת משדר מעת לעת מצב סמכותי. אם הפער חורג מסף מסוים, Lerp רך מזיז את האובייקט לכיוון המיקום הסמכותי. זה נראה טוב יותר אבל קשה יותר ליישום ללא חפצים.
בפועל, משחקי VR עם אינטראקציות פיזיקליות משתמשים בגישה 1, בתוספת אובייקט "רפאים"—עותק שקוף דק שמראה את המיקום הסמכותי בזמן שהמשטח הראשי מבצע אינטרפולציה. האופטימיזציות שלנו מפחיתות את עלויות שרת הענן ב-30–40%.
השוואת פתרונות רשת עבור VR
| פתרון | סוג | מתאים ל-VR | תכונות |
|---|---|---|---|
| Photon Fusion | Server/Shared | כן | חיזוי, קוונטיזציה, פיזיקה סמכותית |
| Mirror | סמכות | בתנאי | קוד פתוח, פשוט, ללא תמיכת VR מובנית |
| Netcode for GameObjects | סמכות שרת | כן | תקן Unity, אינטגרציית UGS |
| Photon PUN2 | P2P | מוגבל | מופסק, השהיית מארח גבוהה |
מה כלול בעבודה
- ארכיטקטורת לוגיקת רשת ובחירת מחסנית
- סנכרון טרנספורמציות ואווטארים בסיסי עם IK
- סנכרון אובייקטים פיזיקליים (ניתנים לאחיזה, לזריקה)
- אופטימיזציית תעבורה (קוונטיזציה, LOD לאווטארים)
- בדיקות עומס (עד 8 שחקנים)
- תיעוד והדרכת צוות
תהליך הפיתוח
מודול מרובה משתתפים הוא משימה נפרדת שעדיף לתכנן לתוך הארכיטקטורה מההתחלה, ולא להרכיב על משחק חד-שחקן גמור. התאמת מרובה משתתפים לפרויקט VR חד-שחקן קיים מוסיפה בדרך כלל 50–70% יותר מאמץ בהשוואה לתכנון ראשוני עם מרובה משתתפים בחשבון.
שלבים: בחירת מחסנית רשת וארכיטקטורה → סנכרון טרנספורמציות בסיסי → אווטארים עם IK → סנכרון אובייקטים פיזיקליים → לוגיקת משחק (ניקוד, מצבים, סיבובים) → בדיקות עומס → אופטימיזציית תעבורה.
| היקף המשימה | ציר זמן משוער |
|---|---|
| מרובה משתתפים בסיסי (2–4 שחקנים, טרנספורמציות בלבד) | 2–4 שבועות |
| אווטארים מלאים עם IK + פיזיקת אובייקטים | 6–10 שבועות |
| מרובה משתתפים בקנה מידה גדול (8+ שחקנים, לוגיקה מותאמת) | 3–6 חודשים |
התמחור נקבע לאחר ניתוח דרישות: מספר שחקנים, סוג אינטראקציה, פלטפורמה (Quest עצמאי, PCVR, חוצה-פלטפורמות). צרו קשר כדי לדון בפרטים ובצירי זמן לפרויקט שלכם. בקשו פיתוח מודול—אנחנו נעריך את הפרויקט שלכם ללא תשלום.
אנחנו מפתחים VR מרובה משתתפים כבר למעלה מ-5 שנים, עם יותר מ-10 פרויקטים מסחריים עבור Quest ו-PCVR.





