二进制和XML的序列化和反序列化&&AB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;

public static class InfoNeed
{
    public static readonly string path = Path.Combine(Application.dataPath, "StreamingAssets");
}

 ##########

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
public class BuildAssetsBundle
{
    [MenuItem("Tools/BuildAB")]
    public static void Build()
    {
        string outPath = InfoNeed.path;
        if (Directory.Exists(outPath))
        {
            Directory.Delete(outPath,true);
        }
        Directory.CreateDirectory(outPath);

        BuildPipeline.BuildAssetBundles(outPath, BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.StandaloneWindows64);


        AssetDatabase.Refresh();
    }
}

#########

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml.Serialization;
using System;

[Serializable]
public class TestSerilize  {

    [XmlAttribute("MyId")]
    private int id;
    public int MyId { get { return id; } set { id = value; } }
    [XmlAttribute("MyName")]
    private string name;
    public string MyName { get { return name; } set { name = value; } }
    [XmlAttribute("MyGrade")]
    private List<Grade> grade=new List<Grade>();
    public List<Grade> MyGrade { get { return grade; } set { grade = value; } }
}
[Serializable]
public class Grade
{
    [SerializeField]
    public int chinese;
    [SerializeField]
    public int math;
}

######

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
using System.Xml.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

public class TestLoad : MonoBehaviour
{

    TestSerilize testSerilize = new TestSerilize();
    // Use this for initialization
    void Start()
    {
        //TestSerilizeXML(testSerilize);
        //TestDeSerilizeXML();
        //BinarySerilizeTest(testSerilize);
        //BinaryDeserilizeTest();
        //TestAssets();
    }
    void TestAssets()
    {
        AssetsSerlize AS = UnityEditor.AssetDatabase.LoadAssetAtPath<AssetsSerlize>("Assets/TestAssets.asset");
        Debug.Log(AS.ID);
        Debug.Log(AS.Name);
        Debug.Log(AS.Grade[0]);
    }
    void TestLoadAB()
    {
        AssetBundle assetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/cube.unity3d");
        Instantiate(assetBundle.LoadAsset<GameObject>("cube"));

    }
    #region XML
    /// <summary>
    /// 序列化XML
    /// </summary>
    /// <param name="testSerilize"></param>
    void TestSerilizeXML(TestSerilize testSerilize)
    {
        InitXML();

        FileStream fileStream = new FileStream(Application.dataPath + "/Test.xml", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
        StreamWriter sw = new StreamWriter(fileStream, System.Text.Encoding.UTF8);
        XmlSerializer xml = new XmlSerializer(testSerilize.GetType());
        xml.Serialize(sw, testSerilize);
        sw.Close();
        fileStream.Close();
    }
    /// <summary>
    /// 反向序列化XML
    /// </summary>
    /// <returns></returns>
    TestSerilize DeserilizeXML()
    {
        FileStream fileStream = new FileStream(Application.dataPath + "/Test.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);

        XmlSerializer xs = new XmlSerializer(typeof(TestSerilize));
        TestSerilize testSerilize = (TestSerilize)xs.Deserialize(fileStream);

        fileStream.Close();
        return testSerilize;
    }

    void TestDeserilizeXML()
    {
        TestSerilize testSerilizeObj = DeserilizeXML();
        Debug.Log("testSerilizeObj.MyId==" + testSerilizeObj.MyId);
        Debug.Log("testSerilizeObj.MyName==" + testSerilizeObj.MyName);
        Debug.Log("testSerilizeObj.MyGrade1.chinese==" + testSerilizeObj.MyGrade[0].chinese);
        Debug.Log("testSerilizeObj.MyGrade2.math==" + testSerilizeObj.MyGrade[1].math);
    }
    void InitXML()
    {
        testSerilize.MyId = 1;
        testSerilize.MyName = "TestXML";

        Grade grade1 = new Grade();
        grade1.chinese = 1;
        grade1.math = 2;
        Grade grade2 = new Grade();
        grade2.chinese = 3;
        grade2.math = 4;

        testSerilize.MyGrade.Add(grade1);
        testSerilize.MyGrade.Add(grade2);
    }
    #endregion
    #region 二进制
    void BinarySerilizeTest(TestSerilize testSerilize)
    {
        InitBinary();
        using (FileStream fs = new FileStream(Application.dataPath + "/Test.bytes", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
        {
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(fs, testSerilize);
        }
    }
    TestSerilize BinaryDeserilize()
    {
        TextAsset textAsset = UnityEditor.AssetDatabase.LoadAssetAtPath<TextAsset>("Assets/Test.bytes");

        MemoryStream ms = new MemoryStream(textAsset.bytes);
        BinaryFormatter bf = new BinaryFormatter();
        TestSerilize testSerilize = (TestSerilize)bf.Deserialize(ms);
        ms.Close();
        return testSerilize;
    }
    void BinaryDeserilizeTest()
    {
        TestSerilize testSerilizeObj = BinaryDeserilize();
        Debug.Log("testSerilizeObj.MyId==" + testSerilizeObj.MyId);
        Debug.Log("testSerilizeObj.MyName==" + testSerilizeObj.MyName);
        Debug.Log("testSerilizeObj.MyGrade1.chinese==" + testSerilizeObj.MyGrade[0].chinese);
        Debug.Log("testSerilizeObj.MyGrade2.math==" + testSerilizeObj.MyGrade[1].math);
    }
    void InitBinary()
    {
        testSerilize.MyId = 2;
        testSerilize.MyName = "TestBinary";

        Grade grade10 = new Grade();
        grade10.chinese = 10;
        grade10.math = 20;
        Grade grade20 = new Grade();
        grade20.chinese = 30;
        grade20.math = 40;

        testSerilize.MyGrade.Add(grade10);
        testSerilize.MyGrade.Add(grade20);
    }
    #endregion
}

#######

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName ="TestAssets",menuName ="CreateAssets",order =0)]
public class AssetsSerlize : ScriptableObject {

    public int ID;
    public string Name;
    public List<int> Grade;
}

猜你喜欢

转载自blog.csdn.net/Edision_li/article/details/86609101