อัปเกรดอินพุต SDK สำหรับ Unity เป็นเวอร์ชัน 1.1

คำแนะนำนี้จะอธิบายวิธีอัปเกรดเกมของคุณจาก 1.0 เป็น 1.1 Input SDK สำหรับ Unity คลิกที่นี่ สำหรับคำสั่งของ Java และ Kotlin

บันทึกประจำรุ่น

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 ได้ เพื่อใช้ประโยชน์จากฟีเจอร์การรีแมปขั้นสูงใน Google Play Games บน PC โดยใช้ InputContextsเพื่อกำหนดการควบคุมสำหรับฉากต่างๆ ในเกม เพิ่ม Callback เพื่อฟังเหตุการณ์ที่รีแมป กำหนดชุดของคีย์สงวนที่ ผู้ใช้ไม่สามารถแมปใหม่และปิดใช้ฟีเจอร์การแมปตาม InputAction ได้ InputGroup หรือ InputMap

คำนึงถึงข้อยกเว้นต่อไปนี้เมื่ออัปเกรด

การกำหนดค่าที่ไม่รองรับ

ระบบจะปิดการแมปอินพุตใหม่หากไม่เป็นไปตามเงื่อนไขต่อไปนี้

  • InputAction ที่ใช้คีย์หลายรายการต้องประกอบด้วยแป้นกดร่วม และคีย์ที่ไม่ใช่ตัวแก้ไข ตัวอย่างเช่น Shift + A ถือว่าใช้ได้ แต่ A + B, Ctrl + Alt และ Shift + A + Tab ไม่ถูกต้อง

  • ออบเจ็กต์ InputAction หรือ InputGroup อย่างน้อย 2 รายการแชร์สิ่งเดียวกันไม่ได้ รหัสที่ไม่ซ้ำกัน

ขอแนะนำ InputContext

InputContext อนุญาตให้เกมใช้คีย์เดียวกันสำหรับการดำเนินการต่างๆ ใน เกมโดยไม่มีความขัดแย้ง ด้วยวิธีนี้ หากเกมใช้พื้นที่ในการกระโดด ระหว่างการเล่นเกมและเพื่อยืนยันการเลือกเมนู ผู้เล่นจะสามารถ แมป Space ใหม่แต่ละรายการเพื่อ Enter ในเมนู และ space เป็นลูกศรขึ้นระหว่างเกมเพลย์

แผนภาพลำดับต่อไปนี้แสดงวิธีการทำงานของ setInputContext() API ที่ รันไทม์:

แผนภาพแสดงโฟลว์ของ SDK อินพุตเมื่อรีแมปคีย์

อัปเกรด

เกมที่ใช้ Input SDK ก่อนหน้านี้ยังคงรองรับ การรีแมปขั้นพื้นฐาน เว้นแต่ว่าจะใช้ การกำหนดค่าที่ไม่รองรับ หากเกมกำลังใช้ Input SDK รุ่นเก่า ให้ลองอ่าน คู่มือการอัปเกรดจาก 0.0.4 เป็น 1.0.0-beta

การอัปเกรดเป็นรุ่นเบต้า 1.1.0 จะเป็นการเปิดใช้งานฟีเจอร์ใหม่ๆ รวมถึง:

  • การทริกเกอร์การเปลี่ยนแปลงบริบท
  • การรับการแจ้งเตือนเหตุการณ์การแมปที่สำคัญ
  • ปิดใช้การรีแมปต่อการดำเนินการ กลุ่ม บริบท หรือแผนที่

การติดตั้ง

ปลั๊กอิน Unity v1.1.0-beta พร้อมใช้งานสำหรับคุณ คุณต้องลบรายการใดๆ Input SDK เวอร์ชันก่อนหน้าที่ติดตั้งในเกม และอัปเกรดเป็น ฉบับปัจจุบัน

หากต้องการเพิ่มอินพุต SDK v1.1.0-beta ในเกม โปรดดู การเพิ่ม SDK

กำหนดช่องแบบคงที่

