Unity游戏开发总结

2020-03-01  本文已影响0人  倚剑赏雪

四种加载资源的方式

AssetBundle assetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/****");
GameObject go = Instantiate(assetBundle.LoadAsset<GameObject>(****"));
GameObject boj =Instantiate(UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>("Assets/GameData/Prefabs/****.prefab")) ;

C#的序列化

C#序列化XML

打标签

using System.Xml.Serialization;
[System.Serializable]
public class TestSerilize
{
    [XmlAttribute("Id")] public int Id { get; set; }
    [XmlAttribute("Name")] public string Name { get; set; }
    [XmlElement("TempList")]public List<int> TempList { get; set; }
}

序列化过程

 void SerilizeTest()
    {
        TestSerilize testSerilize = new TestSerilize();
        testSerilize.Id = 100;
        testSerilize.Name = "测试";
        testSerilize.TempList = new List<int> {2, 3};
        XmlSerilize(testSerilize);
    }

    void XmlSerilize(TestSerilize testSerilize)
    {
        //创建一个文件流
        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());
        //序列化API,两个参数:写入流文件,写入的类
        xml.Serialize(sw, testSerilize);
        sw.Close();
        fileStream.Close();
    }

反序列化过程

  void DeSerilizeTest()
    {
        TestSerilize testSerilize = XmlDeSerilize();
        Debug.Log(testSerilize.Id+"---"+testSerilize.Name);
    }
    TestSerilize XmlDeSerilize()
    {
        FileStream fs = new FileStream(Application.dataPath + "/test.xml", FileMode.Open, FileAccess.ReadWrite,
            FileShare.ReadWrite);
        XmlSerializer xs = new XmlSerializer(typeof(TestSerilize));
        TestSerilize testSerilize = (TestSerilize)xs.Deserialize(fs);
        fs.Close();
        return testSerilize;
    }

C#序列化二进制

序列化过程

   void BinarySerilizeTest()
    {
        TestSerilize testSerilize = new TestSerilize();
        testSerilize.Id = 200;
        testSerilize.Name = "二进制测试";
        testSerilize.TempList = new List<int> {4, 9,300};
        BinarySerilize(testSerilize);
    }

    void BinarySerilize(TestSerilize testSerilize)
    {
        FileStream fs = new FileStream(Application.dataPath+"/test.bytes",FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite);
        BinaryFormatter binaryFormatter = new BinaryFormatter();
        binaryFormatter.Serialize(fs,testSerilize);
        fs.Close();
    }

反序列化过程

    TestSerilize BinaryDeSerilize()
    {
        TextAsset textAsset = UnityEditor.AssetDatabase.LoadAssetAtPath<TextAsset>("Assets/test.bytes");
        MemoryStream memoryStream = new MemoryStream(textAsset.bytes);
        BinaryFormatter bf = new BinaryFormatter();
        TestSerilize ts = (TestSerilize) bf.Deserialize(memoryStream);
        memoryStream.Close();
        return ts;
    }

unity asset序列化

AssetSerilize serilize = UnityEditor.AssetDatabase.LoadAssetAtPath<AssetSerilize>("Assets/TestAssets.asset)
上一篇 下一篇

猜你喜欢

热点阅读