Jawaban:
Saya biasanya tidak berpikir dalam hal snapshot memori, tetapi saya hanya membuat daftar nilai mana yang perlu disimpan di antara sesi dan menyimpan nilai-nilai itu ke dalam file eksternal.
Ini tentu saja tergantung pada kebutuhan gim spesifik Anda, tetapi biasanya saya hanya menyimpan keadaan level saat ini (mis. Di mana semua musuh berada, seperti apa kesehatan mereka, dll.) Dan kemudian hal-hal tingkat yang lebih tinggi seperti level pemain sudah selesai.
Jawaban ini spesifik untuk Unity3d .
Di Unity, sebagian besar kelas bisa serial, ini artinya Anda bisa melakukan streaming objek Unity ke disk. Kode UnityScript berikut adalah cara untuk membuat serialisasi objek, menyimpannya ke disk memuatnya lagi (setelah memuat Anda harus melemparkan objek):
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;
}
}
}
Untuk TD saya mungkin akan menyimpan secara eksklusif di antara gelombang. Dengan begitu semua yang harus Anda pikirkan adalah menara. Letakkan beberapa titik penyimpanan otomatis di level-level tersebut, tidak lebih dari 10 menit, tetapi mungkin lebih sedikit.
Tentu saja jika level Anda cukup singkat, Anda hanya dapat menyimpan apa pun selain status kampanye.
Ketika saya merujuk pada kondisi saat ini dari permainan saya merujuk snapshot memori pada saat menyimpan. Anda harus dapat membuatnya kembali dari data yang akan Anda simpan pada HDD Anda.
Cara termudah adalah dengan membuat serial semua kelas Anda yang memiliki data yang perlu persisten dan membuangnya ke HDD, yang pada dasarnya melakukan dump memori. Masalah dengan hal ini adalah bahwa mengubah kelas Anda akan mengubah jumlah / jenis nilai serial dan menghancurkan penyimpanan lama. Juga karena Anda menyimpan semua itu meningkatkan waktu pemuatan. Lebih efisien untuk menandai masing-masing bidang yang sebenarnya diperlukan untuk membangun kembali "snapshot memori" saat ini dengan sistem atribut apa pun yang digunakan oleh serializer / IDE Anda. Kemudian buat kembali "snapshot memori" dari data yang disimpan.
Juga saya belum pernah menggunakan Unity sebelumnya sehingga mungkin ada sesuatu yang tertanam di dalamnya. Namun, ini adalah pendekatan yang khas.