สำหรับเวอร์ชัน 1.1.0-เบต้า แนวทางปฏิบัติที่ดีในการกำหนด InputActions InputGroups, InputContexts และ InputMap เป็นฟิลด์แบบคงที่ของ InputMappingProvider ชั้นเรียน เนื่องจากฟิลด์เหล่านี้จะเข้าถึงได้จาก ส่วนต่างๆ ของแอปพลิเคชันของคุณ:

#if PLAY_GAMES_PC
using Java.Lang;
using Java.Util;
using Google.Android.Libraries.Play.Games.Inputmapping;
using Google.Android.Libraries.Play.Games.Inputmapping.Datamodel;

public class InputSDKMappingProvider : InputMappingProviderCallbackHelper
{
    public static readonly string INPUT_MAP_VERSION = "1.0.0";

    private static readonly InputAction driveInputAction =
            InputAction.Create(...);
    private static readonly InputGroup roadInputGroup = InputGroup.Create(...);
    public static readonly InputContext roadControlsContext =
            InputContext.Create(...);
    public static readonly InputMap inputMap = InputMap.Create(...);

    public override InputMap OnProvideInputMap()
    {
        return inputMap;
    }
}
#endif

อัปเดต InputActions

วิธีInputAction.create()ของ SDK อินพุต 1.0.0-beta คือ เลิกใช้งานแล้ว InputAction มีตัวระบุเวอร์ชันและทำเครื่องหมายเป็นได้ ซ้ำได้หรือไม่ InputAction ที่กำหนดโดยใช้อินพุต SDK เมธอด 1.0.0-beta create() ที่ดำเนินการใหม่ได้โดยค่าเริ่มต้นและไม่มีการกำหนดเวอร์ชัน ข้อมูล:

InputAction ใน Input SDK 1.0.0-เบต้า

var driveAction = PlayInputAction.Create(
    "Drive",
    (long)InputEventIds.DRIVE,
    PlayInputControls.Create(
        new[] { AndroidKeyCode.KEYCODE_SPACE },
        new List<PlayMouseAction>()
    )
);

InputAction ใน Input SDK 1.1.0-เบต้า

private static readonly InputAction driveInputAction = InputAction.Create(
    "Drive",
    (long)InputEventIds.DRIVE,
    InputControls.Create(
        new[] { new Integer(AndroidKeyCode.KEYCODE_SPACE) }.ToJavaList(),
        new ArrayList<Integer>()),
    InputEnums.REMAP_OPTION_ENABLED
);

InputAction ใน Input SDK 1.1.0-เบต้า (มีสตริงเวอร์ชัน)

private static readonly InputAction driveInputAction = InputAction.Create(
    "Drive",
    InputControls.Create(
        new[] { new Integer(AndroidKeyCode.KEYCODE_SPACE) }.ToJavaList(),
        new ArrayList<Integer>()),
    InputIdentifier.Create(
        INPUT_MAP_VERSION, (long)InputEventIds.DRIVE),
    InputEnums.REMAP_OPTION_ENABLED
);

ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดเวอร์ชันการเชื่อมโยงคีย์ได้ที่ รหัสคีย์การติดตาม

อัปเดตกลุ่มอินพุต

ใน SDK อินพุต 1.1.0-beta คุณต้องระบุ InputGroup InputAction แต่ละรายการเป็นของ InputGroup ซึ่งเป็นคอลเล็กชันของ การกระทำที่เกี่ยวข้อง วิธีนี้ช่วยปรับปรุงการนำทางและการค้นพบได้ของตัวควบคุม ระหว่างการเล่นเกม เช่นเดียวกับInputAction คุณต้องมีตัวระบุไม่ซ้ำกัน ในการกระทำทั้งหมดใน InputContext เดียว InputGroup ต้องมี รหัสที่ไม่ซ้ำกันในกลุ่มที่มีอยู่

