जवाबों:
मैं आमतौर पर एक मेमोरी स्नैपशॉट के संदर्भ में नहीं सोचता, बल्कि मैं सिर्फ एक सूची बनाता हूं कि किन मूल्यों को सत्रों के बीच सहेजने की जरूरत है और उन मूल्यों को एक बाहरी फ़ाइल में सहेजें।
यह आपके विशिष्ट खेल की जरूरतों पर निश्चित रूप से निर्भर करता है, लेकिन आमतौर पर मैं बस वर्तमान स्तर की स्थिति को बचाता हूं (यानी जहां सभी दुश्मन हैं, उनका स्वास्थ्य क्या है, आदि) और फिर उच्च स्तर का सामान जैसे खिलाड़ी किस स्तर का है। पहले ही पूरा कर लिया है।
यह उत्तर यूनिटी 3 डी विशिष्ट है ।
एकता में, अधिकांश कक्षाएं क्रमबद्ध हैं, इसका मतलब है कि आप डिस्क में पूर्ण एकता वस्तुओं को स्ट्रीम करने में सक्षम हैं। Follwing UnityScript-Code एक ऑब्जेक्ट को क्रमबद्ध करने का एक तरीका है, इसे फिर से लोड करने के लिए डिस्क को सेव करें (लोड करने के बाद आपको ऑब्जेक्ट को डालना होगा):
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;
}
}
}
टीडी के लिए मैं शायद लहरों के बीच विशेष रूप से बचा सकता हूं। इस तरह आप सभी को सोचना होगा कि यह टावर है। कुछ स्वचालित सहेजने के बिंदुओं को स्तरों में रखें, बीच में 10 मिनट से अधिक नहीं, लेकिन कम शायद बेहतर है।
बेशक यदि आपके स्तर काफी कम हैं तो आप अभियान की स्थिति के अलावा कुछ भी नहीं बचा सकते हैं।
जब मैं खेल की वर्तमान स्थिति का उल्लेख करता हूं तो मैं बचत के क्षण में मेमोरी स्नैपशॉट का उल्लेख कर रहा हूं। आपको उस डेटा को फिर से बनाने में सक्षम होना चाहिए, जिसे आप एचडीडी पर स्टोर करने जा रहे हैं।
यह आसान है कि आप सभी कक्षाओं को क्रमबद्ध करें जिसमें डेटा है जो लगातार होना चाहिए और इसे एचडीडी को डंप करना होगा, अनिवार्य रूप से एक मेमोरी डंप का प्रदर्शन करना होगा। इसके साथ समस्या यह है कि आपको कक्षाओं में फेरबदल करने से क्रमबद्ध मानों की संख्या / प्रकार बदल जाएंगे और पुरानी बचतें टूट जाएंगी। क्योंकि आप लोड हो रहा है समय बढ़ जाती है सब कुछ बचा रहे हैं। व्यक्तिगत रूप से उन क्षेत्रों को चिह्नित करने के लिए इसका अधिक कुशल है जो वास्तव में वर्तमान "मेमोरी स्नैपशॉट" को फिर से बनाने के लिए आवश्यक हैं, जो भी आपके सिस्टम द्वारा उपयोग किए जाने वाले विशेषता / आईडीई का उपयोग करता है। फिर उस सहेजे गए डेटा से "मेमोरी स्नैपशॉट" का पुनर्निर्माण करें।
इसके अलावा, मैंने पहले कभी एकता का उपयोग नहीं किया है, इसलिए इसमें कुछ निर्मित हो सकता है। हालांकि, यह विशिष्ट दृष्टिकोण है।