सभी को नमस्कार!
शायद हर कोई जिसने एकता पर गेम बनाना शुरू किया था, उसे इस दुविधा का सामना करना पड़ा कि गेम की प्रगति को कैसे बचाया जाए। आज मैं आपको अपनी विधि के बारे में बताऊंगा। वह नया नहीं है, लेकिन काफी कामकाजी आदमी है।
यदि दिलचस्पी है, तो बिल्ली में आपका स्वागत है।
जब मैंने डेटा को बचाने के तरीके के बारे में सोचा, तो मैं इस निष्कर्ष पर पहुंचा कि मेरे लिए JSON में डेटा अनुक्रमित करना सुविधाजनक होगा। किसी अन्य बाइक को बाड़ न देने के लिए, मैंने लोकप्रिय Json.NET लाइब्रेरी - न्यूटनसॉफ्ट का उपयोग करने का निर्णय लिया। इसके अलावा, यह वस्तुओं और उनके प्रकारों को बचा सकता है।
फिलहाल, डेटा एक्सेस क्लास स्थिर है, जिसका अर्थ है कि आप इसे कहीं से भी एक्सेस कर सकते हैं। विपक्ष - आप अलग से बचत नहीं कर सकते।
आइए कोड का थोड़ा विश्लेषण करें:
public abstract class ISaveItem { public string Key { get; set; } }
चूंकि यह लिखना असंभव है:
Dictionary<string, SaveItem<T>>
हम SaveItem को ISaveItem में लपेटेंगे। इस तरह हम विभिन्न प्रकार के डेटा के साथ एक शब्दकोश बना सकते हैं।
public class SaveItem<T> : ISaveItem { public T item; } private static Dictionary<string, ISaveItem> items;
यदि आप वेक्टर 2 या वेक्टर 3 या कलर या एकता इंजन के अन्य डेटा प्रकारों को क्रमबद्ध करने का प्रयास करते हैं, तो आपको सबसे अधिक संभावना एक लूपिंग त्रुटि मिलेगी। Json.NET - Newtonsoft में इस समस्या से बचने के लिए इसके लिए एक समाधान है: कन्वर्टर्स का निर्माण। आइए उनमें से एक का विश्लेषण करें।
एक वर्ग बनाएँ और JsonConverter से वारिस करें:
public class Vector2Converter : JsonConverter
एक निर्माता और निजी क्षेत्र बनाएँ:
private readonly Type type; public Vector2Converter(Type type) { this.type = type; }
तरीकों को फिर से परिभाषित करने के बाद:
public override bool CanConvert(Type objectType) { return type == objectType; } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { return null; } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { if (value.GetType() == type) { var vector = (Vector2)value; writer.WriteStartObject(); writer.WritePropertyName("X"); writer.WriteValue(vector.x); writer.WritePropertyName("Y"); writer.WriteValue(vector.y); writer.WriteEndObject(); } }
WriteJson विधि में सबसे महत्वपूर्ण बात। यह वह जगह है जहाँ डेटा सहेजा जाता है।
और अब मेरी सेव प्रणाली का उपयोग कैसे करें:
हमारे द्वारा लिखे गए डेटा को बचाने के लिए:
int myInt = 33; SaveSystem.Set("MyInt", myInt);
हमारे द्वारा लिखे गए डेटा को पढ़ने के लिए:
var myInt = SaveSystem.Get<int>("MyInt");
सिद्धांत रूप में, जटिल डेटा संरचनाओं को आसानी से संग्रहीत किया जा सकता है और यह काम करना चाहिए। आइए ऑब्जेक्ट को और अधिक जटिल से बचाने और पढ़ने की कोशिश करें:
[System.Serializable] public class Test { public string Name; public float FloatParam; } Test test = new Test() {Name = "TestValue1", FloatParam = 0.1f};
जैसा कि आप देख सकते हैं, सब कुछ महान काम करता है।
आप सेव, इंपोर्ट, एक्सपोर्ट या डिलीट को भी एडिट कर सकते हैं।

संपादक साधारण प्रकार (इंट, फ्लोट, स्ट्रिंग, आदि) के रूप में दिखा सकता है। इसलिए अधिक जटिल हैं।


यहां तक कि सरणियाँ:

आपका ध्यान के लिए धन्यवाद।
GitHub पर परियोजना के लिए लिंक।