Bu konuda, Unity oyunlarında Play Oyun Hizmetleri için kayıtlı oyunların nasıl kullanılacağı açıklanmaktadır.
Başlamadan önce
Projenizi ve Unity için Google Play Games eklentisini ayarlayın. Ayrıntılar için Başlangıç kılavuzu'na bakın.
Kaydedilmiş oyunlar etkinleştirilmiş olmalıdır. Ayrıntılar için kaydedilmiş oyunlar bölümüne bakın.
Kayıtlı oyunlar kullanıcı arayüzünü görüntüleme
Kayıtlı oyun girişi seçmek veya oluşturmak için standart kullanıcı arayüzü, aşağıdaki işlev çağrılarıyla gösterilir:
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
}
}
Kayıtlı bir oyunu açma
Kaydedilmiş bir oyuna veri okumak veya yazmak için kaydedilmiş oyunun açılması gerekir. Kayıtlı oyun durumu cihazda yerel olarak önbelleğe alındığından ve buluta kaydedildiğinden, kayıtlı verilerin durumunda çakışmalarla karşılaşabilirsiniz. Bir cihaz, durumu buluta kaydetmeye çalıştığında ancak buluttaki veriler farklı bir cihaz tarafından yazıldığında çakışma oluşur. Bu çakışmalar, kaydedilen oyun verileri açılırken çözülmelidir.
Çakışma çözümünü işleyen 2 açık yöntem vardır. Bunlardan ilki olan OpenWithAutomaticConflictResolution, standart bir çözüm stratejisi türünü kabul eder ve çakışmaları otomatik olarak çözer. Diğer yöntem olan OpenWithManualConflictResolution, çakışmanın manuel olarak çözülmesine olanak tanıyan bir geri çağırma yöntemi kabul eder.
Bu yöntemler hakkında daha fazla bilgi için ISavedGameClient'ı inceleyin.
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
}
}
Kayıtlı oyun yazma
Kaydedilmiş oyun dosyası açıldıktan sonra oyun durumunu kaydetmek için yazılabilir. Bu işlem, CommitUpdate çağrılarak yapılır. CommitUpdate için dört parametre vardır:
- Kaydedilen oyun meta verileri, Open çağrılarından birine iletilen geri çağırmaya iletildi.
- Meta verilerde yapılacak güncellemeler.
- verilerin gerçek bayt dizisi
- işleme tamamlandığında aranacak geri arama.
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;
}
Kayıtlı bir oyunu okuma
Kayıtlı oyun dosyası açıldıktan sonra oyun durumunu yüklemek için okunabilir. Bu işlem, ReadBinaryData çağrı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
}
}
Kayıtlı oyunu silme
Kayıtlı oyun dosyası açıldıktan sonra silinebilir. Bu işlem, Delete yöntemi çağrılarak yapılır.
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
}
}