สำหรับตัวอย่างในส่วนนี้ เกมมีออบเจ็กต์ InputContext 2 รายการ แสดงเมนูหลักและการเล่นเกม มีการติดตามรหัสที่เหมาะสมสำหรับแต่ละรหัส InputGroup ในบริบทเหล่านี้โดยใช้การแจกแจงต่อไปนี้

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

var gameInputGroup = PlayInputGroup.Create(
    "Road controls",
    new List<PlayInputAction>
    {
        driveAction,
        turboAction,
        openGarageAction,
        openPgsAction,
        openStoreAction
    }
);

InputGroup ใน Input SDK 1.1.0-เบต้า

private static readonly InputGroup roadInputGroup = InputGroup.Create(
    "Road controls",
    new[]
    {
        driveInputAction,
        turboInputAction,
        openGarageInputAction,
        openPgsInputAction,
        openStoreInputAction,
    }.ToJavaList(),
    (long)InputGroupsIds.ROAD_CONTROLS,
    // All input actions of this group will be remappable unless specified
    // the contrary by the individual input actions.
    InputEnums.REMAP_OPTION_ENABLED
);

InputGroup ใน Input SDK 1.1.0-beta (มีสตริงเวอร์ชัน)

private static readonly InputGroup roadInputGroup = InputGroup.Create(
    "Road controls",
    new[]
    {
        driveInputAction,
        turboInputAction,
        openGarageInputAction,
        openPgsInputAction,
        openStoreInputAction,
    }.ToJavaList(),
    InputIdentifier.Create(
        INPUT_MAP_VERSION, (long)InputGroupsIds.ROAD_CONTROLS),
    // All input actions of this group will be remappable unless specified
    // the contrary by the individual input actions.
    InputEnums.REMAP_OPTION_ENABLED
);

ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดเวอร์ชันการเชื่อมโยงคีย์ได้ที่ รหัสคีย์การติดตาม

อัปเดต InputMap ของคุณ

เมธอด InputMap.create() ของ SDK อินพุต 1.0.0-beta ได้ เลิกใช้งานแล้ว อัปเดต InputMap เพื่อกำหนดตัวระบุเวอร์ชัน เลือกไม่ใช้ จากคุณลักษณะการรีแมป หรือกำหนดรายการคีย์ที่สงวนไว้สำหรับ ที่คุณไม่ต้องการให้ผู้ใช้นำไปแมปใหม่ ทุกๆ InputMap กำหนดโดยใช้เมธอด Input SDK 1.0.0-beta create() คือ แมปใหม่ได้โดยค่าเริ่มต้น ระบุด้วยรหัส 0 และไม่มี คีย์สงวนไว้

InputMap ใน Input SDK 1.0.0-เบต้า

var gameInputMap = PlayInputMap.Create(
    new List<PlayInputGroup>
    {
        gameInputGroup,
        menuInputGroup
    },
    PlayMouseSettings.Create(false, false)
);

InputMap ใน Input SDK 1.1.0-เบต้า


public static readonly string INPUT_MAP_VERSION = "1.0.0";
public static readonly long INPUT_MAP_ID = 0;

public static readonly InputMap inputMap = InputMap.Create(
    new[] { roadInputGroup, menuInputGroup }.ToJavaList(),
    MouseSettings.Create(false, false),
    InputIdentifier.Create(INPUT_MAP_VERSION, INPUT_MAP_ID),
    // Use ESC as reserved key
    InputEnums.REMAP_OPTION_ENABLED,
    new[]
    {
        InputControls.Create(new[]
        {
            new Integer(AndroidKeyCode.KEYCODE_ESCAPE)
        }.ToJavaList(),
        new ArrayList<Integer>())
    }.ToJavaList()
);

ขั้นต่อไปคืออะไร

ดำเนินการอัปเกรดเป็นรุ่นเบต้า 1.1.0 ต่อไปภายในวันที่ การกำหนดการควบคุมที่แตกต่างกันสำหรับฉากต่างๆ ใช้ InputContexts หรืออัปเดต UI ของเกมโดย รับการแจ้งเตือนเกี่ยวกับการรีแมปกิจกรรมโดยใช้ InputRemappingListeners

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