อัปเกรด Input SDK สำหรับ Java และ Kotlin เป็นเวอร์ชัน 1.1

คำแนะนำนี้จะอธิบายวิธีอัปเกรดเกมจาก Input SDK สำหรับ Java และ Kotlin เวอร์ชัน 1.0.0-เบต้าเป็น 1.1.1-เบต้า ดูวิธีการเฉพาะสำหรับ 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 เพื่อตั้งค่าฟีเจอร์การรีการแมปให้เปิดใช้

หากต้องการเลือกไม่ใช้ฟีเจอร์การแมปแป้นใหม่สำหรับเกมขณะที่ยังคงแสดงการแมปแป้นเวอร์ชันอ่านอย่างเดียว ให้ทำตามขั้นตอนต่อไปนี้

  • อัปเกรดเป็น 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-เบต้าใช้งานร่วมกับ Input SDK 1.0.0-เบต้าได้ เกมที่ใช้การติดตั้งใช้งาน Input SDK เวอร์ชันก่อนหน้าจะยังคงรองรับการแมปใหม่พื้นฐาน เว้นแต่จะใช้การกำหนดค่าที่ไม่รองรับ หากเกมของคุณใช้ Input SDK เวอร์ชันเก่า โปรดอ่านคำแนะนำในการอัปเกรดจาก 0.0.4 เป็น 1.0.0-เบต้า

การอัปเกรดเป็น 1.1.1-เบต้าจะเปิดใช้ฟีเจอร์ใหม่ๆ ต่อไปนี้

การพึ่งพาการอัปเกรด

หากคุณใช้ 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() ของ SDK อินพุต 1.0.0-beta สามารถแมปใหม่ได้โดยค่าเริ่มต้น และขาดข้อมูลการกำหนดเวอร์ชัน ดังนี้

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.1-เบต้า

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-เบต้า (มีสตริงเวอร์ชัน)

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.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
}

เราเลิกใช้งานเมธอด InputGroup.create() ของ SDK อินพุต 1.0.0-beta แล้ว เช่นเดียวกับ InputAction คุณต้องอัปเดต 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.1-เบต้า

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-เบต้า (มีสตริงเวอร์ชัน)

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-เบต้า

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-เบต้า

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-เบต้าต่อโดยกำหนดการควบคุมที่แตกต่างกันสำหรับฉากต่างๆ โดยใช้ InputContexts หรืออัปเดต UI ของเกมโดยรับการแจ้งเตือนเกี่ยวกับการแมปเหตุการณ์ใหม่โดยใช้ InputRemappingListeners

เมื่ออัปเดตการเชื่อมโยงแป้นพิมพ์ ให้ดูแนวทางปฏิบัติแนะนำในการออกแบบการเชื่อมโยงแป้นพิมพ์และพิจารณาข้อจำกัดและข้อจำกัดของฟีเจอร์การแมปแป้นใหม่