unity商业游戏底层资源加载框架

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


前言

本篇文章主要是记录一些商业游戏底层资源加载框架的一些感悟和学习笔记,主要是学习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提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值