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 özgü talimatlar için Unity yükseltme kılavuzuna bakı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 erişmek için yer paylaşımını açıp kontrolleri seçtikten sonra yeniden eşlemek istedikleri işlemi tıklar.
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 için bildirim almak üzere 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 fazla PC cihazında kalıcı değildir.
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 yeniden eşleme oyununuz için devre dışı bırakılabilir.
Giriş yeniden eşleme deneyimini kontrol etmek istiyorsanız veya yeniden eşleme özelliği oyununuzda 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 geçin. - 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ı sahneleri için kontrolleri tanımlamak, yeniden eşleme etkinliklerini dinlemek üzere geri çağırma işlevleri eklemek, kullanıcının yeniden eşleyemeyeceği bir dizi ayrılmış anahtar tanımlamak ve yeniden eşleme özelliğini InputAction
, InputGroup
veya InputMap
başına devre dışı bırakmak amacıyla InputContexts
'ü kullanarak PC'de Google Play Games'in gelişmiş yeniden eşleme özelliklerinden yararlanmak için Giriş SDK'nızı 1.1.1-beta
sürümüne yükseltebilirsiniz.
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. Oyununuzda Input SDK'nın önceki bir sürümü kullanılıyorsa 0.0.4'ten 1.0.0-beta sürümüne yükseltme kılavuzunu okuyabilirsiniz.
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 sahiptir ve yeniden atanabilir veya atanamaz olarak işaretlenebilir. Giriş SDK'sı 1.0.0-beta
create()
yöntemi kullanılarak tanımlanan bir InputAction
varsayılan olarak yeniden atanabilir ve sürüm bilgisi içermez:
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()
)
);
Input SDK 1.1.1-beta'da InputAction
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 sırasında kontrollerin gezinmesi ve bulunabilirliği iyileştirilir. 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ı 1.0.0-beta
'nin InputGroup.create()
yönteminin desteği de sonlandırılmıştır. Oyununuzdaki InputGroup
öğesini, bir sürüm tanımlayıcısıyla ve gruplarınızdaki InputAction
öğelerinin yeniden atanabilir olup olmadığını belirten 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 atanabilir, 0 kimliğine sahiptir ve sürüm kimliği boş bir dizedir (""
):
Input SDK 1.0.0-beta sürümünde 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
);
Input SDK 1.1.1-beta'da InputGroup (sürüm dizesi ile)
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
öğenizi 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ış anahtarları yoktur.
Input SDK 1.0.0-beta sürümünde 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ı güncellerken Tuş bağlamalarınızı tasarlamayla ilgili en iyi uygulamalar başlıklı makaleyi inceleyin ve yeniden eşleme özelliğinin kısıtlamaları ile sınırlamalarını göz önünde bulundurun.