Yanıtlar:
Genellikle bellek görüntüsü olarak düşünmüyorum, ancak oturumlar arasında hangi değerlerin kaydedilmesi gerektiğini ve bu değerleri harici bir dosyaya kaydetmesi gerekenlerin bir listesini yapıyorum.
Bu elbette kendi oyununun ihtiyaçlarına bağlı, ama genellikle şu anki seviyenin durumunu (yani tüm düşmanların nerede olduğu, sağlıklarının ne olduğu vb.) Ve oyuncu seviyelerini yükselten gibi yüksek seviyeli durumlardan kurtardım. çoktan tamamladı
Bu cevap Unity3d'ye özeldir .
Unity'de, çoğu sınıf serileştirilebilirdir, bu, Unity nesnelerinin tamamını diske aktarabileceğiniz anlamına gelir. Follwing UnityScript-Code, bir nesneyi seri hale getirmenin, onu tekrar diske kaydetmenin bir yoludur (yükledikten sonra nesneyi kullanmanız gerekir):
import System;
import System.IO;
import System.IO.Stream;
import System.Runtime.Serialization;
import System.Runtime.Serialization.Formatters.Binary;
class SaveLoad {
public static function SaveFile(filename:String, obj:Object):void {
try {
Debug.Log("Writing Stream to Disk.", SaveLoad);
var fileStream:Stream = File.Open(filename, FileMode.Create);
var formatter:BinaryFormatter = new BinaryFormatter();
formatter.Serialize(fileStream, obj);
fileStream.Close();
} catch(e:Exception) {
Debug.LogWarning("Save.SaveFile(): Failed to serialize object to a file " + filename + " (Reason: " + e.ToString() + ")");
}
}
public static function LoadFile(filename:String):Object {
try {
Debug.Log("Reading Stream from Disk.", SaveLoad);
var fileStream:Stream = File.Open(filename, FileMode.Open, FileAccess.Read);
var formatter:BinaryFormatter = new BinaryFormatter();
var obj:Object= formatter.Deserialize(fileStream);
fileStream.Close();
return obj;
} catch(e:Exception) {
Debug.LogWarning("SaveLoad.LoadFile(): Failed to deserialize a file " + filename + " (Reason: " + e.ToString() + ")");
return null;
}
}
}
Bir TD için muhtemelen sadece dalgalar arasında tasarruf yapacağım. Tüm düşünmeniz gereken bu şekilde kuleler. Bazı otomatik kaydetme noktalarını seviyelere yerleştirin, aralarında en fazla 10 dakika, ancak daha az olasılıkla tercih edilir.
Tabii ki seviyeleriniz yeterince kısaysa kampanya durumundan başka hiçbir şeyi kurtaramazsınız.
Oyunun şu anki durumuna atıfta bulunduğumda, kaydettiğim andaki hafıza görüntüsüne bakıyorum. Bunu, HDD’nizde depolayacağınız verilerden yeniden oluşturabilmeniz gerekir.
Temelde bir bellek dökümü yapmak için kalıcı olması ve HDD'ye atılması gereken verileri içeren tüm sınıfları serileştirmek en kolayıdır. Bununla ilgili sorun, sınıfları değiştirmenin, serileştirilmiş değerlerin sayısını / türlerini değiştirmesi ve eski tasarrufları kırmasıdır. Ayrıca her şeyi kaydettiğiniz için yükleme sürelerini arttırır. Şimdiki "bellek görüntüsünü" yeniden düzenlemek için gerekli olan bireysel alanları işaretlemek daha verimlidir. Sonra kaydedilen verilerden "hafıza anlık görüntüsünü" yeniden oluşturun.
Ayrıca Birlik'i daha önce hiç kullanmadım, bu yüzden içinde yerleşik bir şey olabilir. Ancak, bu tipik bir yaklaşımdır.