using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
public static class InfoNeed
{
public static readonly string path = Path.Combine(Application.dataPath, "StreamingAssets");
}
##########
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
public class BuildAssetsBundle
{
[MenuItem("Tools/BuildAB")]
public static void Build()
{
string outPath = InfoNeed.path;
if (Directory.Exists(outPath))
{
Directory.Delete(outPath,true);
}
Directory.CreateDirectory(outPath);
BuildPipeline.BuildAssetBundles(outPath, BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.StandaloneWindows64);
AssetDatabase.Refresh();
}
}
#########
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml.Serialization;
using System;
[Serializable]
public class TestSerilize {
[XmlAttribute("MyId")]
private int id;
public int MyId { get { return id; } set { id = value; } }
[XmlAttribute("MyName")]
private string name;
public string MyName { get { return name; } set { name = value; } }
[XmlAttribute("MyGrade")]
private List<Grade> grade=new List<Grade>();
public List<Grade> MyGrade { get { return grade; } set { grade = value; } }
}
[Serializable]
public class Grade
{
[SerializeField]
public int chinese;
[SerializeField]
public int math;
}
######
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
using System.Xml.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
public class TestLoad : MonoBehaviour
{
TestSerilize testSerilize = new TestSerilize();
// Use this for initialization
void Start()
{
//TestSerilizeXML(testSerilize);
//TestDeSerilizeXML();
//BinarySerilizeTest(testSerilize);
//BinaryDeserilizeTest();
//TestAssets();
}
void TestAssets()
{
AssetsSerlize AS = UnityEditor.AssetDatabase.LoadAssetAtPath<AssetsSerlize>("Assets/TestAssets.asset");
Debug.Log(AS.ID);
Debug.Log(AS.Name);
Debug.Log(AS.Grade[0]);
}
void TestLoadAB()
{
AssetBundle assetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/cube.unity3d");
Instantiate(assetBundle.LoadAsset<GameObject>("cube"));
}
#region XML
/// <summary>
/// 序列化XML
/// </summary>
/// <param name="testSerilize"></param>
void TestSerilizeXML(TestSerilize testSerilize)
{
InitXML();
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());
xml.Serialize(sw, testSerilize);
sw.Close();
fileStream.Close();
}
/// <summary>
/// 反向序列化XML
/// </summary>
/// <returns></returns>
TestSerilize DeserilizeXML()
{
FileStream fileStream = new FileStream(Application.dataPath + "/Test.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
XmlSerializer xs = new XmlSerializer(typeof(TestSerilize));
TestSerilize testSerilize = (TestSerilize)xs.Deserialize(fileStream);
fileStream.Close();
return testSerilize;
}
void TestDeserilizeXML()
{
TestSerilize testSerilizeObj = DeserilizeXML();
Debug.Log("testSerilizeObj.MyId==" + testSerilizeObj.MyId);
Debug.Log("testSerilizeObj.MyName==" + testSerilizeObj.MyName);
Debug.Log("testSerilizeObj.MyGrade1.chinese==" + testSerilizeObj.MyGrade[0].chinese);
Debug.Log("testSerilizeObj.MyGrade2.math==" + testSerilizeObj.MyGrade[1].math);
}
void InitXML()
{
testSerilize.MyId = 1;
testSerilize.MyName = "TestXML";
Grade grade1 = new Grade();
grade1.chinese = 1;
grade1.math = 2;
Grade grade2 = new Grade();
grade2.chinese = 3;
grade2.math = 4;
testSerilize.MyGrade.Add(grade1);
testSerilize.MyGrade.Add(grade2);
}
#endregion
#region 二进制
void BinarySerilizeTest(TestSerilize testSerilize)
{
InitBinary();
using (FileStream fs = new FileStream(Application.dataPath + "/Test.bytes", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, testSerilize);
}
}
TestSerilize BinaryDeserilize()
{
TextAsset textAsset = UnityEditor.AssetDatabase.LoadAssetAtPath<TextAsset>("Assets/Test.bytes");
MemoryStream ms = new MemoryStream(textAsset.bytes);
BinaryFormatter bf = new BinaryFormatter();
TestSerilize testSerilize = (TestSerilize)bf.Deserialize(ms);
ms.Close();
return testSerilize;
}
void BinaryDeserilizeTest()
{
TestSerilize testSerilizeObj = BinaryDeserilize();
Debug.Log("testSerilizeObj.MyId==" + testSerilizeObj.MyId);
Debug.Log("testSerilizeObj.MyName==" + testSerilizeObj.MyName);
Debug.Log("testSerilizeObj.MyGrade1.chinese==" + testSerilizeObj.MyGrade[0].chinese);
Debug.Log("testSerilizeObj.MyGrade2.math==" + testSerilizeObj.MyGrade[1].math);
}
void InitBinary()
{
testSerilize.MyId = 2;
testSerilize.MyName = "TestBinary";
Grade grade10 = new Grade();
grade10.chinese = 10;
grade10.math = 20;
Grade grade20 = new Grade();
grade20.chinese = 30;
grade20.math = 40;
testSerilize.MyGrade.Add(grade10);
testSerilize.MyGrade.Add(grade20);
}
#endregion
}
#######
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName ="TestAssets",menuName ="CreateAssets",order =0)]
public class AssetsSerlize : ScriptableObject {
public int ID;
public string Name;
public List<int> Grade;
}