רקע
Pixonic, צוות של מפתחי משחקי וידאו שהמשרדים הראשיים שלו נמצאים במוסקבה, מתגאה לנצל כל הזדמנות לשדרג את האפליקציות לנייד ולהגיע ליותר לקוחות קהל של גיימרים. אחד מהמשחקים הידועים ביותר של החברה הוא War Robots, משחק PvP (שחקן נגד שחקן) ל-12 משתתפים, שבו השחקנים מפעילים רובוטים מותאמים אישית ומנהלים דו-קרב איתם בשדה קרב חי.
War Robots, שפורסמה בשנת 2014, תוכננה במקור למכשירי Android מדור ראשון עם תנועה מבוססת משטח מגע ללא קלט של עכבר. חברי צוות Pixonic, שהם גיימרים נלהבים בעצמם וזיהו שהאפליקציה זקוקה לכמה שיותר כדי לספק חוויית משתמש מעולה במגוון רחב יותר של מכשירים, כמו מחשבים ניידים וטאבלטים. כבר אפשר היה לשחק ב-War Robots בכל מכשיר Android, כי ב-Chromebooks פועלת גרסה מלאה של מסגרת Android בתוך קונטיינר. לאחר שערכו עוד כמה שינויים בקוד, Pixonic הצליחה היתרון של ChromeOS בכל היכולות שלו.
כך צוות Pixonic ביצע אופטימיזציה של War Robots כדי לספק חוויות אופטימליות במסכים גדולים יותר.
מה הם עשו
כדי להתחיל לבצע את האופטימיזציות, Pixonic הוסיפה תג מטא-נתונים בקובץ AndroidManifest.xml שמציין למערכת שהיא מוכנה לתמיכה מלאה ב-ChromeOS ושצריך להשבית את הדמיית המגע:
<uses-feature android:name="android.hardware.type.pc" android:required="false" />
Pixonic גם הגדיר את minSdk של האפליקציה ל-24, כך שמנוע המשחקים Unity לקבל באופן ישיר קליקים על העכבר ואת כל אירועי ה-API שקשורים לתנועה (לא רק אירועים בלוח מגע).
תמיכה במקלדת ועכבר
במשחקי PvP בגוף שלישי כמו War Robots, קל יותר לזוז ולכוון באמצעות מקלדת ועכבר, במיוחד במכשירים עם מסך גדול יותר. בשלב הבא, היה שכתוב הקוד לתמיכה במקלדת ועכבר במצב קרב תוך שמירה על פקדי מסך המגע.
כדי לספק את הפקדים הנכונים בזמן הנכון, הצוות של Pixonic כתב קוד חדש כדי לבדוק את מצב הגיימפליי הנוכחי של המשתמש:
@Override
public void onConfigurationChanged(Configuration newConfig) {
boolean hasQwertyKeyboard = newConfig.keyboard == Configuration.KEYBOARD_QWERTY && newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO;
try {
UnityPlayer.UnitySendMessage("Receiver", "ConfigChange", new JSONObject().put("keyboard", hasQwertyKeyboard).toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
אם זוהתה מקלדת QWERTY, המשחק יתאים את עצמו למצב מחשב שולחני. ג'ויסטיק התנועה בפינה הימנית התחתונה נעלם, וכל הפריטים זמינים פעולות (כמו מיון בכלי נשק, יכולות ותפריטים) מסומנות בתווית באמצעות מקשי הקיצור.
אם לא מזוהה מקלדת, ג'ויסטיק התנועה יופיע בפינה הימנית התחתונה ומקשי הקיצור מוסתרים מלחצני התפריט בפינה השמאלית התחתונה.
בשלב הבא, ב-Pixonic רצו לוודא שהסמן יישאר מוסתר כששחקן משתמש כדי לסובב את המצלמה. על ידי טירגוט ל-Android 7.0 (רמת API 24) או גבוה יותר, הצוות יכול להגדיר כל סמל של מצביע. במקרה הזה, הצוות השתמש מפת סיביות שקופה להפיכת הסמן לבלתי נראה במהלך המשחק:
public boolean setPointerVisibility(boolean visible) {
View = activity.findViewById(android.R.id.content);
view.setPointerIcon(PointerIcon.getSystemIcon(activity, visible ? PointerIcon.TYPE_DEFAULT : PointerIcon.TYPE_NULL));
}
פעולה זו הבטיחה שהסמן יושבת ולא נראה כאשר כל שאר החלונות נסגרים ומתנהל קרב. אם מופיעים חלונות קופצים, כמו תפריט ההשהיה, Pixonic הפכה את הסמן לחזק ותצוגת הסמל שלו תהיה ברירת המחדל.
התאמת מדריכים ומנגנונים לגיימפליי
לחוויית משתמש טובה יותר, Pixonic גם כתבו קוד חדש להצגת מדריכי גיימפליי שמבוססים על מצב המכשיר הנוכחי של המשתמש. אם שחקן עובר בין גיימפליי בטאבלט למחשב נייד במהלך קרב, והם עדיין לא ראו מדריך למצב השונה. המדריך מוצג לפני שהגיימפליי ממשיך.
כשהשחקנים נמצאים במצב מחשב נייד, Pixonic משביתה גם את השליטה במצלמה באמצעות מסך המגע (כי השחקנים ישלטו במצלמה באמצעות עכבר), בעוד שכל הלחצנים של משחקי הווידאו פועלים כרגיל. כדי להבדיל בין נגיעות לתנועות של עכבר, הצוות משתמש במאפיין Input.touchCount
(בסקריפטים של Unity):
if(Input.touchCount > 0) {
// this is screen touch event
} else {
// this is mouse (touchpad) event
}
תמיכה בריבוי חלונות
בשלב האחרון, Pixonic רצתה לוודא שהמשחק לא ננעל במצב מסך מלא כשהיא מופעלת. הפעלה של גיימפליי בחלון נפרד ב-ChromeOS מאפשרת כדי שהמשתמשים יוכלו לצפות בסטרימרים האהובים עליהם בו-זמנית בזמן המשחק, לשדרג הרובוטים שלהם בזמן שהם קוראים על יכולות חדשות באתר של המשחק, או צופים בקרב במצב פסיבי בזמן הצפייה בסרטון נפרד.
כדי לעשות זאת, Pixonic סימן את UnityPlayerActivity
כניתן לשינוי גודל:
<activity android:name="com.unity3d.player.UnityPlayerActivity" ....
android:resizeableActivity="true">
חשוב לזכור שממשק המשחק נראה כמשחקי רק בטווח מסוים של מאפיינים, ולכן הצוות הגדיר את גודלי החלונות המינימליים הנתמכים:
<activity … >
<layout android:gravity="center" android:minHeight="800dp" android:minWidth="1200dp" />
</activity>
כדי ליהנות ממהלך משחק סוחף ביותר, Pixonic השתמשה במטא תגים כדי להגדיר מצב מסך מלא כברירת מחדל ובפריסה לרוחב, באופן הרצוי.
<application>
<meta-data android:name="WindowManagerPreference:FreeformWindowSize" android:value="maximize" />
<meta-data android:name="WindowManagerPreference:FreeformWindowOrientation" android:value="landscape" />
….
</application>
האופטימיזציות האלה גם הבטיחו שהמשחק לא יושהה ושהקרב מדד HUD מותאם בהתאם כשהשחקנים מרחיבים ומכווצים את חלונות הגיימפליי שלהם.
תוצאות
הודות לספרייה הנרחבת של מקורות מידע באינטרנט, כל צוות הפיתוח של Pixonic, בן חמישה חברים, נמשך שבועיים בלבד.
יותר מ-100,000 שחקנים כבר שיחקו ב-War Robots ב-ChromeOS מאז Pixonic השיקה את אפשרויות האופטימיזציה האחרונות. כי הגיימפליי יכול עכשיו מנצלים את השטח הנוסף על מסכים גדולים יותר, הקרבות של רובוטי המלחמה סוחפים ומעניינים יותר מבעבר. למעשה, סשנים של משתמשים ארוכים יותר ב-25% במכשירי Chromebook בהשוואה למכשירי Android אחרים. המשוב המוקדם היא חיובית מאוד, וחלק מהשחקנים אפילו ציינו משחק מותאם ל-Chromebook פועל בצורה חלקה יותר מ-BlueStacks אמולטור.
בעקבות הצלחת המשחק, המפתחים של Pixonic מתכננים לעדכן את War Robots גרפיקה בכל מכשירי Android כדי שהגיימפליי יהיה קרוב עוד יותר לאיכות של מחשב חוויה אישית.
כדאי לעיין בשיטות מומלצות לאופטימיזציה של האפליקציות ל-ChromeOS.