שילוב Photon לריבוי משתתפים במשחקי מובייל

האם משחק ה-Unity הנייד שלכם עם Photon מאבד חיבור בעת מעבר בין רשתות, ומעיף שחקנים מהחדרים? אנו מגדירים אינטגרציית Photon PUN2 כך שההתחברות מחדש מתרחשת בצורה חלקה, וסנכרון האובייקטים אינו מעמיס על התעבורה. הצוות שלנו מספק פרויקטים סוהר—מביקורת קוד קיים ועד ליישום ותמיכה שוטפת—ומבטיח משחק מרובה משתתפים יציב ללא פספוס מועדים.

פיתוח ותמיכה בכל סוגי היישומים הניידים:

יישומים ניידים למידע ובידור
אפליקציות חדשות, משחקים, מדריכים, קטלוגים מקוונים, אפליקציות מזג אוויר, אפליקציות כושר ובריאות, אפליקציות נסיעות, אפליקציות חינוכיות, רשתות חברתיות ומסנג'רים, חידונים, בלוגים ופודקאסטים, פורומים, אגרגטורים
יישומים ניידים למסחר אלקטרוני
חנויות מקוונות, אפליקציות B2B, מרקטפלייסים, בורסות מקוונות, שירותי קאשבק, בורסות, פלטפורמות דרופשיפינג, תוכניות נאמנות, משלוחי מזון ומוצרים, מערכות תשלום.
יישומים ניידים לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, ניהול פרויקטים, כלים לצוותי מכירות, ניהול פיננסי, ניהול ייצור, ניהול לוגיסטיקה ומשלוחים, ניהול משאבי אנוש, מערכות ניטור נתונים
יישומים ניידים לשירותים אלקטרוניים
פלטפורמות מודעות מסווגות, בתי ספר מקוונים, בתי קולנוע מקוונים, פלטפורמות שירות אלקטרוניות, פלטפורמות קאשבק, אירוח וידאו, פורטלים נושאיים, פלטפורמות הזמנות ותזמון מקוונות, פלטפורמות מסחר מקוונות

אלה הם רק חלק מסוגי היישומים הניידים שאנו עובדים איתם, ולכל אחד מהם עשויים להיות מאפיינים ופונקציונליות ספציפיים משלו, המותאמים לצרכים ולמטרות הספציפיות של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
שילוב Photon לריבוי משתתפים במשחקי מובייל
בינוני
~1-2 שבועות

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    869
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1289
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

תארו לעצמכם: משחק ה-Unity הנייד שלכם, שילבתם את Photon, אבל כשעוברים מ-Wi-Fi ל-4G החיבור נופל והשחקנים נזרקים מהחדר. בעיה מוכרת? אנחנו פותרים אותה ברמת הקוד: מגדירים playerTtl, reconnect וסנכרון ידני כך שהתעבורה לא תתבזבז. הרבה מפתחים עושים את אותה טעות: מסתמכים על רכיבי PhotonTransformView ברירת המחדל, מה שמוביל לתעבורה מוגזמת ולבעיות חיבור מחדש. אנחנו מציעים גישה מוכחת שמפחיתה תעבורה פי 3–5 ומספקת חיבורים יציבים במכשירים ניידים. ב-5 שנות עבודה עם Photon, השלמנו 15+ פרויקטים למשחקי מובייל — מלובי פשוטים ועד משימות מורכבות עם matchmaking. אם אתם רוצים להימנע מבעיות טיפוסיות ולחסוך בתעבורה, צרו קשר לשילוב Photon במשחק שלכם.

איך לסנכרן אובייקטים ב-Photon בצורה נכונה?

PhotonView הוא רכיב הסנכרון המרכזי. כל אובייקט רשתי מקבל ViewID. סנכרון מיקום וסיבוב דרך PhotonTransformView הוא ברירת המחדל — זה עובד, אבל שולח עדכונים בכל FixedUpdate, גם אם האובייקט לא זז.

הגישה הנכונה: ליישם IPunObservable.OnPhotonSerializeView עם שליטה ידנית על שליחת נתונים:

public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) {
    if (stream.IsWriting) {
        // Отправляем только если изменилось значимо
        if (Vector3.Distance(_lastSentPosition, transform.position) > 0.01f) {
            stream.SendNext(transform.position);
            stream.SendNext(transform.rotation);
            _lastSentPosition = transform.position;
        }
    } else {
        _networkPosition = (Vector3)stream.ReceiveNext();
        _networkRotation = (Quaternion)stream.ReceiveNext();
    }
}

