美文网首页
Unity游戏开发总结

Unity游戏开发总结

作者: 倚剑赏雪 | 来源:发表于2020-03-01 18:37 被阅读0次

四种加载资源的方式

  • 拖到组件上
  • Resources.load 必须建立Resources文件夹
  • AssetBundle
AssetBundle assetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/****");
GameObject go = Instantiate(assetBundle.LoadAsset<GameObject>(****"));
  • AssetDataBase.LoadAtPtah (编辑器模式下使用)
GameObject boj =Instantiate(UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>("Assets/GameData/Prefabs/****.prefab")) ;

C#的序列化

C#序列化XML

打标签

  • 需要引入头文件:using System.Xml.Serialization;
  • 类需要加[System.Serializable]标签
  • 里面对应的标签需要添加[XmlAttribute("*****")]
  • 对于数组或者list等实例化可以使用[XmlElement("TempList")]public List<int> TempList { get; set; }或者[XmlArray("TempList")]public List<int> TempList { get; set; }
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序列化

  • 类需继承ScriptableObject
  • 在类上面加上标签[CreateAssetMenu(fileName = "TestAssets",menuName = "CreateAsset",order = 10)]
    fileName 是创建后默认的文件名,menuName 是右键显示出来的菜单名,order 是顺序
  • 加载时在编辑器模式下使用以下方式
AssetSerilize serilize = UnityEditor.AssetDatabase.LoadAssetAtPath<AssetSerilize>("Assets/TestAssets.asset)

相关文章

网友评论

      本文标题:Unity游戏开发总结

      本文链接:https://www.haomeiwen.com/subject/owickhtx.html