पुरानी: हालांकि इस सवाल का जवाब लेखन के समय पूरी तरह से वैध था, इसमें दी गई जानकारी पुरानी हो चुकी है। इसे करने का एक बेहतर तरीका है, इसके बजाय this answer देखें। उत्तर ऐतिहासिक कारणों से संरक्षित किया गया है, कृपया इसे नीचे मतदान से पहले मानें।
अद्यतन:
मैं समाधान बड़े पैमाने पर नीचे वर्णित सुधार हुआ है और एक ओपन सोर्स प्रोजेक्ट (एमआईटी लाइसेंस) बनाया इसे से बाहर GitHub पर की मेजबानी की। एक नज़र में यह न केवल वर्तमान में चल रहे ऐप के बंडल संस्करण तक पहुंच प्रदान करता है बल्कि पिछले बंडल संस्करण के इतिहास को एक सुंदर दृढ़ तरीके से ट्रैक करता है - कम से कम प्लगइन की स्थापना या कुछ मैन्युअल समायोजन की आवश्यकता होती है।
तो देखने में:
BundleVersionChecker at github
Usage and more details
मैं सिर्फ एक और और बहुत सुविधाजनक समाधान मिल गया। 2 कक्षाओं की आवश्यकता है:
पहला वाला एक संपादक वर्ग वर्तमान PlayerSettings.bundleVersion
की जांच कर रहा है। मैंने इसे BundleVersionChecker
कहा और इसे संपत्ति/संपादक में रखा जाना है।यह एक कोड जनरेटर है कि बस सिर्फ एक संस्करण स्ट्रिंग वाली एक बहुत ही सरल स्थिर वर्ग उत्पन्न करता है के रूप में कार्य करता है, तो बंडल संस्करण बदल चुका है:
using UnityEngine;
using UnityEditor;
using System.IO;
[InitializeOnLoad]
public class BundleVersionChecker
{
/// <summary>
/// Class name to use when referencing from code.
/// </summary>
const string ClassName = "CurrentBundleVersion";
const string TargetCodeFile = "Assets/Scripts/Config/" + ClassName + ".cs";
static BundleVersionChecker() {
string bundleVersion = PlayerSettings.bundleVersion;
string lastVersion = CurrentBundleVersion.version;
if (lastVersion != bundleVersion) {
Debug.Log ("Found new bundle version " + bundleVersion + " replacing code from previous version " + lastVersion +" in file \"" + TargetCodeFile + "\"");
CreateNewBuildVersionClassFile (bundleVersion);
}
}
static string CreateNewBuildVersionClassFile (string bundleVersion) {
using (StreamWriter writer = new StreamWriter (TargetCodeFile, false)) {
try {
string code = GenerateCode (bundleVersion);
writer.WriteLine ("{0}", code);
} catch (System.Exception ex) {
string msg = " threw:\n" + ex.ToString();
Debug.LogError (msg);
EditorUtility.DisplayDialog ("Error when trying to regenerate class", msg, "OK");
}
}
return TargetCodeFile;
}
/// <summary>
/// Regenerates (and replaces) the code for ClassName with new bundle version id.
/// </summary>
/// <returns>
/// Code to write to file.
/// </returns>
/// <param name='bundleVersion'>
/// New bundle version.
/// </param>
static string GenerateCode (string bundleVersion) {
string code = "public static class " + ClassName + "\n{\n";
code += System.String.Format ("\tpublic static readonly string version = \"{0}\";", bundleVersion);
code += "\n}\n";
return code;
}
}
2 वर्ग CurrentBundleVersion
कहा जाता है। यह BundleVersionChecker
द्वारा उत्पन्न उपर्युक्त सरल वर्ग है और यह आपके कोड से सुलभ है। इसे BundleVersionChecker
द्वारा स्वचालित रूप से पुन: उत्पन्न किया जाएगा जब भी इसकी संस्करण स्ट्रिंग PlayerSettings
में पाए गए किसी के बराबर नहीं है।
public static class CurrentBundleVersion
{
public static readonly string version = "0.8.5";
}
क्योंकि यह उत्पन्न कोड है क्योंकि आपको इसकी परवाह नहीं है, बस इसे अपने संस्करण नियंत्रण प्रणाली में प्रतिबद्ध करें।
तो अपने कोड में कहीं भी तुम सिर्फ लिख सकते हैं:
if (CurrentBundleVersion != "0.8.4") {
// do migration stuff
}
मैं वर्तमान में एक और अधिक परिष्कृत संस्करण पर काम कर रहा हूँ। इस तरह
if (CurrentBundleVersion.OlderThan (CurrentBundleVersion.Version_0_8_5) //...
बंडल, यह कहां स्थित है: अपने सर्वर पर या क्या यह इन-ऐप खरीदारियों की सामग्री होस्ट करता है? बंडल की ज़िम्मेदारी क्या है? ऐप के अपडेट को ट्रिगर करने के लिए रियल एस्टेट या सिर्फ वर्जनिंग जानकारी? – Kay
यदि आप अभी भी बंडल संस्करण प्राप्त करने का समाधान चाहते हैं तो नीचे दिए गए मेरे उत्तर दिए गए उत्तर को देखें। – Kay
मैंने पहले ही गेम जारी कर दिया है, लेकिन भविष्य की परियोजनाओं के लिए इसे देखेंगे! धन्यवाद! – Sunkas