בצד הלקוח, ה-public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) { if (stream.IsWriting) { // Отправляем только если изменилось значимо if (Vector3.Distance(_lastSentPosition, transform.position) > 0.01f) { stream.SendNext(transform.position); stream.SendNext(transform.rotation); _lastSentPosition = transform.position; } } else { _networkPosition = (Vector3)stream.ReceiveNext(); _networkRotation = (Quaternion)stream.ReceiveNext(); } } שהתקבל לא מוחל ישירות — אנחנו מבצעים אינטרפולציה דרך _networkPosition או Vector3.MoveTowards באמצעות זמן החבילה מ-Lerp. כפי שמצוין ב-תיעוד Photon, גישה זו ממזערת תעבורת רשת מבלי לפגוע בחלקות.

השוואת שיטות סנכרון:

שיטה תעבורה (חבילות/שנייה) השהיה פשטות
PhotonTransformView 20 חבילות (ברירת מחדל) נמוכה גבוהה
IPunObservable (ידני) 1–2 חבילות (רק בעת שינוי) בינונית בינונית

סנכרון ידני מפחית תעבורה פי 3–5. למשחקי מובייל זה קריטי כי Photon מחויב לפי CCU.

איך RPC עובד ומתי להשתמש בו?

PhotonMessageInfo.SentServerTime — לאירועים שחייבים להגיע בוודאות: נזק, מוות, איסוף פריט. photonView.RPC שולח לכולם בחדר כולל השולח. RpcTarget.All שולח לכולם חוץ ממנו.

טעות נפוצה: שימוש ב-RPC לעדכוני מיקום. RPC הוא אמין (התנהגות דמוית TCP), מוסיף תקורה של אישורי קבלה. למיקומים — RpcTarget.Others + PhotonNetwork.SendRate; לאירועים חשובים — RPC.

OnPhotonSerializeView ברירת המחדל היא 20, PhotonNetwork.SendRate היא 10. למובייל, איזון בין תעבורה לחלקות: 15/10.

חיבור וחדרים

PhotonNetwork.ConnectUsingSettings(); // использует PhotonServerSettings asset
void OnConnectedToMaster()
{
    PhotonNetwork.JoinRandomOrCreateRoom(
        expectedCustomRoomProperties: null,
        expectedMaxPlayers: 4,
        matchingType: MatchmakingMode.FillRoom,
        typedLobby: null,
        sqlLobbyFilter: null,
        createIfNotFound: true
    );
}

SerializationRate — מערך של מפתחות הנראים בלובי לסינון. אל תעבירו הכל למאפייני לובי: רק מה שמסונן (אזור, מצב משחק, מפה).

למה שחקנים מתנתקים בעת שינוי רשת?

שינוי רשת. ה-SDK של Photon תומך ב-PhotonNetwork.ConnectUsingSettings(); // использует PhotonServerSettings asset void OnConnectedToMaster() { PhotonNetwork.JoinRandomOrCreateRoom( expectedCustomRoomProperties: null, expectedMaxPlayers: 4, matchingType: MatchmakingMode.FillRoom, typedLobby: null, sqlLobbyFilter: null, createIfNotFound: true ); } — אבל רק אם לחדר יש RoomOptions.CustomRoomPropertiesForLobby. ברירת המחדל היא PhotonNetwork.ReconnectAndRejoin(), השחקן נחשב מנותק מיד. למובייל: הגדירו playerTtl (10 שניות לחיבור מחדש).

iOS ברקע. כשעוברים לרקע, iOS מנתק באגרסיביות חיבורי רשת. Photon יתנתק תוך 5–10 שניות. למשחקים שבהם זה קריטי — השתמשו ב-playerTtl = 0 (בזהירות, אפל עלולה לדחות) או ניתוק אלגנטי.

תעבורה. Photon Realtime מחויב לפי CCU (משתמשים בו-זמנית). 20 CCU בחינם. בעת שילוב, כדאי להוסיף Photon Dashboard לניטור — אפשר לראות מספר הודעות, בתים, שיאים. אנחנו כוללים בעבודה שלנו הגדרת Photon Dashboard ואופטימיזציית קוד להפחתת תעבורה ב-30–50%.

טעויות טיפוסיות בשילוב Photon במכשירים ניידים
  1. חוסר playerTtl — שחקנים עוזבים את החדר מיד בניתוק זמני.
  2. שימוש ב-PhotonTransformView לכל האובייקטים — תעבורה גבוהה שלא לצורך.
  3. קריאות RPC תכופות למיקומים — מגביר השהיה ועומס.
  4. התעלמות מהגדרות SendRate ו-SerializationRate — אפשר להוריד ללא פגיעה באיכות.

קל לתקן את הטעויות האלה במהלך הפיתוח. הזמינו ביקורת על הפרויקט שלכם כדי לזהות אותן לפני השחרור.

מה כוללת העבודה שלנו לשילוב Photon?

  • ביקורת על היישום הקיים (אם יש)
  • הגדרת SDK של Photon וקונפיגורציה (אזורים, חדרים, TTL)
  • יישום סנכרון דרך IPunObservable (ניהול תעבורה ידני)
  • שילוב matchmaking עם מאפיינים מותאמים אישית
  • הגדרת RPC ואירועים אמינים
  • אופטימיזציה למכשירים ניידים (חיבור מחדש, תעבורה, רקע)
  • בדיקות על 10+ מכשירים אמיתיים ברשתות שונות
  • מתן תיעוד ותמיכה לאחר הפריסה

לוח זמנים ועלות

שילוב בסיסי של Photon Realtime עם חדרים, סנכרון מיקום ו-RPC: בין 3 ל-7 ימים. מערכת מלאה עם matchmaking, מאפיינים מותאמים אישית ואופטימיזציה למובייל: בין 2 ל-3 שבועות. העלות מחושבת באופן אישי — נעריך את הפרויקט שלכם תוך יום אחד.

מוכנים לדון בפרטים? צרו קשר לייעוץ והערכה מדויקת. פנו אלינו לשילוב Photon אמין במשחק הנייד שלכם.