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