Java ve Kotlin için Giriş SDK'sını 1.1 sürümüne yükseltin

Bu kılavuzda, Java ve Kotlin için Input SDK'nın 1.0.0-beta sürümünden 1.1.1-beta sürümüne oyununuzu nasıl yükselteceğiniz açıklanmaktadır. Unity'ye özel talimatlar için Unity yükseltme kılavuzuna bakın.

Sürüm Notları

PC Üzerinde Google Play Games, Input SDK'yı kullanarak oyununuzun sağladığı tuş bağlamalarına göre klavye kontrollerinin yeniden eşlenmesini destekler.

Kullanıcılar bu özelliğe kaplamayı açıp kontrolleri seçtikten sonra yeniden eşlemek istedikleri işlemi tıklayarak erişir.

PC Üzerinde Google Play Games, kullanıcı tarafından yeniden eşlenen her girişi oyununuzun varsayılan girişine eşler. Bu sayede, oyununuzun oyuncunun yeniden eşlemesinden haberdar olması gerekmez. Oyununuzda klavye kontrollerini göstermek gibi bir oyun içi işlem için yeni girişi bilmeniz gerekiyorsa isteğe bağlı olarak yeniden eşleme etkinlikleri hakkında bildirim almak üzere bir geri çağırma kaydedebilirsiniz.

PC Üzerinde Google Play Games, her kullanıcının yeniden eşlenen kontrollerini yerel olarak depolar. Böylece, bu kontroller oyun oturumları boyunca kalıcı olur. Bu veriler yerel olarak depolandığından mobil deneyimi etkilemez ve PC Üzerinde Google Play Games kaldırıldığında silinir. Kontrol ayarları birden fazla bilgisayar cihazında kalıcı olmaz.

Oyununuzda tuş yeniden eşlemeyi etkinleştirmek için Input SDK'yı yükseltmeniz gerekmez ancak desteklenmeyen bir yapılandırma algılanırsa oyununuzda yeniden eşleme 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:

  • Input SDK 1.1.1-beta sürümüne yükseltin.
  • Desteklenmeyen yapılandırmaları önlemek için tüm 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ın salt okunur sürümünü göstermeye devam ederken oyununuzda yeniden eşleme özelliğini devre dışı bırakmak istiyorsanız aşağıdaki adımları uygulayın:

  • Input SDK 1.1.1-beta sürümüne yükseltin.
  • Yeniden eşleme özelliğini devre dışı olarak ayarlamak için InputMap cihazınızı güncelleyin.

1.1.1-beta sürümüne yükselterek Google Play Games PC'de gelişmiş yeniden eşleme özelliklerinden yararlanabilirsiniz. Bunun için InputContexts kullanarak oyununuzun farklı sahneleri için kontroller tanımlayabilir, yeniden eşleme etkinliklerini dinlemek üzere geri çağırmalar ekleyebilir, kullanıcının yeniden eşleyemeyeceği bir dizi ayrılmış anahtar tanımlayabilir ve InputAction, InputGroup veya InputMap başına yeniden eşleme özelliğini devre dışı bırakabilirsiniz.

Yeni SDK sürümüne yükseltirken 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 tuşun kullanıldığı bir InputAction, değiştirici ve değiştirici olmayan bir tuştan oluşmalıdır. Örneğin, üst karakter + A geçerlidir ancak A + B, Ctrl + Alt ve üst karakter + A + Sekme geçerli değildir.

  • İki veya daha fazla InputAction ya da InputGroup nesnesi aynı benzersiz kimliği paylaşamaz.

Yükselt

Input SDK 1.1.1-beta, Input SDK 1.0.0-beta ile geriye dönük uyumludur. Input SDK'nın önceki uygulamalarını kullanan oyunlar, desteklenmeyen bir yapılandırma kullanmadıkları sürece temel yeniden eşlemeyi desteklemeye devam eder. Oyununuz Input SDK'nın eski bir sürümünü kullanıyorsa 0.0.4 sürümünden 1.0.0-beta sürümüne yükseltme kılavuzunu okumanızı öneririz.

