این راهنما توضیح می دهد که چگونه بازی خود را از SDK ورودی 1.0.0 بتا برای جاوا و کاتلین به نسخه 1.1.1 بتا ارتقا دهید. راهنمای ارتقای Unity را برای دستورالعملهای خاص Unity ببینید.
یادداشت های انتشار
بازیهای Google Play در رایانه شخصی از نقشهبرداری مجدد کنترلهای صفحهکلید بر اساس اتصالات کلیدی که بازی شما با استفاده از Input SDK ارائه میکند، پشتیبانی میکند.
کاربران با باز کردن همپوشانی ، انتخاب کنترلها و سپس کلیک کردن بر روی عملکردی که میخواهند دوباره نقشهبرداری کنند، به این ویژگی دسترسی پیدا میکنند.
بازیهای Google Play در رایانه شخصی، هر ورودی بازنگری شده توسط کاربر را به ورودی پیشفرض بازی شما نشان میدهد. به این ترتیب بازی شما مجبور نیست از نقشه مجدد بازیکن آگاه باشد. اگر نیاز به دانستن ورودی جدید برای یک اقدام درون بازی، مانند نمایش کنترلهای صفحه کلید در بازی خود دارید، میتوانید به صورت اختیاری یک تماس پاسخ ثبت کنید تا از رویدادهای نقشهبرداری مجدد مطلع شوید.
«بازیهای Google Play» روی رایانه، کنترلهای بازنگریشده هر کاربر را بهصورت محلی ذخیره میکند تا در جلسات بازی پایدار باشند. از آنجایی که این به صورت محلی ذخیره می شود، بر تجربه تلفن همراه تأثیر نمی گذارد و پس از حذف بازی های Google Play در رایانه شخصی حذف می شود. تنظیمات کنترل در چندین دستگاه رایانه شخصی وجود ندارد.
برای فعال کردن نقشهبرداری مجدد کلید در بازی خود، نیازی به ارتقای Input SDK ندارید، اما اگر پیکربندی پشتیبانینشده شناسایی شود، میتوان نقشهبرداری مجدد را برای بازیتان غیرفعال کرد.
اگر میخواهید تجربه نقشهبرداری مجدد ورودی را کنترل کنید، یا اگر ویژگی نقشهبرداری مجدد برای بازی شما غیرفعال است، مراحل زیر را برای حل کردن انجام دهید:
- به Input SDK
1.1.1-beta
ارتقا دهید. - برای جلوگیری از پیکربندیهای پشتیبانینشده، کلیدهای اتصال را بهروزرسانی کنید.
-
InputMap
خود را به روز کنید تا ویژگی remapping را فعال کنید.
اگر میخواهید از ویژگی remapping برای بازی خود انصراف دهید در حالی که هنوز نسخه فقط خواندنی پیوندهای کلید خود را نمایش میدهید، این مراحل را دنبال کنید:
- به Input SDK
1.1.1-beta
ارتقا دهید. -
InputMap
خود را به روز کنید تا ویژگی remapping را غیرفعال کنید.
میتوانید نسخه Input SDK خود را به 1.1.1-beta
ارتقا دهید تا با استفاده از InputContexts
، کنترلهایی را برای صحنههای مختلف بازی خود تعریف کنید، برای گوش دادن به رویدادهای نقشهبرداری مجدد، تعریف کنید. مجموعهای از کلیدهای رزرو شده که کاربر نمیتواند مجدداً روی آنها نقشهبرداری کند و ویژگی نگاشت مجدد را در هر InputAction
، InputGroup
یا InputMap
غیرفعال کند.
در حین ارتقاء به نسخه جدید SDK، استثناهای زیر را در نظر بگیرید:
تنظیمات پشتیبانی نشده
در صورت عدم رعایت شرایط زیر، نگاشت مجدد ورودی غیرفعال می شود:
یک
InputAction
که از چندین کلید استفاده می کند باید از یک کلید اصلاح کننده و غیر اصلاح کننده تشکیل شده باشد. به عنوان مثال،Shift + A معتبر است اماA + B ،Ctrl + Alt ، وShift + A + Tab نیستند.دو یا چند شیء
InputAction
یاInputGroup
نمی توانند شناسه منحصر به فرد یکسانی را به اشتراک بگذارند.
ارتقا دهید
Input SDK 1.1.1-beta با Input SDK 1.0.0-beta سازگار است. بازیهایی که از پیادهسازیهای قبلی 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
خود تعریف کنید، زیرا این فیلدها از قسمت های دیگر برنامه شما قابل دسترسی هستند:
کاتلین
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(...)
}
}
جاوا
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
تعریف شده با استفاده از روش Input SDK 1.0.0-beta
create()
به طور پیشفرض قابل استفاده مجدد است و فاقد اطلاعات نسخهسازی است:
InputAction در Input SDK 1.0.0-beta
کاتلین
val jumpInputAction = InputAction.create(
"Jump",
InputEventIds.JUMP.id,
InputControls.create(
listOf(KeyEvent.KEYCODE_SPACE),
emptyList()
)
)
جاوا
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-beta
کاتلین
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
}
جاوا
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-beta (با رشته نسخه)
کاتلین
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
)
جاوا
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
);
برای اطلاعات بیشتر در مورد نسخهسازی اتصالات کلید، به ردیابی شناسههای کلید مراجعه کنید.
InputGroups خود را به روز کنید
در Input SDK 1.1.1-beta
باید هر InputGroup
به طور منحصر به فرد شناسایی کنید. هر InputAction
متعلق به یک InputGroup
است -- مجموعه ای از اقدامات مرتبط. این امر ناوبری و قابلیت کشف کنترل ها را در طول بازی بهبود می بخشد. همانطور که InputAction
باید یک شناسه منحصر به فرد در بین تمام اقدامات در یک InputContext
داشته باشد، یک InputGroup
باید یک شناسه منحصر به فرد در بین گروه های موجود داشته باشد.
برای مثالهای این بخش، یک بازی دارای دو شیء InputContext
است که منوی اصلی و گیمپلی را نشان میدهد. شناسه های مناسب برای هر InputGroup
در این زمینه ها با استفاده از شمارش زیر ردیابی می شوند:
کاتلین
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
}
جاوا
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
خود را در بازی خود با یک شناسه نسخه و Boolean به روز کنید که نشان می دهد آیا اشیاء InputAction
در گروه های شما قابل استفاده مجدد هستند یا خیر. گروههایی که با روش منسوخ شده Input SDK 1.0.0-beta
create()
ایجاد شدهاند، قابل استفاده مجدد هستند، شناسه 0 دارند و شناسه نسخه یک رشته خالی است ( ""
):
InputGroup در Input SDK 1.0.0-beta
کاتلین
val movementInputGroup = InputGroup.create(
"Basic Movement",
listOf(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction)
)
جاوا
InputGroup movementInputGroup = InputGroup.create(
"Basic movement",
Arrays.asList(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction
)
);
InputGroup در Input SDK 1.1.1-beta
کاتلین
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
)
}
جاوا
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-beta (با رشته نسخه)
کاتلین
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
)
}
جاوا
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
خود را بهروزرسانی کنید تا یک شناسه نسخه اختصاص دهید، به طور کامل از ویژگی remapping انصراف دهید یا فهرستی از کلیدهای رزرو شده را برای بازی خود اختصاص دهید که نمیخواهید برای نقشهبرداری مجدد توسط کاربر استفاده شود. هر InputMap
تعریف شده با استفاده از روش Input SDK 1.0.0-beta
create()
به طور پیشفرض قابل استفاده مجدد است، با شناسه 0
شناسایی میشود و هیچ کلید رزروی ندارد.
InputMap در Input SDK 1.0.0-beta
کاتلین
val gameInputMap = InputMap.create(
listOf(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false)
)
جاوا
InputMap gameInputMap = InputMap.create(
Arrays.asList(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false)
);
InputMap در Input SDK 1.1.1-beta
کاتلین
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()))
)
}
جاوا
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()
)
)
);
بعدش چی
با اختصاص دادن کنترلهای مختلف برای صحنههای مختلف با استفاده از InputContexts
یا بهروزرسانی رابط کاربری بازیتان با دریافت اطلاعرسانی در مورد نقشهبرداری مجدد رویدادها با استفاده از InputRemappingListeners
، ارتقا خود را به نسخه 1.1.1-بتا ادامه دهید.
هنگام به روز رسانی کلیدهای صحافی خود، به بهترین شیوه ها برای طراحی اتصالات کلید خود نگاهی بیندازید و محدودیت ها و محدودیت های ویژگی نگاشت مجدد را در نظر بگیرید.