商业打包AB第一天

一·资源加载的方式

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);
    }

猜你喜欢

转载自blog.csdn.net/qq_36429060/article/details/89790316