1.1.1-beta sürümüne yükseltme, aşağıdakiler de dahil olmak üzere yeni özellikleri etkinleştirir:

Yükseltme bağımlılığı

Input SDK'yı 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ünde, InputAction, InputGroup, InputContext ve InputMap nesnelerinizi InputMappingProvider sınıfınızın statik alanları olarak tanımlamanız iyi bir uygulamadır. Çünkü 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'larınızı güncelleme

Input SDK 1.0.0-beta'nın InputAction.create() yöntemi kullanım dışı bırakıldı. InputAction artık bir sürüm tanımlayıcısına sahip ve yeniden eşlenebilir veya eşlenemez olarak işaretlenebilir. Input SDK 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 bilgileri içermez:

Input SDK 1.0.0-beta'daki 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'daki 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'daki InputAction (sürüm dizesiyle)

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
);

Anahtar bağlamalarınızın sürümünü oluşturma hakkında daha fazla bilgi için Anahtar kimliklerini izleme başlıklı makaleyi inceleyin.

InputGroup'larınızı güncelleme

Giriş SDK'sında 1.1.1-beta her InputGroup öğesini benzersiz şekilde tanımlamanız gerekir. Her InputAction, InputGroup'ye (birbiriyle ilişkili işlemler koleksiyonu) aittir. Bu sayede oyun sırasında kontrollerde gezinmek ve kontrolleri bulmak daha kolay hale gelir. InputAction, tek bir InputContext içindeki tüm işlemler arasında benzersiz bir tanımlayıcıya sahip olmalıdır. Benzer şekilde, InputGroup de mevcut gruplar arasında benzersiz bir kimliğe sahip olmalıdır.

Bu bölümdeki örneklerde, bir oyunda ana menüyü ve oynanışı temsil eden iki InputContext nesnesi vardır. Bu bağlamlarda her InputGroup için uygun kimlikler aşağıdaki numaralandırma kullanılarak 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, Input SDK'sının InputGroup.create() yöntemi de 1.0.0-beta kullanımdan kaldırıldı. Oyununuzdaki InputGroup öğesini, gruplarınızdaki InputAction nesnelerinin yeniden eşlenebilir olup olmadığını belirten bir sürüm tanımlayıcısı ve boole ile güncellemeniz gerekir. Desteği sonlandırılan Input SDK 1.0.0-beta create() yöntemiyle oluşturulan gruplar yeniden eşlenebilir, kimliği 0'dır ve sürüm kimliği boş bir dizedir (""):

Input SDK 1.0.0-beta'daki 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
    )
);

Input SDK 1.1.1-beta'da 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'daki InputGroup (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
);

Anahtar bağlamalarınızın sürümünü oluşturma hakkında daha fazla bilgi için Anahtar kimliklerini izleme başlıklı makaleyi inceleyin.

InputMap'inizi güncelleme

Input SDK'nın InputMap.create() yöntemi 1.0.0-beta kullanımdan kaldı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 yeniden eşleme amacıyla kullanılmasını istemediğiniz ayrılmış anahtarların listesini atamak üzere InputMap dosyanızı güncelleyin. Input SDK 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ış tuşları yoktur.

Input SDK 1.0.0-beta'daki 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'daki 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?

Aşağıdaki yöntemlerle 1.1.1-beta sürümüne yükseltme işlemine devam edin: Farklı sahneler için farklı kontroller atama InputContexts kullanarak veya oyununuzun kullanıcı arayüzünü güncelleyerek Yeniden eşleme etkinlikleri hakkında bildirim alma InputRemappingListeners kullanarak.

Tuş bağlamalarınızı güncellerken Tuş bağlamalarınızı tasarlarken dikkat edilmesi gerekenler başlıklı makaleye göz atın ve yeniden eşleme özelliğinin kısıtlamalarını ve sınırlamalarını göz önünde bulundurun.