Unity游戏开发总结

四种加载资源的方式

  • 拖到组件上
  • 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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 7,609评论 0 3
  • 一. Java基础部分.................................................
    wy_sure阅读 9,273评论 0 11
  • 阿里巴巴 JAVA 开发手册 1 / 32 Java 开发手册 版本号 制定团队 更新日期 备 注 1.0.0 阿...
    糖宝_阅读 12,274评论 0 5
  • 1、不安全的随机数生成,在CSRF TOKEN生成、password reset token生成等,会造成toke...
    nightmare丿阅读 9,181评论 0 1
  • 休息。睡觉。 英语。 挂画。尾款。 涂鸦。速写。
    LOVELESS阅读 721评论 0 0