Unity oyunlarında kayıtlı oyunlar

Bu konularda, Unity'de Play Games Hizmetleri için kaydedilmiş oyunların nasıl kullanılacağı açıklanmaktadır. oyunlar.

Başlamadan önce

Kaydedilen oyunlar kullanıcı arayüzünü göster

Kayıtlı bir oyun girişini seçmek veya oluşturmak için kullanılan standart kullanıcı arayüzü, arıyor:

    void ShowSelectUI() {
        uint maxNumToDisplay = 5;
        bool allowCreateNew = false;
        bool allowDelete = true;

        ISavedGameClient savedGameClient = PlayGamesPlatform.Instance.SavedGame;
        savedGameClient.ShowSelectSavedGameUI("Select saved game",
            maxNumToDisplay,
            allowCreateNew,
            allowDelete,
            OnSavedGameSelected);
    }


    public void OnSavedGameSelected (SelectUIStatus status, ISavedGameMetadata game) {
        if (status == SelectUIStatus.SavedGameSelected) {
            // handle selected game save
        } else {
            // handle cancel or error
        }
    }

Kaydedilmiş bir oyunu açma

Kaydedilmiş bir oyuna veri okumak veya ona veri yazabilmek için kaydedilmiş oyunun açıldı. Kayıtlı oyun durumu, cihazda yerel olarak önbelleğe alınıp kaydedilen verilerin durumunda çakışmalarla karşılaşmak mümkündür. Bir cihaz, durumu buluta kaydetmeye çalışırken ancak şu anda bulutta bulunan veriler farklı bir cihaz tarafından yazılmış. Bu çatışmalar Ancak kaydedilen oyun verilerini açarken sorunun çözülmesi gerekiyor.

Anlaşmazlık çözümünü ele alan 2 açık yöntem vardır, birincisi OpenWithAutomaticGCPWResolution, standart bir çözüm stratejisini kabul eder ve çakışmaları otomatik olarak çözer. Diğer yöntem olan OpenWithManualOverResolution, manuel olarak çözmeniz gerekir.

Daha fazla ayrıntı için GooglePlayGames/BasicApi/SavedGame/ISavedGameClient.cs sayfasına göz atın. birlikte çalışır.

    void OpenSavedGame(string filename) {
        ISavedGameClient savedGameClient = PlayGamesPlatform.Instance.SavedGame;
        savedGameClient.OpenWithAutomaticConflictResolution(filename, DataSource.ReadCacheOrNetwork,
            ConflictResolutionStrategy.UseLongestPlaytime, OnSavedGameOpened);
    }

    public void OnSavedGameOpened(SavedGameRequestStatus status, ISavedGameMetadata game) {
        if (status == SavedGameRequestStatus.Success) {
            // handle reading or writing of saved game.
        } else {
            // handle error
        }
    }

Kaydedilmiş bir oyun yazma

Kaydedilen oyun dosyası açıldıktan sonra oyun durumunu kaydetmek için yazılabilir. Bu işlem, CommitUpdate çağrısı yapılarak gerçekleştirilir. RACI matrisinde CommitUpdate:

  1. Açık çağrılardan birine aktarılan geri çağırmaya iletilen kayıtlı oyun meta verileri.
  2. meta verilerde değişiklik yapmanıza yardımcı olur.
  3. verilerin gerçek bayt dizisi
  4. kaydetme işlemi tamamlandığında çağrı yapmak için bir geri çağırma.
    void SaveGame (ISavedGameMetadata game, byte[] savedData, TimeSpan totalPlaytime) {
        ISavedGameClient savedGameClient = PlayGamesPlatform.Instance.SavedGame;

        SavedGameMetadataUpdate.Builder builder = new SavedGameMetadataUpdate.Builder();
        builder = builder
            .WithUpdatedPlayedTime(totalPlaytime)
            .WithUpdatedDescription("Saved game at " + DateTime.Now());
        if (savedImage != null) {
            // This assumes that savedImage is an instance of Texture2D
            // and that you have already called a function equivalent to
            // getScreenshot() to set savedImage
            // NOTE: see sample definition of getScreenshot() method below
            byte[] pngData = savedImage.EncodeToPNG();
            builder = builder.WithUpdatedPngCoverImage(pngData);
        }
        SavedGameMetadataUpdate updatedMetadata = builder.Build();
        savedGameClient.CommitUpdate(game, updatedMetadata, savedData, OnSavedGameWritten);
    }

    public void OnSavedGameWritten (SavedGameRequestStatus status, ISavedGameMetadata game) {
        if (status == SavedGameRequestStatus.Success) {
            // handle reading or writing of saved game.
        } else {
            // handle error
        }
    }

    public Texture2D getScreenshot() {
        // Create a 2D texture that is 1024x700 pixels from which the PNG will be
        // extracted
        Texture2D screenShot = new Texture2D(1024, 700);

        // Takes the screenshot from top left hand corner of screen and maps to top
        // left hand corner of screenShot texture
        screenShot.ReadPixels(
            new Rect(0, 0, Screen.width, (Screen.width/1024)*700), 0, 0);
        return screenShot;
    }

Kaydedilmiş bir oyunu okuma

Kaydedilen oyun dosyası açıldıktan sonra okunarak oyun durumunu yükleyebilir. Bu ReadBinaryData çağrısı yapılarak yapılır.

    void LoadGameData (ISavedGameMetadata game) {
        ISavedGameClient savedGameClient = PlayGamesPlatform.Instance.SavedGame;
        savedGameClient.ReadBinaryData(game, OnSavedGameDataRead);
    }

    public void OnSavedGameDataRead (SavedGameRequestStatus status, byte[] data) {
        if (status == SavedGameRequestStatus.Success) {
            // handle processing the byte array data
        } else {
            // handle error
        }
    }

Kaydedilmiş bir oyunu silme

Kaydedilen oyun dosyası açıldıktan sonra silinebilir. Bu işlem, Sil.

    void DeleteGameData (string filename) {
        // Open the file to get the metadata.
        ISavedGameClient savedGameClient = PlayGamesPlatform.Instance.SavedGame;
        savedGameClient.OpenWithAutomaticConflictResolution(filename, DataSource.ReadCacheOrNetwork,
            ConflictResolutionStrategy.UseLongestPlaytime, DeleteSavedGame);
    }

    public void DeleteSavedGame(SavedGameRequestStatus status, ISavedGameMetadata game) {
        if (status == SavedGameRequestStatus.Success) {
            ISavedGameClient savedGameClient = PlayGamesPlatform.Instance.SavedGame;
            savedGameClient.Delete(game);
        } else {
            // handle error
        }
    }