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

Bu rehberde, 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, 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 erişmek için kaplamayı açıp kontrolleri seçtikten sonra yeniden eşlemek istedikleri işlemi tıklarlar.

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, kullanıcıların yeniden eşlenen kontrollerini oyun oturumları boyunca kalıcı olması için yerel olarak saklar. Bu ayarlar yerel olarak depolandığından mobil deneyimi etkilemez ve PC Üzerinde Google Play Games kaldırıldığında silinir. Ayarlar birden fazla bilgisayar cihazında kalıcı olmaz.

Oyununuzda tuş yeniden eşlemeyi etkinleştirmek için Input SDK'sını yükseltmeniz gerekmez ancak desteklenmeyen bir yapılandırma algılanırsa oyununuzda yeniden eşleme devre dışı bırakılır.

Giriş yeniden eşleme deneyimini kontrol etmek istiyorsanız veya oyununuzda yeniden eşleme özelliği devre dışıysa 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ışı bırakmak için InputMap cihazınızı güncelleyin.

1.1.1-beta sürümüne yükselterek Google Play Games PC'deki 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ğırma işlevleri 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.

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 tuş kullanan 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ç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ın çakışma olmadan kullanılmasına olanak tanır. Bu sayede, bir oyunda oynarken zıplamak ve menü seçimini onaylamak için boşluk tuşu kullanılıyorsa oyuncular menülerde boşluk tuşunu enter tuşuyla, oynarken ise boşluk tuşunu yukarı ok tuşuyla ayrı ayrı yeniden eşleyebilir.

Aşağıdaki sıra ş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

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'ten 1.0.0-beta'ya yükseltme kılavuzunu okuyabilirsiniz.

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

  • Tetikleme bağlamı değişiklikleri.
  • Önemli harita oluşturma etkinlikleriyle ilgili bildirim alma
  • Eyleme, gruba, bağlama veya haritaya göre yeniden eşlemeyi devre dışı bırakma

Kurulum

Unity eklentisi v1.1.1-beta sürümünü kullanabilirsiniz. Oyununuza yüklenen önceki Input SDK sürümlerini silmeniz ve mevcut sürüme yükseltmeniz gerekir.

Input SDK v1.1.1-beta'yı oyununuza eklemek için SDK'yı ekleme başlıklı bölüme bakın.

Statik alanları tanımlama

1.1.1-beta sürümünde, InputActions, InputGroups, InputContexts ve InputMap alanlarını InputMappingProvider sınıfınızın statik alanları olarak tanımlamanız 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'larınızı güncelleme

Input SDK 1.0.0-beta'nın InputAction.create() yöntemi kullanım dışı bırakıldı. Bir InputAction, sürüm tanımlayıcısına sahiptir 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

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

Input SDK 1.1.1-beta'daki InputAction

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

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

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. Tıpkı bir InputAction öğesinin tek bir InputContext içindeki tüm işlemler arasında benzersiz bir tanımlayıcıya sahip olması gerektiği gibi, bir InputGroup öğesi 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:

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

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

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

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

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 kullanımdan kaldırıldı.1.0.0-beta 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ış anahtarları yoktur.

Input SDK 1.0.0-beta'daki InputMap

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

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

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.