คู่มือนี้อธิบายวิธีอัปเกรดเกมจาก Input SDK 1.0 เป็น 1.1 สำหรับ Unity คลิกที่นี่ เพื่อดูวิธีการสำหรับ Java และ Kotlin
บันทึกประจำรุ่น
Google Play Games บน PC รองรับการแมปการควบคุมด้วยแป้นพิมพ์ใหม่ตาม การเชื่อมโยงคีย์ที่เกมของคุณระบุโดยใช้ Input SDK
ผู้ใช้จะเข้าถึงฟีเจอร์นี้ได้โดยเปิดการซ้อนทับ เลือกการควบคุม แล้วคลิกการดำเนินการที่ต้องการแมปใหม่
Google Play Games บน PC จะแมปอินพุตที่ผู้ใช้แมปใหม่ทั้งหมดกับอินพุตเริ่มต้นของเกม วิธีนี้จะช่วยให้เกมไม่ต้องรับรู้ถึงการแมปใหม่ของผู้เล่น หาก คุณต้องการทราบอินพุตใหม่สำหรับการดำเนินการในเกม เช่น การแสดง การควบคุมด้วยแป้นพิมพ์ในเกม คุณอาจลงทะเบียน Callback เพื่อรับ การแจ้งเตือนสำหรับเหตุการณ์การแมปใหม่ได้ (ไม่บังคับ)
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
เมื่ออัปเกรด โปรดพิจารณาข้อยกเว้นต่อไปนี้
การกำหนดค่าที่ไม่รองรับ
ระบบจะปิดใช้การแมปอินพุตใหม่หากไม่เป็นไปตามเงื่อนไขต่อไปนี้
InputActionที่ใช้หลายปุ่มต้องประกอบด้วยแป้นกดร่วม และแป้นที่ไม่ใช่แป้นกดร่วม เช่นShift + A ใช้ได้ แต่A + B ,Ctrl + Alt และShift + A + Tab ใช้ไม่ได้ออบเจ็กต์
InputActionหรือInputGroupอย่างน้อย 2 รายการจะใช้ รหัสที่ไม่ซ้ำกันเดียวกันไม่ได้
ขอแนะนำ InputContext
InputContext ช่วยให้เกมใช้แป้นเดียวกันสำหรับการดำเนินการต่างๆ ในเกมได้โดยไม่เกิดข้อขัดแย้ง ด้วยวิธีนี้ หากเกมใช้ Space สำหรับการกระโดด
ระหว่างการเล่นเกมและสำหรับการยืนยันการเลือกเมนู ผู้เล่นจะสามารถ
รีแมป
แผนภาพลำดับต่อไปนี้แสดงวิธีการทำงานของ setInputContext() API ในเวลา
รันไทม์

