目录
[TOC]
一、使用版本
使用的Unity版本:2018.3.Of2
二、程序集
1.在Unity中创建程序集
- 创建的脚本默认在Assembly-CSharp.dll程序集中。
- 通过“鼠标右键–Create–Assembly Definition”可以创建程序集的定义文件,可在此文件中定义程序集名称。
- 上述程序及定义文件所影响的范围为:同级文件夹及其子文件夹下的脚本。
2.程序集定义文件
如下图所示:
注意:默认的Assembly-CSharp.dll程序集自动引用所有其他的程序集。
三、Unity中的资源加载方式
1.拖拽到组件上(不会使用)
public GameObject PrefabA;
private void Start()
{
//资源加载
//方法一:拖拽到组件上
Instantiate(PrefabA);
}
2.Resources.Load(一般不用)
//方法二:Resources.Load()
Resources.Load("PrefabA");
3.AssetBundle(常用)
AssetBundle assetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/AB包名");
GameObject obj = Instantiate(assetBundle.LoadAsset<GameObject>("Preafab名称"));
4.AssetDataBase.LoadAssetAtPath(框架中使用)
//方法四:AssetDataBase.LoadAssetAtPath()
//加载路径为Assets文件夹下的路径,需要加上后缀
GameObject go = Instantiate(UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>("Assets/GameData/Prefabs/Prefab名称.prefab"));
四、CSharp中的xml序列化
数据类:
[Serializable]
public class Model
{
[XmlAttribute]
public int Id { get; set; }
[XmlAttribute]
public string Name { get; set; }
[XmlArray]
public List<int> Nums;
}
1.对象转为xml
public void ToXml(Model model)
{
//Step1:文件流——创建xml文件
FileStream fs = new FileStream(Application.dataPath + "/TestModel.xml", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
//Step2:写入流
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
//Step3:创建xml序列化器
XmlSerializer xmlSerializer = new XmlSerializer(model.GetType());
//Step4:序列化对象到写入流中
xmlSerializer.Serialize(sw, model);
//Step5:关闭流
sw.Close();
fs.Close();
}
2.xml转为对象
public Model FromXml()
{
//Step1:文件流——读取xml文件
FileStream fs = new FileStream(Application.dataPath + "/TestModel.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
//Step2:创建xml序列化器
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Model));
//Step3:反序列化
Model model = (Model)xmlSerializer.Deserialize(fs);
//Step4:关闭流
fs.Close();
return model;
}
五、二进制序列化
1.对象转为二进制
public void ToBinary(Model model)
{
//Step1:文件流——创建二进制文件
FileStream fs = new FileStream(Application.dataPath + "/TestModel.bytes", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
//Step2:创建二进制序列化器
BinaryFormatter binaryFormatter = new BinaryFormatter();
//Step3:序列化对象到文件流中
binaryFormatter.Serialize(fs, model);
//Step4:关闭流
fs.Close();
}
2.二进制转为对象
public Model FromBinary()
{
//Step1:文件流——读取二进制文件
FileStream fs = new FileStream(Application.dataPath + "/TestModel.bytes", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
//Step2:创建二进制序列化器
BinaryFormatter binaryFormatter = new BinaryFormatter();
//Step3:反序列化
Model model = (Model)binaryFormatter.Deserialize(fs);
//Step4:关闭流
fs.Close();
return model;
}
六、UnityAsset序列化
1.创建Asset
[CreateAssetMenu(fileName = "MyAssetCfg", menuName = "CreateAsset", order = 1)]
public class MyAssetCfg : ScriptableObject
{
public int Id;
public string Name;
public List<float> DelayTime;
}
2.读取Asset
MyAssetCfg amyAssetCfg =UnityEditor.AssetDatabase.LoadAssetAtPath<MyAssetCfg>("Assets/Scripts/MyAssetCfg.asset");