Bu kılavuzda, oyununuzu Java ve Kotlin için 1.0.0-beta Giriş SDK'sından 1.1.1-beta sürümüne nasıl yükselteceğiniz açıklanmaktadır. Unity'ye özel talimatlar için Unity yükseltme kılavuzuna göz atın.
Sürüm Notları
PC Üzerinde Google Play Games, oyununuzun Giriş SDK'sını kullanarak sağladığı tuş bağlamalarına göre klavye kontrollerinin yeniden haritalanmasını destekler.
Kullanıcılar bu özelliğe yer paylaşımını açıp kontrolleri seçerek ve ardından yeniden eşlemek istedikleri işlemi tıklayarak erişebilir.
PC Üzerinde Google Play Games, kullanıcı tarafından yeniden eşlenen her girişi oyununuzun varsayılan girişiyle eşler. Bu sayede oyununuzun, oyuncunun yeniden eşlemesini bilmesi gerekmez. Oyun içi bir işlem için yeni girişi bilmeniz gerekiyorsa (ör. oyununuzda klavye kontrollerini görüntüleme) isteğe bağlı olarak yeniden eşleme etkinlikleri hakkında bildirim almak için geri çağırma işlevi kaydedebilirsiniz.
PC Üzerinde Google Play Games, her kullanıcının yeniden eşlenen kontrollerini yerel olarak depolar. Böylece, oyun oturumlarında bu kontrolleri kullanmaya devam edebilirsiniz. Bu veri yerel olarak depolandığından mobil deneyimi etkilemez ve PC'de Google Play Games'in kaldırılmasıyla silinir. Kontrol ayarları, birden çok PC cihazında kalıcı olmaz.
Oyununuzda tuş yeniden eşlemeyi etkinleştirmek için Giriş SDK'sını yükseltmeniz gerekmez ancak desteklenmeyen bir yapılandırma algılanırsa oyununuz için yeniden eşleme devre dışı bırakılabilir.
Giriş yeniden eşleme deneyimini kontrol etmek istiyorsanız veya oyununuz için yeniden eşleme özelliği devre dışıysa sorunu çözmek için aşağıdaki adımları uygulayın:
- Giriş SDK'sı
1.1.1-beta
sürümüne yükseltin. - Desteklenmeyen yapılandırmaları önlemek için tuş bağlamalarını güncelleyin.
- Yeniden eşleme özelliğini etkin olarak ayarlamak için
InputMap
cihazınızı güncelleyin.
Tuş bağlamalarınız için salt okunur sürümü göstermeye devam ederken oyununuzda yeniden eşleme özelliğini devre dışı bırakmak istiyorsanız aşağıdaki adımları uygulayın:
- Giriş SDK'sı
1.1.1-beta
sürümüne geçin. - Yeniden eşleme özelliğini devre dışı olarak ayarlamak için
InputMap
cihazınızı güncelleyin.
Oyununuzun farklı sahnelerine yönelik kontrolleri tanımlamak, yeniden eşleme etkinliklerini dinlemek için geri çağırmalar eklemek, kullanıcının yeniden eşleyemeyeceği bir dizi ayrılmış tuş tanımlamak ve InputAction
, InputGroup
ya da InputMap
uyarınca yeniden eşleme özelliğini devre dışı bırakmak için PC Üzerinde Google Play Games'de gelişmiş yeniden eşleme özelliklerinden yararlanmak üzere giriş SDK'nızın sürümünü 1.1.1-beta
sürümüne yükseltebilirsiniz.InputContexts
Yeni SDK sürümüne geçerken aşağıdaki istisnaları göz önünde bulundurun:
Desteklenmeyen yapılandırmalar
Aşağıdaki koşullar karşılanmazsa giriş yeniden eşleme devre dışı bırakılır:
Birden fazla anahtar kullanan bir
InputAction
, bir değiştirici ve değiştirici olmayan anahtardan oluşmalıdır. Örneğin,Üst Karakter + A geçerlidir ancakA + B ,Ctrl + Alt veÜst Karakter + A + Sekme geçerli değildir.İki veya daha fazla
InputAction
ya daInputGroup
nesnesi aynı benzersiz kimliği paylaşamaz.
Yükselt
Giriş SDK'sı 1.1.1-beta, Giriş SDK'sı 1.0.0-beta ile geriye dönük uyumludur. Giriş SDK'sının önceki uygulamalarını kullanan oyunlar, desteklenmeyen bir yapılandırma kullanmadıkları sürece temel yeniden eşlemeyi desteklemeye devam eder. Oyununuz Giriş SDK'sının önceki bir sürümünü kullanıyorsa 0.0.4'ten 1.0.0-beta'ya kadar olan yükseltme kılavuzunu okumanızı öneririz.
1.1.1-beta sürümüne yükseltme yaptığınızda aşağıdakiler gibi yeni özelliklerden yararlanabilirsiniz:
- Sahne kontrolü değişikliklerini tetikleme.
- Önemli eşleme etkinlikleriyle ilgili bildirim alma.
- İşlem, Grup, Bağlam veya Harita başına yeniden eşlemeyi devre dışı bırakma.
Bağımlılığı yükseltme
Giriş SDK'sını içe aktarmak için Gradle kullanıyorsanız en yeni sürüme yükseltin:
// build.gradle
dependencies {
...
implementation 'com.google.android.libraries.play.games:inputmapping:1.1.1-beta'
...
}
Statik alanları tanımlama
1.1.1-beta
sürümü için InputAction
, InputGroup
, InputContext
ve InputMap
nesnelerinizi InputMappingProvider
sınıfınızın statik alanları olarak tanımlamak iyi bir uygulamadır. Bu alanlara uygulamanızın diğer bölümlerinden erişilebilir:
Kotlin
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(...)
}
}
Java
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 öğelerinizi güncelleme
Giriş SDK'sı 1.0.0-beta
'nın InputAction.create()
yöntemi için destek sonlandırıldı. InputAction
artık bir sürüm tanımlayıcısına sahip ve yeniden eşlenebilir veya değil olarak işaretlenebilir. Giriş SDK'sı 1.0.0-beta
create()
yöntemi kullanılarak tanımlanan bir InputAction
, varsayılan olarak yeniden eşlenebilir ve sürüm oluşturma bilgisine sahip değildir:
Input SDK 1.0.0-beta'da InputAction
Kotlin
val jumpInputAction = InputAction.create(
"Jump",
InputEventIds.JUMP.id,
InputControls.create(
listOf(KeyEvent.KEYCODE_SPACE),
emptyList()
)
)
Java
InputAction moveUpInputAction = InputAction.create(
"Move Up",
InputEventIds.MOVE_UP.ordinal(),
InputControls.create(
Collections.singletonList(KeyEvent.KEYCODE_W),
Collections.emptyList()
)
);
Giriş SDK'sı 1.1.1-beta'da Giriş İşlemi
Kotlin
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
}
Java
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
);
Input SDK 1.1.1-beta'da InputAction (sürüm dizesi ile)
Kotlin
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
)
Java
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
);
Tuş bağlamalarınızı sürümlendirme hakkında daha fazla bilgi için Anahtar kimliklerini izleme başlıklı makaleyi inceleyin.
InputGroups'ınızı güncelleme
Giriş SDK'sında 1.1.1-beta
, her InputGroup
'ı benzersiz şekilde tanımlamanız gerekir. Her InputAction
, ilgili işlemlerin bir koleksiyonu olan bir InputGroup
'a aittir. Bu sayede, oyun esnasında kontrollerde gezinmeyi ve keşfedilebilirliği
iyileştirebilirsiniz. InputAction
'ün tek bir InputContext
'daki tüm işlemler arasında benzersiz bir tanımlayıcıya sahip olması gerektiği gibi, InputGroup
'ün de mevcut gruplar arasında benzersiz bir kimliği olmalıdır.
Bu bölümdeki örneklerde, bir oyunda ana menüyü ve oynanabilirliği temsil eden iki InputContext
nesnesi vardır. Aşağıdaki listeleme kullanılarak bu bağlamlarda her InputGroup
için uygun kimlikler izlenir:
Kotlin
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
}
Java
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
gibi, Giriş SDK'sının
1.0.0-beta
InputGroup.create()
yöntemi de kullanımdan kaldırılmıştır. Oyununuzdaki InputGroup
öğenizi bir sürüm tanımlayıcısı ve gruplarınızdaki InputAction
nesnelerinin yeniden eşlenebilir olup olmadığını gösteren bir boole değeriyle güncellemeniz gerekir. Desteği sonlandırılan Giriş SDK'sı 1.0.0-beta
create()
yöntemiyle oluşturulan gruplar yeniden eşleştirilebilir. Bu gruplar kimliği 0'dır ve sürüm kimliği boş bir dizedir (""
):
Input SDK 1.0.0-beta'da InputGroup
Kotlin
val movementInputGroup = InputGroup.create(
"Basic Movement",
listOf(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction)
)
Java
InputGroup movementInputGroup = InputGroup.create(
"Basic movement",
Arrays.asList(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction
)
);
Giriş SDK'sı 1.1.1-beta sürümünde InputGroup
Kotlin
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
)
}
Java
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
);
Giriş SDK'sı 1.1.1-beta'da Giriş Grubu (sürüm dizesiyle)
Kotlin
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
)
}
Java
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
);
Tuş bağlamalarınızı sürümlendirme hakkında daha fazla bilgi için Anahtar kimliklerini izleme başlıklı makaleyi inceleyin.
InputMap'inizi güncelleme
Input SDK 1.0.0-beta
'nın InputMap.create()
yönteminin desteği sonlandırıldı. Bir sürüm tanımlayıcısı atamak, yeniden eşleme özelliğini tamamen devre dışı bırakmak veya oyununuz için kullanıcı tarafından yeniden eşleme için kullanılmasını istemediğiniz ayrılmış anahtarların listesini atamak üzere InputMap
dosyanızı güncelleyin. Giriş SDK'sı 1.0.0-beta
create()
yöntemi kullanılarak tanımlanan her InputMap
varsayılan olarak yeniden eşlenebilir, 0
kimliğiyle tanımlanır ve ayrılmış anahtara sahip değildir.
Input SDK 1.0.0-beta'da InputMap
Kotlin
val gameInputMap = InputMap.create(
listOf(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false)
)
Java
InputMap gameInputMap = InputMap.create(
Arrays.asList(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false)
);
Input SDK 1.1.1-beta'da InputMap
Kotlin
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()))
)
}
Java
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()
)
)
);
Sırada ne var?
InputContexts
kullanarak farklı sahneler için farklı kontroller atayın veya InputRemappingListeners
kullanarak yeniden eşleme etkinlikleri hakkında bildirim alın ve oyununuzun kullanıcı arayüzünü güncelleyin.
Tuş bağlamalarınızı güncellerken Anahtar bağlamalarınızı tasarlamayla ilgili en iyi uygulamalar bölümüne göz atın ve yeniden eşleme özelliğinin kısıtlamalarını ve sınırlamalarını göz önünde bulundurun.