四种加载资源的方式
- 拖到组件上
- 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)
网友评论