提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


文章目录

  • 前言
  • 一、预备知识
  • 1.程序集
  • 2.unity资源加载方式介绍
  • 3.c#的xml序列化
  • 4. unity asset序列化
  • 二、使用步骤
  • 1.引入库
  • 2.读入数据
  • 总结



前言

本篇文章主要是记录一些商业游戏底层资源加载框架的一些感悟和学习笔记,主要是学习siki学院的视频教程和GitHub上的开源框架。有错误欢迎指出。

一、预备知识

1.程序集

就是一个可以调用的库,范围关系是就近原则,就是同一个文件夹下的c#脚本归属于这个程序集,如果需要引入其他的程序集,需要在reference中添加他们的依赖关系。

2.unity资源加载方式介绍

  1. 拖到组件上(就是实例化,将预制体之类的拖到组件上)
  2. Resources.load (加载resource文件夹下的路径目标,进行实例化,不过resource文件夹下的文件大小是有上限的大概2G,一般不会放prefab,放配置表)
  3. AssetBundle
public class BuildEditor
{
    [MenuItem("Tools/打包")]
    public static void Build()
    {
        BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath, BuildAssetBundleOptions.ChunkBasedCompression,
            EditorUserBuildSettings.activeBuildTarget);
        /*BuildPipeline.BuildAssetBundles  AssetBundle打包方式
         * Application.streamingAssetsPath   打包到的目录路径
         * BuildAssetBundleOptions.ChunkBasedCompression  打包格式
         * EditorUserBuildSettings.activeBuildTarget  打包平台,这里是编辑器使用的那个平台,就打包那个
         */
        AssetDatabase.Refresh();//进行一个编辑器的刷新,不然看不到
    }
}

4.AssetDataBase.LoadAtPtah

//GameObject gameObject = GameObject.Instantiate(M_prefab);//实例化,组件

        //GameObject gameObject1 = GameObject.Instantiate(Resources.Load("Attack") as GameObject);//resource文件夹加载

        //AssetBundle assetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/attack");
        //GameObject gameObject2 = GameObject.Instantiate(assetBundle.LoadAsset<GameObject>("attack"));

        //GameObject  gameObject3=GameObject.Instantiate(UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>("Assets/GameData/Prefabs/Attack.prefab"));//编辑器中的api,基本上不会使用

3.c#的xml序列化

  1. 将类进行xml序列化
void SerilizeTest()
    {
        TestSerilize testSerilize = new TestSerilize();
        testSerilize.Id = 1;
        testSerilize.Name = "测试";
        testSerilize.List = new List<int>();
        testSerilize.List.Add(2);
        testSerilize.List.Add(3);
        //XmlSerilaze(testSerilize);
        DeSerilizerTest();
    }
    void DeSerilizerTest()
    {
        TestSerilize testSerilize = XmlDeSerilaze();
        Debug.Log(testSerilize.Id + "  " + testSerilize.Name);
        foreach (var item in testSerilize.List)
        {
            Debug.Log(item);
        }
    }
    void XmlSerilaze(TestSerilize testSerilize)  //把这个类进行序列化
    {
        FileStream fileStream = new FileStream(Application.dataPath+"/Test.xml",FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite);//打开文件流创建一个xml文件
        StreamWriter sw = new StreamWriter(fileStream,System.Text.Encoding.UTF8);//用写入流来写入xml文件
        XmlSerializer xml = new XmlSerializer(testSerilize.GetType());//需要序列化的类型
        xml.Serialize(sw, testSerilize);//1.sw 序列化到那个文件去  2.testSerilize 需要序列化的类    最终的序列化
        sw.Close();
        fileStream.Close();
    }
    TestSerilize XmlDeSerilaze()//反向序列化
    {
        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;
    }
  1. 转成二进制
void BinarySerTest()
    {
        TestSerilize testSerilize = new TestSerilize();
        testSerilize.Id = 5;
        testSerilize.Name = "测试二进制";
        testSerilize.List = new List<int>();
        testSerilize.List.Add(20);
        testSerilize.List.Add(30);
        //BinarySerilize(testSerilize);
        BinaryDeserTest();
    }
    void BinaryDeserTest()
    {
        TestSerilize testSerilize = BinaryDeserilize();
        Debug.Log(testSerilize.Id + "   " + testSerilize.Name);
        foreach (var item in testSerilize.List)
        {
            Debug.Log(item);
        }
    }
    void BinarySerilize(TestSerilize testSerilize)
    {
        FileStream fs = new FileStream(Application.dataPath + "/test.bytes", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
        BinaryFormatter bf = new BinaryFormatter();
        bf.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 testSerilize = (TestSerilize)bf.Deserialize(memoryStream);
        memoryStream.Close();
        return testSerilize;
    }

4. unity asset序列化

第一步需要继承ScriptableObject这个类

[CreateAssetMenu(fileName ="TestAssets",menuName ="createAssets",order =0)]
public class AssetsSerilize : ScriptableObject
{
    public int ID;
    public string Name;
    public List<string> vs;
}

第二步读取

void ReadTestAssets()
    {
        AssetsSerilize assetsSerilize = UnityEditor.AssetDatabase.LoadAssetAtPath<AssetsSerilize>("Assets/Scripts/TestAssets.asset");
        Debug.Log(assetsSerilize.ID);
        Debug.Log(assetsSerilize.Name);
        foreach (var item in assetsSerilize.vs)
        {
            Debug.Log(item);
        }
    }

二、使用步骤

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。