อัปเกรด
เกมที่ใช้การติดตั้งใช้งาน Input SDK ก่อนหน้านี้จะยังคงรองรับ การแมปใหม่ขั้นพื้นฐาน เว้นแต่จะใช้การกำหนดค่าที่ไม่รองรับ หากเกมของคุณใช้ Input SDK เวอร์ชันเก่า โปรดอ่านคู่มือการอัปเกรดจาก 0.0.4 เป็น 1.0.0-beta
การอัปเกรดเป็น 1.1.1-beta จะเปิดใช้ฟีเจอร์ใหม่ๆ ซึ่งรวมถึง
- การทริกเกอร์การเปลี่ยนแปลงบริบท
- รับการแจ้งเตือนเกี่ยวกับเหตุการณ์การแมปคีย์
- การปิดใช้การแมปใหม่ต่อการดำเนินการ กลุ่ม บริบท หรือแผนที่
การติดตั้ง
ปลั๊กอิน Unity v1.1.1-beta พร้อมให้คุณใช้งานแล้ว คุณต้องลบ Input SDK เวอร์ชันก่อนหน้าทั้งหมดที่ติดตั้งในเกมและอัปเกรดเป็นเวอร์ชันปัจจุบัน
หากต้องการเพิ่ม Input SDK v1.1.1-beta ลงในเกม โปรดดูการเพิ่ม SDK
กำหนดฟิลด์แบบคงที่
สำหรับเวอร์ชัน 1.1.1-beta แนวทางปฏิบัติที่ดีคือการกำหนด
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() ของ Input SDK 1.0.0-beta แล้ว
InputAction มีตัวระบุเวอร์ชันและสามารถทำเครื่องหมายว่าเปลี่ยนเส้นทางได้หรือไม่ InputAction ที่กำหนดโดยใช้ Input SDK
1.0.0-beta create() จะแมปใหม่ได้โดยค่าเริ่มต้นและไม่มีข้อมูล
การกำหนดเวอร์ชัน
InputAction ใน Input SDK 1.0.0-beta
var driveAction = PlayInputAction.Create(
"Drive",
(long)InputEventIds.DRIVE,
PlayInputControls.Create(
new[] { AndroidKeyCode.KEYCODE_SPACE },
new List<PlayMouseAction>()
)
);
InputAction ใน Input SDK 1.1.1-beta
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.1-beta (พร้อมสตริงเวอร์ชัน)
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
);
ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดเวอร์ชันการเชื่อมโยงคีย์ได้ที่ การติดตามรหัสคีย์
อัปเดต InputGroups
ใน Input SDK 1.1.1-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
}
เราเลิกใช้งานเมธอด InputGroup.create() ของ Input SDK
1.0.0-beta แล้วเช่นเดียวกับ InputAction คุณต้องอัปเดต InputGroup ในเกม
ด้วยตัวระบุเวอร์ชันและบูลีนที่ระบุว่าออบเจ็กต์ InputAction
ในกลุ่มของคุณสามารถแมปใหม่ได้หรือไม่ กลุ่มที่สร้างด้วยเมธอด Input SDK 1.0.0-beta create() ที่เลิกใช้งานแล้วจะสามารถแมปใหม่ได้ มีรหัสเป็น 0
และรหัสเวอร์ชันเป็นสตริงว่าง ("")
InputGroup ใน Input SDK 1.0.0-beta
var gameInputGroup = PlayInputGroup.Create(
"Road controls",
new List<PlayInputAction>
{
driveAction,
turboAction,
openGarageAction,
openPgsAction,
openStoreAction
}
);
InputGroup ใน Input SDK 1.1.1-beta
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.1-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()เมธอดของ Input SDK 1.0.0-beta แล้ว
อัปเดต InputMap เพื่อกำหนดตัวระบุเวอร์ชัน เลือกไม่ใช้
ฟีเจอร์การแมปใหม่โดยสมบูรณ์ หรือกำหนดรายการคีย์ที่สงวนไว้สำหรับเกม
ที่คุณไม่ต้องการให้ผู้ใช้ใช้สำหรับการแมปใหม่ InputMap
ที่กำหนดโดยใช้เมธอด Input SDK 1.0.0-beta create() จะ
แมปใหม่ได้โดยค่าเริ่มต้น มีรหัส 0 และไม่มี
คีย์ที่สงวนไว้
InputMap ใน Input SDK 1.0.0-beta
var gameInputMap = PlayInputMap.Create(
new List<PlayInputGroup>
{
gameInputGroup,
menuInputGroup
},
PlayMouseSettings.Create(false, false)
);
InputMap ใน Input SDK 1.1.1-beta
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.1-เบต้าต่อไปโดย
กำหนดการควบคุมที่แตกต่างกันสำหรับฉากต่างๆ
โดยใช้ InputContexts หรืออัปเดต UI ของเกมโดย
รับการแจ้งเตือนเกี่ยวกับเหตุการณ์การแมปใหม่โดยใช้
InputRemappingListeners
เมื่ออัปเดตการผูกคีย์ โปรดดูแนวทางปฏิบัติแนะนำในการออกแบบการผูกคีย์ และพิจารณาข้อจำกัดและ ข้อจำกัดของฟีเจอร์การแมปใหม่