एक एकता खेल में खिलाड़ी की प्रगति को सहेजना


22

मैं एकता गेम इंजन का उपयोग करके एक गेम बना रहा हूं। मैं स्तर, अनुभव अंक सहित खिलाड़ी की प्रगति, चुने हुए चरित्र, आदि वर्तमान में मैं उपयोग कर रहा हूँ सहेजना चाहते playerprefs लेकिन मैं जानना चाहता हूँ कि क्या यह gamers जो साथ ही उनके मोबाइल उपकरणों (Android / iOS) पर इस खेल चलेंगे के लिए काम करेंगे चाहते हैं डेस्कटॉप (OSX / पीसी) के रूप में? यदि नहीं, तो मुझे यह जानकारी कैसे बचानी चाहिए? मैं प्रत्येक चरण को साफ़ करने के बाद प्लेयर को ऑटो-सेव करना चाहता हूं।

जवाबों:


30

PlayerPrefs क्रॉस-प्लेटफ़ॉर्म पर काम करेगा, लेकिन यह गेमप्ले प्रगति के लिए अनुशंसित नहीं है क्योंकि यह असुरक्षित है क्योंकि फाइलें बचाती हैं । एक प्लेटेक्स्ट फ़ाइल के रूप में, एक खिलाड़ी आसानी से इसे खोल सकता है और धोखा देने के लिए सामग्री को बदल सकता है, या अपने खेल को अप्रत्याशित रूप से व्यवहार कर सकता है। आसपास रहने की भी गारंटी नहीं है।

PlayerPrefs गैर-आवश्यक वरीयता जानकारी के लिए अभिप्रेत है, जैसे नियंत्रण मानचित्रण या संगीत / sfx सेटिंग्स - खिलाड़ी वैसे भी स्वतंत्र रूप से बदल सकते हैं, और यदि वे (उदाहरण के लिए विंडोज पर) सिस्टम रीस्टोर बिंदु का उपयोग करते हैं और हार जाते हैं, तो बहुत याद नहीं करेंगे उनकी कुछ रजिस्ट्री जानकारी। यदि यह अपने उच्च स्कोर या अभियान की प्रगति खो देता है, तो खिलाड़ी उचित रूप से परेशान होंगे!

इसके बजाय, यह अपनी खुद की फ़ाइल में गेमप्ले की प्रगति को बचाने की सिफारिश की जाती है (आमतौर पर बाइनरी, संभवतः एन्क्रिप्ट या हस्ताक्षरित यदि आप इसे संशोधित करना कठिन बनाना चाहते हैं, लेकिन इस पर फिलिप की टिप्पणी नीचे देखें)।

आप प्रत्येक प्लेटफ़ॉर्म पर विश्वसनीय सहेजने का स्थान पाने के लिए Application.persistentDataPath का उपयोग कर सकते हैं । यह आमतौर पर एक उपयोगकर्ता डेटा फ़ोल्डर में होता है जिसे ऊपर के उदाहरण जैसे मामलों में मिटाया नहीं जाएगा।

एक बार आपके पास सहेजने के लिए एक रास्ता है, तो आप अपनी फ़ाइल बनाने, लिखने और पढ़ने के लिए नियमित C # IO विधियों का उपयोग कर सकते हैं। विवरण आपके सेव फ़ाइल फॉर्मेट और संरचना के आधार पर बहुत भिन्न होगा, इसलिए यदि आप मुसीबत में हैं, तो यह एक नया सवाल पूछना सबसे अच्छा है कि आप क्या करने की कोशिश कर रहे हैं और आप कहाँ फंस गए हैं।


30
मेरी राय में, अपने savegame फ़ाइलों को एन्क्रिप्ट करना और हस्ताक्षर करना सिर्फ साँपों का काम है। यह सुरक्षित नहीं है क्योंकि आपको अपने गेम के निष्पादन में कुंजियों और एल्गोरिदम को स्टोर करना होगा जहां एक कुशल हैकर उन्हें एक्सेस कर सकता है। यह भी व्यर्थ है। जब यह एक एकल खेल है: क्यों परेशान? खिलाड़ी जिस तरह से चाहें उस खेल का आनंद लें। जब यह एक मल्टीप्लेयर गेम है, तो आपको सर्वर पर सब कुछ सहेजना चाहिए जहां यह हेरफेर से सुरक्षित है।
फिलीपिंस

5
@ SamedTarıkÇETİN डेटा पथ (वह स्थान जहां आपका गेम इंस्टॉल किया गया है) और लगातार डेटा पथ (नए डेटा को बचाने के लिए एक विश्वसनीय स्थान ) के बीच एक महत्वपूर्ण अंतर है । कुछ प्लेटफार्मों पर, एक अंतर्निहित गेम इंस्टॉल किए गए डेटा पथ पर नहीं लिख सकता है, इसलिए लगातार डेटा पथ स्थान में सहेजना एक सामान्य नियम के रूप में सलाह दी जाती है।
DMGregory

