ইউনিটি গেমগুলিতে সংরক্ষিত গেমগুলি

ইউনিটি গেমগুলিতে প্লে গেম পরিষেবাগুলির জন্য কীভাবে সংরক্ষিত গেমগুলি ব্যবহার করবেন তা এই বিষয়গুলি বর্ণনা করে৷

শুরু করার আগে

সংরক্ষিত গেম UI প্রদর্শন করুন

একটি সংরক্ষিত গেম এন্ট্রি নির্বাচন বা তৈরি করার জন্য আদর্শ UI কল করে প্রদর্শিত হয়:

    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
        }
    }

একটি সংরক্ষিত খেলা খুলুন

সংরক্ষিত গেমটিতে ডেটা পড়তে বা লিখতে, সংরক্ষিত গেমটি খুলতে হবে। যেহেতু সংরক্ষিত গেমের অবস্থা ডিভাইসে স্থানীয়ভাবে ক্যাশে করা হয় এবং ক্লাউডে সংরক্ষিত হয়, তাই সংরক্ষিত ডেটার অবস্থায় বিরোধের সম্মুখীন হওয়া সম্ভব। একটি দ্বন্দ্ব ঘটে যখন একটি ডিভাইস ক্লাউডে রাজ্য সংরক্ষণ করার চেষ্টা করে কিন্তু বর্তমানে ক্লাউডে থাকা ডেটা একটি ভিন্ন ডিভাইস দ্বারা লেখা হয়েছে৷ সংরক্ষিত গেম ডেটা খোলার সময় এই দ্বন্দ্বগুলি সমাধান করা দরকার।

2টি উন্মুক্ত পদ্ধতি রয়েছে যা দ্বন্দ্ব সমাধান পরিচালনা করে, প্রথম OpenWithAutomaticConflictResolution একটি মানক রেজোলিউশন কৌশল টাইপ গ্রহণ করে এবং স্বয়ংক্রিয়ভাবে দ্বন্দ্ব সমাধান করে। অন্য পদ্ধতি, OpenWithManualConflictResolution দ্বন্দ্বের ম্যানুয়াল রেজোলিউশনের অনুমতি দেওয়ার জন্য একটি কলব্যাক পদ্ধতি গ্রহণ করে।

এই পদ্ধতিগুলি সম্পর্কে আরও বিস্তারিত জানার জন্য GooglePlayGames/BasicApi/SavedGame/ISavedGameClient.cs দেখুন৷

    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
        }
    }

একটি সংরক্ষিত খেলা লিখুন

সংরক্ষিত গেম ফাইলটি ওপেন হয়ে গেলে, এটি গেমের অবস্থা সংরক্ষণ করার জন্য লেখা যেতে পারে। এটি CommitUpdate কল করে করা হয়। CommitUpdate করার জন্য চারটি প্যারামিটার রয়েছে:

  1. সংরক্ষিত গেম মেটাডেটা ওপেন কলগুলির একটিতে পাস করা কলব্যাকে পাস করা হয়েছে।
  2. মেটাডেটা করার জন্য আপডেটগুলি।
  3. ডেটার প্রকৃত বাইট অ্যারে
  4. কমিট সম্পূর্ণ হলে কল করার জন্য একটি কলব্যাক।
    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;
    }

একটি সংরক্ষিত খেলা পড়ুন

একবার সংরক্ষিত গেম ফাইলটি খোলা হলে, এটি গেমের অবস্থা লোড করার জন্য পড়া যেতে পারে। এটি ReadBinaryData কল করে করা হয়।

    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
        }
    }

একটি সংরক্ষিত খেলা মুছুন

সংরক্ষিত গেম ফাইলটি একবার খোলা হলে, এটি মুছে ফেলা যেতে পারে। এটি ডিলিট কল করে করা হয়।

    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
        }
    }