คู่มือนี้อธิบายวิธีอัปเกรดเกมจาก Input SDK เวอร์ชัน 1.0 เป็น 1.1 สำหรับ Unity คลิกที่นี่เพื่อดูวิธีการสำหรับ Java และ Kotlin
บันทึกประจำรุ่น
Google Play Games บน PC รองรับการแมปการควบคุมด้วยแป้นพิมพ์ใหม่ตามการเชื่อมโยงแป้นพิมพ์ที่เกมของคุณมีให้โดยใช้ Input SDK
ผู้ใช้เข้าถึงฟีเจอร์นี้ได้โดยการเปิดการวางซ้อน เลือกการควบคุม แล้วคลิกการดำเนินการที่ต้องการรีแมป
Google Play Games บน PC จะแมปอินพุตทั้งหมดที่ผู้ใช้แมปใหม่ไปยังอินพุตเริ่มต้นของเกม วิธีนี้ทำให้เกมของคุณไม่ต้องรับรู้ถึงการรีแมปของผู้เล่น หากต้องการทราบอินพุตใหม่สําหรับการดําเนินการในเกม เช่น การแสดงการควบคุมด้วยแป้นพิมพ์ในเกม คุณสามารถเลือกลงทะเบียนการเรียกกลับเพื่อรับการแจ้งเตือนสําหรับการแมปเหตุการณ์ใหม่
Google Play Games บน PC จะจัดเก็บการควบคุมที่ผู้ใช้แมปใหม่ไว้ในเครื่องเพื่อให้ใช้งานได้ตลอดเซสชันการเล่นเกม เนื่องจากการตั้งค่าเหล่านี้จัดเก็บไว้ในเครื่อง การตั้งค่าดังกล่าวจึงไม่ส่งผลต่อประสบการณ์การใช้งานบนอุปกรณ์เคลื่อนที่และจะถูกลบออกเมื่อคุณถอนการติดตั้ง Google Play Games บน PC การตั้งค่าจะไม่คงอยู่ในอุปกรณ์ PC หลายเครื่อง
คุณไม่จำเป็นต้องอัปเกรด Input SDK เพื่อเปิดใช้การแมปแป้นใหม่ในเกม แต่ระบบจะปิดใช้การแมปใหม่สำหรับเกมหากตรวจพบการกำหนดค่าที่ไม่รองรับ
หากต้องการควบคุมประสบการณ์การรีแมปอินพุตหรือปิดใช้ฟีเจอร์การรีแมปสำหรับเกม โปรดทำตามขั้นตอนต่อไปนี้
- อัปเกรดเป็น 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
ช่วยให้เกมใช้แป้นเดียวกันสำหรับการดำเนินการที่แตกต่างกันในเกมได้โดยไม่เกิดข้อขัดแย้ง วิธีนี้จะทำให้หากเกมใช้พื้นที่สำหรับการข้ามระหว่างการเล่นเกมและเพื่อยืนยันการเลือกเมนู ผู้เล่นแต่ละคนจะรีแมป
แผนภาพลำดับต่อไปนี้แสดงวิธีการทำงานของ setInputContext()
API ในรันไทม์
อัปเกรด
เกมที่ใช้การติดตั้งใช้งาน Input SDK เวอร์ชันก่อนหน้าจะยังคงรองรับการแมปใหม่พื้นฐาน เว้นแต่จะใช้การกำหนดค่าที่ไม่รองรับ หากเกมของคุณใช้ Input SDK เวอร์ชันเก่า โปรดอ่านคำแนะนำในการอัปเกรดจาก 0.0.4 เป็น 1.0.0-เบต้า
การอัปเกรดเป็น 1.1.1-เบต้าจะเปิดใช้ฟีเจอร์ใหม่ๆ ต่อไปนี้
- การเปลี่ยนแปลงบริบทที่ทริกเกอร์
- การรับการแจ้งเตือนเหตุการณ์การแมปที่สำคัญ
- การปิดใช้การแมปใหม่ตามการดำเนินการ กลุ่ม บริบท หรือแผนที่
การติดตั้ง
ปลั๊กอิน Unity v1.1.1-beta พร้อมใช้งานสำหรับคุณ คุณต้องลบ Input SDK เวอร์ชันก่อนหน้าที่ติดตั้งในเกมและอัปเกรดเป็นเวอร์ชันปัจจุบัน
หากต้องการเพิ่ม Input SDK v1.1.1-เบต้าลงในเกม โปรดดูหัวข้อการเพิ่ม SDK
กําหนดฟิลด์แบบคงที่
สําหรับเวอร์ชัน 1.1.1-เบต้า เราขอแนะนําให้กําหนด 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-เบต้า
var driveAction = PlayInputAction.Create(
"Drive",
(long)InputEventIds.DRIVE,
PlayInputControls.Create(
new[] { AndroidKeyCode.KEYCODE_SPACE },
new List<PlayMouseAction>()
)
);
InputAction ใน Input SDK 1.1.1-เบต้า
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-เบต้า (มีสตริงเวอร์ชัน)
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
}
เช่นเดียวกับ InputAction
เราได้เลิกใช้งานเมธอด InputGroup.create()
ของ Input 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.1-เบต้า
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-เบต้า (มีสตริงเวอร์ชัน)
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
ที่กําหนดโดยใช้เมธอด 1.0.0-beta
create()
ของ Input SDK ทั้งหมดจะกำหนดใหม่ได้ โดยค่าเริ่มต้นจะระบุด้วยรหัส 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.1-เบต้า
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
เมื่ออัปเดตการเชื่อมโยงคีย์ โปรดดูแนวทางปฏิบัติแนะนำสำหรับการออกแบบการเชื่อมโยงคีย์และพิจารณาข้อจำกัดและข้อจำกัดของฟีเจอร์การรีแมป