2
हालांकि मैं @Philipp से सहमत हूं कि क्लाइंट-साइड स्टोरेज वास्तव में सुरक्षित नहीं है, और यह कि कई मामलों में हमें सिंगल-प्लेयर गेम्स को सुरक्षित करने के बारे में भारी-भरकम होने की आवश्यकता नहीं है, आवेदन करने के लिए सुरक्षा या आपत्ति की मात्रा अंततः एक विकल्प है। प्रत्येक निर्माता को अपने लिए बनाना होगा। इस उत्तर के साथ, मैं सिर्फ पूछने वाले को उनके खेल के लिए उपयुक्त जानकारी के बारे में जानकारी देने के लिए जानकारी देना चाहता हूं।
DMGregory

1
एक तरफ, मैं @Philipp से सहमत हूं, लेकिन मैंने एक सीरियस सेव फ़ाइल के साथ भी देखा / काम किया है जो टेक्स्ट एडिटर के साथ काम करने के लिए पूरी तरह से गैरकानूनी था। हां, मैं शायद समझ सकता था कि कैसे अंदर जाना है और कुछ बदलाव करना है या किसी अन्य, लेकिन जैसा कि फ़ाइल कच्चे हेक्सिडेसिमल के 2 megs की तरह लग रहा था, यह पता लगाने के लिए काफी कोर होता। इस तरह के मामलों में केवल लोगों की सबसे अधिक मौतें इसे अलग करने की कोशिश करती हैं और परिणाम खेल में उस बिंदु के लिए विशिष्ट होंगे (सेव में एक और इकाई को जोड़ने से सभी बाद के डेटा डाउनस्ट्रीम को धक्का देता है)। फिर, यह सुरक्षित होने का इरादा नहीं था
ड्रेको 18 के दशक

2
@ शांतनुसिंह ने उन्हें प्लेयरपरफॉर्म्स में नहीं रखा। इस तरह की जानकारी को दूरस्थ डेटाबेस में संग्रहीत किया जाना चाहिए और ऐप स्टार्टअप पर अनुरोध किया जाना चाहिए। संगतता के लिए जब इंटरनेट कनेक्शन उपलब्ध नहीं है, तो एक स्थानीय सुरक्षित सहेजी गई फ़ाइल पर वापस गिरें (जो कि: एन्क्रिप्टेड है)। डेटाबेस मान, जब उपलब्ध हो, स्थानीय लोगों को अधिलेखित करना चाहिए। इन-ऐप खरीदारी प्लगइन्स हो सकते हैं जो अन्य मैनर्स में भी चीजों को संभालते हैं, लेकिन यह संभवतः "इंटरनेट आवश्यक" होगा, हैक करने योग्य (यहां तक ​​कि एक एन्क्रिप्टेड फ़ाइल 100% सुरक्षित नहीं है), या इस टिप्पणी के विवरण के रूप में।
ड्रेको 18 के दशक

4

यूनिटी साइट पर, एक वीडियो है जो सहेजने के लिए दो मुख्य विकल्पों पर जाता है (प्लेयरप्रैफ़्स और अपनी खुद की सेव फ़ाइल बनाना)। वीडियो यहाँ पाया जा सकता है: http://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/persistence-data-saving-loading?playlist/17117


-1

PlayerPrefs एक K / V स्टोर है जिसे "बस काम" करने के लिए डिज़ाइन किया गया है, इससे कोई फर्क नहीं पड़ता कि आप किस प्लेटफ़ॉर्म के लिए निर्माण करते हैं। मैं कहता हूं कि इसे तब तक इस्तेमाल करते रहिए जब तक आपके पास कोई आकर्षक कारण न हो।


मुझे लगता है कि प्रश्न बहुत ज्यादा था अगर वहाँ खिलाड़ी कारण का उपयोग नहीं करने के लिए मजबूर कर रहे हैं (हाँ, वहाँ हैं)। इस तरह मैंने इस उत्तर को अस्वीकार कर दिया क्योंकि यह प्रश्न का उत्तर नहीं देता है।
पीटर - अनबन रॉबर्ट हार्वे

-1

तो सर्वर साइड सेविंग का सबसे अच्छा तरीका है? स्ट्रिंग स्ट्रिंग के रूप में mysql सर्वर पर स्टोर करने के लिए सभी आवश्यक जानकारी को जंस स्ट्रिंग में कनवर्ट करें और जब लोड करने की आवश्यकता हो, तो सर्वर से कनेक्ट करें और इसे पुनर्स्थापित करें?


4
यह सवाल का जवाब नहीं है। यदि आपके पास कोई प्रश्न है तो एक नया प्रश्न पूछें ।
सौरव पॉल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.