คำแนะนำนี้จะอธิบายวิธีอัปเกรดเกมของคุณจาก 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
- อัปเดต
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
อนุญาตให้เกมใช้คีย์เดียวกันสำหรับการดำเนินการต่างๆ ใน
เกมโดยไม่มีความขัดแย้ง ด้วยวิธีนี้ หากเกมใช้พื้นที่ในการกระโดด
ระหว่างการเล่นเกมและเพื่อยืนยันการเลือกเมนู ผู้เล่นจะสามารถ
แมป
แผนภาพลำดับต่อไปนี้แสดงวิธีการทำงานของ setInputContext()
API ที่
รันไทม์:
อัปเกรด
เกมที่ใช้ 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
เมื่ออัปเดตการเชื่อมโยงคีย์ ให้ดูที่ แนวทางปฏิบัติแนะนำสำหรับการออกแบบการเชื่อมโยงคีย์ รวมถึงพิจารณาข้อจำกัด ข้อจำกัดของฟีเจอร์การรีแมป