במדריך הזה מוסבר איך לשדרג את המשחק מגרסת הבטא 1.0.0 קלט SDK עבור Java ו-Kotlin לגרסת בטא 1.1.0. לצפייה מדריך לשדרוג Unity ל-Unity הוראות ספציפיות.
נתוני גרסה
ב-Google Play Games במחשב יש תמיכה במיפוי מחדש של פקדי המקלדת על קישורי המפתחות שהמשחק שלך מספק באמצעות קלט SDK.
משתמשים ניגשים לתכונה הזו על ידי פתיחת את שכבת-העל, בוחרים פקדים, ואז ללחוץ על הפעולה שהם רוצים למפות מחדש.
אפליקציית Google Play Games במחשב ממופה כל קלט שמופה מחדש על ידי משתמשים לברירת המחדל של המשחק מהקלט. כך המשחק לא צריך להיות מודע למיפוי מחדש של השחקן. אם המיקום צריך לדעת מהו הקלט החדש לפעולה בתוך משחק, כמו להציג במקלדת במשחק שלכם, תוכלו לבצע רישום של קריאה חוזרת (callback) התראה על מיפוי מחדש של אירועים.
אפליקציית Google Play Games במחשב שומרת את אמצעי הבקרה שמופו מחדש של כל משתמש באופן מקומי, כדי עקביים בכל סשנים של משחק. מכיוון שהמידע הזה מאוחסן באופן מקומי, ישפיעו על חוויית השימוש בנייד, והן נמחקות לאחר ההסרה של Google Play Games במחשב. הגדרות בקרה לא נשמרות בכמה משחקים בו-זמנית מכשירי מחשב.
לא צריך לשדרג את ה-SDK לקלט כדי להפעיל מיפוי מחדש של מפתחות אבל אפשר להשבית את המיפוי מחדש במשחק אם זוהתה הגדרות אישיות שאינן נתמכות.
אם רוצים לשלוט במיפוי מחדש של הקלט, או אם במיפוי מחדש התכונה מושבתת במשחק שלך, בצע את השלבים הבאים כדי לפתור את הבעיה:
- עליך לשדרג ל-קלט SDK
1.1.0-beta
. - מעדכנים את כל קישורי המפתחות כדי להימנע מהגדרות שלא נתמכות.
- צריך לעדכן את
InputMap
כדי להגדיר את תכונת המיפוי מחדש שמופעלת.
אם רוצים להפסיק את השימוש בתכונת המיפוי מחדש של המשחק, הצגת הגרסה לקריאה בלבד של קישורי המפתחות:
- עליך לשדרג ל-קלט SDK
1.1.0-beta
. - מעדכנים את
InputMap
כדי להגדיר את תכונת המיפוי מחדש כמושבתת.
כדי לבצע את הפעולות הבאות, אפשר לשדרג את גרסת ה-SDK של הקלט ל-1.1.0-beta
את היתרונות של תכונות מיפוי מחדש מתקדמות ב-Google Play Games במחשב באמצעות
InputContexts
כדי להגדיר פקדים לסצנות שונות של המשחק, מוסיפים
קריאות חוזרות כדי להאזין לאירועים למיפוי מחדש, להגדיר סדרה של מפתחות שמורים
המשתמש לא יכול למפות מחדש או להשבית את תכונת המיפוי מחדש בכל InputAction
,
InputGroup
או InputMap
.
כשמשדרגים לגרסת ה-SDK החדשה, כדאי להביא בחשבון את החריגים הבאים:
הגדרות שלא נתמכות
מיפוי מחדש של הקלט מושבת אם התנאים הבאים לא מתקיימים:
InputAction
המשתמש במספר מקשים חייב להיות מורכב ממגביל ועל המקש שלא משנה. לדוגמה,Shift + A חוקי, אבלA + B ,Ctrl + Alt ו-Shift + A + Tab לא.שני אובייקטים או יותר מסוג
InputAction
אוInputGroup
לא יכולים לחלוק אותם מזהה ייחודי.
שדרוג
קלט SDK 1.1.0-beta תואם לאחור עם קלט SDK 1.0.0-בטא. משחקים שנעשה בהם שימוש בהטמעות קודמות של ה-SDK לקלט עדיין תומכים במיפוי מחדש בסיסי, אלא אם הם משתמשים תצורה לא נתמכת. אם במשחק נעשה שימוש ב- גרסה קודמת של ה-SDK לקלט, מומלץ לקרוא את מדריך לשדרוג מגרסה 0.0.4 לגרסת בטא 1.0.0.
שדרוג לגרסה 1.1.0 בטא מפעיל תכונות חדשות, כולל:
- הפעלת שינויים בבקרות הסצנות.
- קבלת התראות על אירועי מיפוי מרכזיים.
- השבתת מיפוי מחדש לפי פעולה, קבוצה, הקשר או מפה.
תלות בשדרוג
אם משתמשים ב-Gradle כדי לייבא את ה-SDK של קלט, צריך לשדרג לגרסה החדשה ביותר:
// build.gradle
dependencies {
...
implementation 'com.google.android.libraries.play.games:inputmapping:1.1.0-beta'
...
}
הגדרת שדות סטטיים
עבור גרסה 1.1.0-beta
מומלץ להגדיר את InputAction
,
InputGroup
, InputContext
ו-InputMap
אובייקטים כשדות סטטיים של
הכיתה InputMappingProvider
כי ניתן לגשת לשדות האלה מחלקים אחרים
של האפליקציה:
Kotlin
class InputSDKProvider : InputMappingProvider {
override fun onProvideInputMap(): InputMap { return gameInputMap }
companion object {
const val INPUTMAP_VERSION = "1.0.0"
private val moveUpInputAction = InputAction.create(...)
private val movementInputGroup = InputGroup.create(...)
val menuContext = InputContext.create(...)
val gameInputMap = InputMap.create(...)
}
}
Java
public class MyInputMappingProvider implements InputMappingProvider {
private static final String INPUTMAP_VERSION = "1.0.0";
private static final InputAction moveUpInputAction =
InputAction.create(...);
private static final InputGroup movementInputGroup = InputGroup.create(...);
public static final InputContext menuContext = InputContext.create(...);
public static final InputMap gameInputMap = InputMap.create(...);
@Override
public InputMap onProvideInputMap() {
return gameInputMap;
}
}
עדכון פעולות הקלט
השיטה InputAction.create()
של קלט SDK 1.0.0-beta
היא
הוצא משימוש. למכשיר InputAction
יש עכשיו מזהה גרסה ואפשר לסמן אותו בתור
שניתן לשחזר או לא. InputAction
שהוגדר באמצעות ה-SDK לקלט
השיטה 'create()
' 1.0.0-beta
ניתנת לשינוי כברירת מחדל ואין בה ניהול גרסאות
מידע:
קלט פעולה ב-input SDK 1.0.0-בטא
Kotlin
val jumpInputAction = InputAction.create(
"Jump",
InputEventIds.JUMP.id,
InputControls.create(
listOf(KeyEvent.KEYCODE_SPACE),
emptyList()
)
)
Java
InputAction moveUpInputAction = InputAction.create(
"Move Up",
InputEventIds.MOVE_UP.ordinal(),
InputControls.create(
Collections.singletonList(KeyEvent.KEYCODE_W),
Collections.emptyList()
)
);
קלט פעולה ב-input SDK 1.1.0-בטא
Kotlin
companion object {
private val moveUpInputAction = InputAction.create(
"Move Up",
InputActionsIds.DRIVE.ordinal.toLong(),
InputControls.create(listOf(KeyEvent.KEYCODE_W), emptyList()),
InputEnums.REMAP_OPTION_ENABLED) // This action is remappable
}
Java
private static final InputAction moveUpInputAction = InputAction.create(
"Move Up",
InputEventIds.MOVE_UP.ordinal(),
InputControls.create(
Collections.singletonList(KeyEvent.KEYCODE_W),
Collections.emptyList()),
InputEnums.REMAP_OPTION_ENABLED // this action is remappable
);
קלט פעולה ב-input SDK 1.1.0-בטא (עם מחרוזת גרסה)
Kotlin
private val enterMenuInputAction = InputAction.create(
"Enter menu",
InputControls.create(listOf(KeyEvent.KEYCODE_ENTER), emptyList()),
InputIdentifier.create(
INPUTMAP_VERSION, InputActionsIds.ENTER_MENU.ordinal.toLong()),
InputEnums.REMAP_OPTION_ENABLED
)
Java
private static final InputAction moveUpInputAction = InputAction.create(
"Move Up",
InputControls.create(
Collections.singletonList(KeyEvent.KEYCODE_W),
Collections.emptyList()),
InputIdentifier.create(
INPUTMAP_VERSION,
InputEventIds.MOVE_UP.ordinal()),
InputEnums.REMAP_OPTION_ENABLED // this action is remappable
);
למידע נוסף על ניהול גרסאות של קישורי המפתחות, ראו מזהי מפתחות למעקב.
עדכון קבוצות הקלט
ב-input SDK 1.1.0-beta
צריך לזהות באופן ייחודי כל אחד מהם
InputGroup
. כל InputAction
שייך ל-InputGroup
– אוסף של
פעולות קשורות. כך ניתן לשפר את הניווט ואת יכולת הגילוי של אמצעי הבקרה
במהלך המשחק. באותו אופן, ל-InputAction
חייב להיות מזהה ייחודי
מבין כל הפעולות ב-InputContext
יחיד, InputGroup
חייב לכלול
מזהה ייחודי בכל הקבוצות הקיימות.
בדוגמאות בקטע הזה, למשחק יש שני אובייקטים מסוג InputContext
שמייצגים את התפריט הראשי ואת הגיימפליי. מתבצע מעקב אחר המזהים המתאימים של כל אחד מהם
InputGroup
בהקשרים האלה באמצעות הספירה הבאה:
Kotlin
enum class InputGroupsIds {
// Main menu scene
BASIC_NAVIGATION, // WASD, Enter, Backspace
MENU_ACTIONS, // C: chat, Space: quick game, S: store
// Gameplay scene
BASIC_MOVEMENT, // WASD, space: jump, Shift: run
MOUSE_ACTIONS, // Left click: shoot, Right click: aim
EMOJIS, // Emojis with keys 1,2,3,4 and 5
GAME_ACTIONS, // M: map, P: pause, R: reload
}
Java
public enum InputGroupsIds {
// Main menu scene
BASIC_NAVIGATION, // WASD, Enter, Backspace
MENU_ACTIONS, // C: chat, Space: quick game, S: store
// Gameplay scene
BASIC_MOVEMENT, // WASD, space: jump, Shift: run
MOUSE_ACTIONS, // Left click: shoot, Right click: aim
EMOJIS, // Emojis with keys 1,2,3,4 and 5
GAME_ACTIONS, // M: map, P: pause, R: reload
}
כמו InputAction
, גם שיטת ה-InputGroup.create()
של קלט SDK
1.0.0-beta
הוצא משימוש. עליך לעדכן את InputGroup
במשחק שלך
במזהה גרסה ובוליאני שמציין אם InputAction
אובייקטים בקבוצות שלך ניתנים לעדכון. קבוצות שנוצרו באמצעות שיטת קלט SDK 1.0.0-beta
create()
שהוצאה משימוש, ניתנות לעדכון, המזהה שלהן הוא 0,
ומזהה הגרסה הוא מחרוזת ריקה (""
):
CredentialsGroup בקלט SDK 1.0.0-בטא
Kotlin
val movementInputGroup = InputGroup.create(
"Basic Movement",
listOf(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction)
)
Java
InputGroup movementInputGroup = InputGroup.create(
"Basic movement",
Arrays.asList(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction
)
);
קלטGroup ב-input SDK 1.1.0-Beta
Kotlin
companion object {
private val movementInputGroup = InputGroup.create(
"Basic movement",
listOf(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction),
InputGroupsIds.BASIC_MOVEMENT.ordinal.toLong(),
// All the actions in this groups can't be remapped
InputEnums.REMAP_OPTION_DISABLED
)
}
Java
private static final InputGroup movementInputGroup = InputGroup.create(
"Basic movement",
Arrays.asList(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction
),
InputGroupsIds.BASIC_MOVEMENT.ordinal(),
// All the actions in this groups can't be remapped
InputEnums.REMAP_OPTION_DISABLED
);
קלטGroup ב-input SDK 1.1.0-בטא (עם מחרוזת גרסה)
Kotlin
companion object {
private val movementInputGroup = InputGroup.create(
"Basic movement",
listOf(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction),
InputIdentifier.create(
INPUTMAP_VERSION, InputGroupsIds.BASIC_MOVEMENT.ordinal.toLong()),
// All the actions in this groups can't be remapped
InputEnums.REMAP_OPTION_DISABLED
)
}
Java
private static final InputGroup movementInputGroup = InputGroup.create(
"Basic movement",
Arrays.asList(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction
),
InputIdentifier.create(
INPUTMAP_VERSION,
InputGroupsIds.BASIC_MOVEMENT.ordinal()),
// All the actions in this groups can't be remapped
InputEnums.REMAP_OPTION_DISABLED
);
למידע נוסף על ניהול גרסאות של קישורי המפתחות, ראו מזהי מפתחות למעקב.
עדכון קלט המפה
שיטת ה-InputMap.create()
של קלט SDK 1.0.0-beta
היא
הוצא משימוש. צריך לעדכן את InputMap
כדי להקצות מזהה גרסה, ולבטל את ההסכמה
לגמרי מתכונת המיפוי מחדש או להקצות רשימה של מפתחות שמורים
משחק שאתם לא רוצים שישמש למיפוי מחדש של המשתמש. כל יום InputMap
שהוגדר באמצעות שיטת קלט SDK 1.0.0-beta
create()
היא
ניתן למיפוי מחדש כברירת מחדל, מזוהה באמצעות המזהה 0
ואין לו
שמורים.
InsertMap בקלט SDK 1.0.0-בטא
Kotlin
val gameInputMap = InputMap.create(
listOf(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false)
)
Java
InputMap gameInputMap = InputMap.create(
Arrays.asList(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false)
);
InsertMap ב-input SDK 1.1.0-Beta
Kotlin
companion object {
const val INPUTMAP_VERSION = "1.0.0"
const val INPUT_MAP_ID = 0
val gameInputMap = InputMap.create(
listOf(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false),
InputIdentifier.create(INPUTMAP_VERSION, INPUT_MAP_ID.toLong()),
InputEnums.REMAP_OPTION_ENABLED,
// Use ESCAPE as reserved key
listof(InputControls.create(listOf(KeyEvent.KEYCODE_ESCAPE), emptyList()))
)
}
Java
public static final String INPUT_MAP_VERSION = "1.0.0-beta";
public static final long INPUT_MAP_ID = 0;
public static final InputMap gameInputMap = InputMap.create(
Arrays.asList(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false),
InputIdentifier.create(INPUTMAP_VERSION, INPUT_MAP_ID),
InputEnums.REMAP_OPTION_ENABLED,
// Use ESC key as reserved key
Arrays.asList(
InputControls.create(
Collections.singletonList(KeyEvent.KEYCODE_ESCAPE),
Collections.emptyList()
)
)
);
השלב הבא
עליך להמשיך בשדרוג לגרסת בטא 1.1.0 עד
הקצאת פקדים שונים לסצנות שונות
באמצעות InputContexts
או מעדכנים את ממשק המשתמש של המשחק על ידי
קבלת התראות על מיפוי מחדש של אירועים באמצעות
InputRemappingListeners
.
כשמעדכנים את קישורי המפתחות, כדאי לעיין שיטות מומלצות לעיצוב קישורי המפתחות כדאי להביא בחשבון את ההגבלות המגבלות של תכונת המיפוי מחדש.