一·资源加载的方式
1.Resources:
private string cubePath = "Prebs/MyCubePreb";
//把资源加载到内存中
Object cubePreb = Resources.Load(cubePath, typeof(GameObject));
//用加载得到的资源对象,实例化游戏对象,实现游戏物体的动态加载
GameObject cube = Instantiate(cubePreb) as GameObject;
2.AssetBundle:
AssetBundle assetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + cubePath);
GameObject obj = GameObject.Instantiate(assetBundle.LoadAsset<GameObject>("预制体名字"));
3.AssetDatabase:
private string cubePath = "Assets/GameData/Prefabs/Attack.prefab";
GameObject obj = GameObject.Instantiate(UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>(cubePath));
二.Xml序列化
1.创建需要序列化的虚拟类(需要引入System.Xml.Serialization)
[System.Serializable]
public class TestSerilize
{
[XmlAttribute("ID")]
public int ID { get; set; }
[XmlAttribute("Name")]
public string Name;
[XmlElement("List")]
public List<int> List { get; set; }
}
2.序列化该类
//创建文件流和写入流,关联两者,开始序列化
private string textPath=Application.dataPath+"/test.xml";
void XmlSerilize(TestSerilize testSerilize)
{
FileStream fileStream = new FileStream(textPath,FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite);
StreamWriter sw = new StreamWriter(fileStream,System.Text.Encoding.UTF8);
XmlSerializer xml = new XmlSerializer(testSerilize.GetType());
xml.Serialize(sw,testSerilize);
sw.Close();
fileStream.Close();
}
3.反序列化
private string textPath=Application.dataPath+"/test.xml";
void XmlDeSeriliza()
{
FileStream fs = new FileStream(textPath,FileMode.Open,FileAccess.ReadWrite,FileShare.ReadWrite);
XmlSerializer xs = new XmlSerializer(typeof(TestSerilize));
TestSerilize testSerilize = (TestSerilize)xs.Deserialize(fs);
fs.Close();
}
三.二进制序列化
1.序列化
private string textPath=(Application.dataPath+"/test.bytes";
void BinarySerilize(TestSerilize testSerilize)
{
FileStream fs = new FileStream(textPath,FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, testSerilize);
fs.Close();
}
2.反序列化
void BinaryDeserilize()
{
TextAsset textAsset = UnityEditor.AssetDatabase.LoadAssetAtPath<TextAsset>("Assets/test.bytes");
MemoryStream stream = new MemoryStream(textAsset.bytes);
BinaryFormatter bf = new BinaryFormatter();
TestSerilize testSerilize = (TestSerilize)bf.Deserialize(stream);
stream.Close();
}
四.Assets序列化
1.首先要继承ScriptableObject
//文件名字,按钮名字,顺序,通过按键创建面板
[CreateAssetMenu(fileName = "TestAssets", menuName = "CreatAssets", order = 0)]
public class AssetsSerilize : ScriptableObject
{
public int id;
public string Name;
public List<string> TestList;
}
2.读取文件
private string TestAssetPath="Assets/Scripts/TestAsset.asset";
void ReadTestAsset()
{
AssetsSerilize assetsSerilize = UnityEditor.AssetDatabase.LoadAssetAtPath<AssetsSerilize>(TestAssetPath);
}