Unity için Giriş SDK'sını 1.1 sürümüne yükseltme

Bu kılavuzda, oyununuzu Unity için 1.0 sürümünden 1.1 sürümüne nasıl yükselteceğiniz açıklanmaktadır. Java ve Kotlin talimatları için burayı tıklayı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 erişebilir ve ardından yeniden eşlemek istedikleri işlemi tıklayabilir.

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, oyun oturumları boyunca kalıcı olması için kullanıcının yeniden eşlenen kontrollerini yerel olarak depolar. Bu ayarlar yerel olarak depolandığından mobil deneyimi etkilemez ve PC'de Google Play Games'in kaldırılmasıyla silinir. Ayarlar birden fazla PC cihazında saklanmaz.

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ılır.

Giriş yeniden eşleme deneyimini kontrol etmek istiyorsanız veya yeniden eşleme özelliği oyununuzda devre dışıysa aşağıdaki adımları uygulayın:

Tuş bağlamalarınızın salt okunur sürümünü görüntülemeye devam ederken oyununuzun yeniden eşleme özelliğini devre dışı bırakmak istiyorsanız şu 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 öğenizi 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ımlayıp InputAction, InputGroup veya 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

Yükseltme yaparken 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 ancak A + B, Ctrl + Alt ve Üst Karakter + A + Sekme geçersizdir.

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

InputContext ile tanışın

InputContext, oyununuzda farklı işlemler için aynı anahtarı çakışma olmadan kullanmasına olanak tanır. Böylece, bir oyun oyun sırasında zıplamak ve menü seçimini onaylamak için alan kullanırsa oyuncular boşluk'u tek tek yeniden eşleyerek menülere girebilir ve boşluk ile yukarı ok arasında seçim yapabilirler.

Aşağıdaki ardışık düzen şeması, setInputContext() API'nin çalışma zamanında nasıl çalıştığını gösterir:

Tuşlar yeniden eşlenirken Giriş SDK'sının akışını gösteren şema.

Yükselt

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'sının eski 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ükselterek aşağıdakiler gibi yeni özellikleri kullanabilirsiniz:

  • Bağlam değişikliklerini tetikleme.
  • Anahtar eşleme etkinlikleriyle ilgili bildirim alma
  • İşlem, grup, bağlam veya harita başına yeniden eşlemeyi devre dışı bırakma.

Kurulum

Unity eklentisi 1.1.1-beta sürümünü kullanabilirsiniz. Oyununuza yüklenen Giriş SDK'sının önceki sürümlerini silmeniz ve mevcut sürüme yükseltmeniz gerekir.

Giriş SDK'sı 1.1.1-beta sürümünü oyununuza eklemek için SDK'yı ekleme bölümüne bakın.

Statik alanları tanımlama

1.1.1-beta sürümü için InputActions, InputGroups, InputContexts ve InputMap alanlarınızı 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:

#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 öğelerinizi güncelleme

Giriş SDK'sı 1.0.0-beta'nın InputAction.create() yöntemi için destek sonlandırıldı. InputAction öğesinin bir sürüm tanımlayıcısı vardır 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 eşlenebilir ve sürüm bilgileri içermez:

Input SDK 1.0.0-beta'da InputAction

var driveAction = PlayInputAction.Create(
    "Drive",
    (long)InputEventIds.DRIVE,
    PlayInputControls.Create(
        new[] { AndroidKeyCode.KEYCODE_SPACE },
        new List<PlayMouseAction>()
    )
);

Giriş SDK'sı 1.1.1-beta'da Giriş İşlemi

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

Input SDK 1.1.1-beta'da InputAction (sürüm dizesi ile)

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

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ı 1.1.1-beta'de her bir InputGroup öğesini 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. Bir InputAction'ün tek bir InputContext'daki tüm işlemler arasında benzersiz bir tanımlayıcısının olması gerektiği gibi, bir InputGroup'ün 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:

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 eşleştirilebilir. Bu gruplar kimliği 0'dır ve sürüm kimliği boş bir dizedir (""):

Giriş SDK'sı 1.0.0-beta'da Giriş Grubu

var gameInputGroup = PlayInputGroup.Create(
    "Road controls",
    new List<PlayInputAction>
    {
        driveAction,
        turboAction,
        openGarageAction,
        openPgsAction,
        openStoreAction
    }
);

Giriş SDK'sı 1.1.1-beta sürümünde InputGroup

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

Input SDK 1.1.1-beta'da InputGroup (sürüm dizesi ile)

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

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

1.0.0-beta Giriş SDK'sının InputMap.create() yönteminin desteği sonlandırıldı. InputMap sürümünüzü güncelleyerek bir sürüm tanımlayıcısı atayın, yeniden eşleme özelliğini tamamen devre dışı bırakın veya oyununuz için kullanıcı tarafından yeniden eşlemek için kullanılmasını istemediğiniz ayrılmış anahtarların listesini atayın. 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'da InputMap

var gameInputMap = PlayInputMap.Create(
    new List<PlayInputGroup>
    {
        gameInputGroup,
        menuInputGroup
    },
    PlayMouseSettings.Create(false, false)
);

Input SDK 1.1.1-beta'da InputMap


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

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.