يشرح هذا الدليل كيفية ترقية لعبتك من الإصدار 1.0.0 التجريبي إلى الإصدار التجريبي 1.1.0 لإدخال حزمة تطوير البرامج (SDK) اطّلِع على دليل ترقية Unity للحصول على تعليمات خاصة بـ Unity.
ملاحظات حول الإصدارات
يتيح برنامج "ألعاب Google Play على الكمبيوتر" إعادة تخصيص عناصر التحكّم في لوحة المفاتيح بناءً على روابط المفاتيح التي تقدّمها لعبتك باستخدام حزمة تطوير البرامج (SDK) للإدخال.
يمكن للمستخدمين الوصول إلى هذه الميزة عن طريق فتح التراكب، واختيار عناصر التحكم، ثم النقر على الإجراء الذي يريدون إعادة تخصيصه.
يربط برنامج "ألعاب Google Play على الكمبيوتر" كل إدخال تمّت إعادة تخصيصه للمستخدم مع الإدخال التلقائي لللعبة. وبهذه الطريقة، لن يكون من الضروري أن تكون لعبتك على دراية بإعادة تخصيص اللاعبين. إذا كنت بحاجة إلى معرفة الإدخال الجديد لإجراء داخل اللعبة، مثل عرض عناصر التحكم في لوحة المفاتيح في لعبتك، يمكنك اختياريًا تسجيل معاودة الاتصال ليتم إعلامك بشأن أحداث إعادة التعيين.
ويخزّن برنامج "ألعاب Google Play على الكمبيوتر" عناصر التحكّم التي تمت إعادة تخصيصها على الجهاز محليًا، لتبقى متوفّرة باستمرار في مختلف جلسات الألعاب. وبما أنّ هذه النسخة مخزَّنة على الجهاز، لن تؤثّر في تجربة الأجهزة الجوّالة، ويتم حذفها عند إلغاء تثبيت تطبيق "ألعاب Google Play على الكمبيوتر". لا يتم الاحتفاظ بإعدادات التحكم عبر العديد من أجهزة الكمبيوتر الشخصي.
ليس عليك ترقية حزمة تطوير البرامج (SDK) للإدخال لتفعيل عملية إعادة تخصيص المفاتيح في لعبتك، ولكن يمكن إيقاف عملية إعادة التعيين في لعبتك إذا تم رصد ضبط غير متوافق.
إذا كنت تريد التحكّم في تجربة إعادة ضبط الإدخالات أو إذا كانت ميزة إعادة التعيين غير مفعّلة في لعبتك، يمكنك اتّباع الخطوات التالية لحلّ المشكلة:
- الترقية إلى الإصدار
1.1.0-beta
من حزمة تطوير البرامج (SDK) للإدخال - عدِّل أي عمليات ربط للمفاتيح لتجنُّب عمليات الضبط غير المتوافقة.
- يُرجى تحديث
InputMap
لضبط ميزة إعادة التعيين.
إذا أردت إيقاف ميزة إعادة التعيين للعبتك مع الاستمرار في عرض نسخة للقراءة فقط من روابط المفاتيح، يجب اتّباع الخطوات التالية:
- الترقية إلى الإصدار
1.1.0-beta
من حزمة تطوير البرامج (SDK) للإدخال - يُرجى تحديث
InputMap
لضبط ميزة إعادة التعيين على غير مُفعَّلة.
يمكنك ترقية إصدار حزم SDK للإدخال إلى 1.1.0-beta
للاستفادة من الميزات المتقدّمة لإعادة التعيين في "ألعاب Google Play على الكمبيوتر" من خلال استخدام
InputContexts
لتحديد عناصر التحكّم لمشاهد مختلفة من لعبتك، وإضافة استدعاءات للاستماع إلى أحداث إعادة التعيين، وتحديد مجموعة من المفاتيح المحجوزة التي لا يمكن للمستخدم إعادة تخصيصها، وإيقاف ميزة إعادة التعيين لكل InputAction
أو InputGroup
أو InputMap
.
ويجب مراعاة الاستثناءات التالية عند الترقية إلى الإصدار الجديد من حزمة تطوير البرامج (SDK):
الإعدادات غير المتوافقة
يتمّ إيقاف إعادة تخصيص الإدخال في حال عدم استيفاء الشروط التالية:
يجب أن يتألف
InputAction
الذي يستخدم مفاتيح متعددة من مفتاح تعديل ومفتاح غير معدِّل. على سبيل المثال، يُعدّShift + A صالحًا ولكنA + B وCtrl + Alt وShift + A + Tab غير صالح.لا يمكن أن يتشارك كائنان أو أكثر من عناصر
InputAction
أوInputGroup
المعرّف الفريد نفسه.
ترقية
يتوافق الإصدار التجريبي من حزمة تطوير البرامج (SDK) 1.1.0 مع الأنظمة القديمة مع الإصدار التجريبي من حِزم تطوير البرامج (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;
}
}
تعديل InActions (إجراءات الإدخال)
تم نهائيًا إيقاف طريقة InputAction.create()
لإدخال حزمة SDK 1.0.0-beta
. أصبح لعنوان InputAction
الآن معرّف إصدار ويمكن وضع علامة عليه تشير إلى أنّه قابل لإعادة الضبط أو لا. إنّ InputAction
التي تم تحديدها باستخدام طريقة In SDK الخاصة بالإدخال
1.0.0-beta
create()
يمكن إعادة ربطها تلقائيًا وتفتقر إلى معلومات تحديد الإصدارات:
EnterAction في الإصدار 1.0.0 من حزمة SDK للإدخال التجريبي
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()
)
);
EnterAction في الإصدار 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
);
الإصدار التجريبي من نظام الإدخال (إدخال) الإصدار 1.1.0 من حزمة "SDK" (مع سلسلة الإصدار)
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
);
ولمزيد من المعلومات عن تحديد إصدارات روابط المفاتيح، اطّلِع على المقالة أرقام تعريف مفاتيح التتبّع.
تعديل مجموعات الإدخال
في حزمة تطوير البرامج (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
}
وتم أيضًا إيقاف طريقة InputGroup.create()
ضمن حزمة تطوير البرامج (SDK) لإدخال
1.0.0-beta
، تمامًا مثل InputAction
. يجب تعديل InputGroup
في لعبتك باستخدام معرّف الإصدار وقيمة منطقية تشير إلى ما إذا كانت كائنات InputAction
في مجموعاتك قابلة لإعادة الضبط. يمكن إعادة ضبط المجموعات التي تم إنشاؤها باستخدام طريقة 1.0.0-beta
create()
للإدخال المهملة، ولها رقم التعريف 0،
ورقم تعريف الإصدار هو سلسلة فارغة (""
):
الإصدار التجريبي من In تقسيم 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
)
);
الإصدار 1.1.0 من واجهة برمجة التطبيقات للإدخال في الإصدار التجريبي
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
);
الإصدار 1.1.0 من واجهة InSDK للإدخال (مع سلسلة الإصدار)
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
، ولا تحتوي على أي
مفاتيح محجوزة.
EnterMap في إصدار 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)
);
EnterMap في إصدار SDK للإدخال 1.1.0 - الإصدار التجريبي
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
.
عند تعديل عمليات ربط المفاتيح، اطّلِع على أفضل الممارسات لتصميم الروابط الرئيسية وفكِّر في القيود والقيود المفروضة على ميزة إعادة الربط.