คู่มือนี้จะอธิบายวิธีอัปเกรดเกมจาก Input SDK 1.0.0-beta สำหรับ Java และ Kotlin เป็น 1.1.1-beta ดูคำแนะนำเฉพาะสำหรับ Unity ได้ใน คู่มือการอัปเกรด Unity
บันทึกประจำรุ่น
Google Play Games บน PC รองรับการกำหนดการควบคุมด้วยแป้นพิมพ์ใหม่ตามการผูกคีย์ที่เกมของคุณมีให้โดยใช้ Input SDK
ผู้ใช้เข้าถึงฟีเจอร์นี้ได้โดยเปิด โอเวอร์เลย์ เลือกการควบคุม แล้วคลิกการดำเนินการที่ต้องการกำหนดใหม่
Google Play Games บน PC จะกำหนดอินพุตที่ผู้ใช้กำหนดใหม่ทั้งหมดลงในอินพุตเริ่มต้นของเกม วิธีนี้จะช่วยให้เกมของคุณไม่ต้องรับรู้ถึงการกำหนดใหม่ของผู้เล่น หากคุณจำเป็นต้องทราบอินพุตใหม่สำหรับการดำเนินการในเกม เช่น การแสดงการควบคุมด้วยแป้นพิมพ์ในเกม คุณสามารถลงทะเบียนการเรียกกลับเพื่อรับการแจ้งเตือนสำหรับเหตุการณ์การกำหนดใหม่ได้ (ไม่บังคับ)
Google Play Games บน PC จะจัดเก็บการควบคุมที่กำหนดใหม่ของผู้ใช้แต่ละรายไว้ในเครื่องเพื่อให้การควบคุมดังกล่าวคงอยู่ตลอดเซสชันการเล่นเกม เนื่องจากระบบจัดเก็บข้อมูลนี้ไว้ในเครื่อง จึงไม่ส่งผลต่อประสบการณ์การใช้งานบนอุปกรณ์เคลื่อนที่และจะลบออกเมื่อถอนการติดตั้ง Google Play Games บน PC ระบบจะไม่เก็บการตั้งค่าการควบคุมไว้ในอุปกรณ์ PC หลายเครื่อง
คุณไม่จำเป็นต้องอัปเกรด Input SDK เพื่อเปิดใช้การกำหนดคีย์ใหม่ใน เกมของคุณ แต่ระบบอาจปิดใช้การกำหนดใหม่สำหรับเกมของคุณหากตรวจพบ การกำหนดค่าที่ไม่รองรับ
หากต้องการควบคุมประสบการณ์การกำหนดอินพุตใหม่ หรือหากระบบปิดใช้ฟีเจอร์การกำหนดใหม่สำหรับเกมของคุณ ให้ทำตามขั้นตอนต่อไปนี้เพื่อแก้ไข
- อัปเกรดเป็น Input SDK
1.1.1-beta - อัปเดตการผูกคีย์เพื่อหลีกเลี่ยงการกำหนดค่าที่ไม่รองรับ
- อัปเดต
InputMapเพื่อตั้งค่าฟีเจอร์การกำหนดใหม่เป็น เปิดใช้
หากต้องการเลือกไม่ใช้ฟีเจอร์การกำหนดใหม่สำหรับเกมของคุณ แต่ยังคงแสดงการผูกคีย์เวอร์ชันอ่านอย่างเดียว ให้ทำตามขั้นตอนต่อไปนี้
- อัปเกรดเป็น Input SDK
1.1.1-beta - อัปเดต
InputMapเพื่อตั้งค่าฟีเจอร์การกำหนดใหม่เป็น ปิดใช้
คุณสามารถอัปเกรด Input SDK เป็นเวอร์ชัน 1.1.1-beta เพื่อใช้ประโยชน์จากฟีเจอร์การกำหนดใหม่ขั้นสูงใน Google Play Games บน PC ได้โดยใช้ InputContexts เพื่อกำหนดการควบคุมสำหรับฉากต่างๆ ของเกม เพิ่มการเรียกกลับเพื่อรับฟังเหตุการณ์การกำหนดใหม่ กำหนดชุดคีย์ที่สงวนไว้ซึ่งผู้ใช้กำหนดใหม่ไม่ได้ และปิดใช้ฟีเจอร์การกำหนดใหม่ต่อ InputAction, InputGroup หรือ InputMap
โปรดพิจารณากรณีต่อไปนี้ขณะอัปเกรดเป็น SDK เวอร์ชันใหม่
การกำหนดค่าที่ไม่รองรับ
ระบบจะปิดใช้การกำหนดอินพุตใหม่หากไม่เป็นไปตามเงื่อนไขต่อไปนี้
InputActionที่ใช้หลายคีย์ต้องประกอบด้วยคีย์กดร่วมและคีย์ที่ไม่ใช่คีย์กดร่วม เช่นShift + A ใช้ได้ แต่A + B ,Ctrl + Alt และShift + A + Tab ใช้ไม่ได้ออบเจ็กต์
InputActionหรือInputGroupตั้งแต่ 2 รายการขึ้นไปจะใช้รหัสที่ไม่ซ้ำกันเดียวกันไม่ได้
อัปเกรด
Input SDK 1.1.1-beta เข้ากันได้กับ Input SDK 1.0.0-beta เกมที่ใช้การใช้งาน Input SDK เวอร์ชันก่อนหน้า จะยังคงรองรับการกำหนดใหม่ขั้นพื้นฐาน เว้นแต่จะใช้ การกำหนดค่าที่ไม่รองรับ หากเกมของคุณใช้ Input SDK เวอร์ชันก่อนหน้า โปรดอ่านคู่มือการอัปเกรดจาก 0.0.4 เป็น 1.0.0-beta
การอัปเกรดเป็น 1.1.1-beta จะเปิดใช้ฟีเจอร์ใหม่ๆ ได้แก่
- การทริกเกอร์การเปลี่ยนแปลงการควบคุมฉาก
- การรับการแจ้งเตือนเหตุการณ์การกำหนดคีย์
- การปิดใช้การกำหนดใหม่ต่อการดำเนินการ กลุ่ม บริบท หรือแผนที่
อัปเกรดการขึ้นต่อกัน
หากใช้ Gradle เพื่อนำเข้า Input SDK ให้อัปเกรดเป็นเวอร์ชันล่าสุดโดยทำดังนี้
// build.gradle
dependencies {
...
implementation 'com.google.android.libraries.play.games:inputmapping:1.1.1-beta'
...
}
กำหนดฟิลด์คงที่
สำหรับเวอร์ชัน 1.1.1-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;
}
}
อัปเดต InputActions
เราเลิกใช้งานเมธอด InputAction.create() ของ Input SDK 1.0.0-beta แล้ว ตอนนี้ InputAction มีตัวระบุเวอร์ชันและสามารถทำเครื่องหมายว่ากำหนดใหม่ได้หรือไม่ InputAction ที่กำหนดโดยใช้เมธอด create() ของ Input SDK 1.0.0-beta จะกำหนดใหม่ได้โดยค่าเริ่มต้นและไม่มีข้อมูลการกำหนดเวอร์ชัน
InputAction ใน Input SDK 1.0.0-beta
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()
)
);
InputAction ใน Input SDK 1.1.1-beta
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
);
InputAction ใน Input SDK 1.1.1-beta (มีสตริงเวอร์ชัน)
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
);
ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดเวอร์ชันการผูกคีย์ได้ที่ การติดตามรหัสคีย์
อัปเดต InputGroups
ใน Input SDK 1.1.1-beta คุณต้องระบุ InputGroup แต่ละรายการด้วยตัวระบุที่ไม่ซ้ำกัน InputAction แต่ละรายการเป็นของ InputGroup ซึ่งเป็น
คอลเล็กชันของการดำเนินการที่เกี่ยวข้อง การดำเนินการนี้จะช่วยปรับปรุงการนำทางและการค้นพบการควบคุมระหว่างการเล่นเกม ในลักษณะเดียวกับที่ InputAction ต้องมีตัวระบุที่ ไม่ซ้ำกัน ในการดำเนินการทั้งหมดใน InputContext เดียว InputGroup ต้องมีรหัสที่ไม่ซ้ำกันในกลุ่มที่มีอยู่
สำหรับตัวอย่างในส่วนนี้ เกมมีออบเจ็กต์ InputContext 2 รายการที่แสดงเมนูหลักและการเล่นเกม ระบบจะติดตามรหัสที่เหมาะสมสำหรับ 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() ของ Input SDK 1.0.0-beta แล้ว คุณต้องอัปเดต InputGroup ในเกมด้วยตัวระบุเวอร์ชันและบูลีนที่ระบุว่าออบเจ็กต์ InputAction ในกลุ่มกำหนดใหม่ได้หรือไม่ กลุ่มที่สร้างด้วยเมธอดของ Input SDK ที่เลิกใช้งานแล้ว 1.0.0-beta create() จะกำหนดใหม่ได้ มีรหัสเป็น 0,
และรหัสเวอร์ชันเป็นสตริงว่าง ("")
InputGroup ใน Input SDK 1.0.0-beta
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
)
);
InputGroup ใน Input SDK 1.1.1-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
);
InputGroup ใน Input SDK 1.1.1-beta (มีสตริงเวอร์ชัน)
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
เราเลิกใช้งานเมธอด InputMap.create() ของ Input SDK 1.0.0-beta แล้ว อัปเดต InputMap เพื่อกำหนดตัวระบุเวอร์ชัน เลือกไม่ใช้ฟีเจอร์การกำหนดใหม่โดยสมบูรณ์ หรือกำหนดรายการคีย์ที่สงวนไว้สำหรับเกมที่คุณไม่ต้องการให้ผู้ใช้ใช้สำหรับการกำหนดใหม่ InputMap
ทุกรายการที่กำหนดโดยใช้เมธอด 1.0.0-beta create() ของ Input SDK จะ
กำหนดใหม่ได้โดยค่าเริ่มต้น ระบุด้วยรหัส 0 และไม่มี
คีย์ที่สงวนไว้
InputMap ใน Input SDK 1.0.0-beta
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)
);
InputMap ใน Input SDK 1.1.1-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.1-beta ต่อไปโดย
กำหนดการควบคุมที่แตกต่างกันสำหรับฉากต่างๆ
โดยใช้ InputContexts หรืออัปเดต UI ของเกมโดย
รับการแจ้งเตือนเกี่ยวกับเหตุการณ์การกำหนดใหม่ โดยใช้
InputRemappingListeners
เมื่ออัปเดตการผูกคีย์ โปรดดูที่ แนวทางปฏิบัติแนะนำสำหรับการออกแบบการผูกคีย์ และพิจารณา ข้อจำกัด และ ข้อจำกัดของฟีเจอร์การกำหนดใหม่