xLua | xLua Framework | 2 加载

news2024/9/21 2:45:41

0. 基础

0.1 不同加载模式 测试用

编辑器模式;打包模式;更新模式

public enum GameMode
{
    EditorMode,
    PackageBundle,
    UpdateMode,
}
0.2 加载资源步骤与接口

    
private void LoadAsset(string assetName, Action<Object> action)
{
    if (AppConst.GameMode == GameMode.EditorMode)
    {
#if UNITY_EDITOR
        EditorLoadAsset(assetName, action);
#else
        Debug.LogError("Editor mode is not supported in the built version.");
#endif
    }
    else
    {
        StartCoroutine(LoadBundleAsync(assetName, action));
    }
}
0.3 解析版本文件

/// <summary>
/// 解析版本文件
/// </summary>
public void ParseVersionFile()
{
    //版本文件路径
    string url = Path.Combine(PathUtil.BundleResourcePath, AppConst.FileListName);
    string[] data = File.ReadAllLines(url);

    //解析文件信息
    for (int i = 0; i < data.Length; i++)
    {
        string[] info = data[i].Split('|');

        BundleInfo bundleinfo = new BundleInfo()
        {
            AssetsName = info[0],
            BundleName = info[1]
        };

        //list特性:本质是数组但可动态扩容
        bundleinfo.Dependences = new List<string>(info.Length - 2);
        for (int j = 2; j < info.Length; j++)
        {
            bundleinfo.Dependences.Add(info[j]);
        }
        m_BundleInfos.Add(bundleinfo.AssetsName, bundleinfo);
    }
}

1. 打包模式加载资源

递归异步加载资源:
根据资源的依赖关系递归加载所有需要的资源包,并最终加载目标资源,加载完成后调用回调函数处理加载资源。

/// <summary>
/// 递归异步加载资源
/// </summary>
/// <param name="assetName"></param>
/// <param name="action"></param>
/// <returns></returns>
IEnumerator LoadBundleAsync(string assetName, Action<Object> action = null)
{
    string bundleName = m_BundleInfos[assetName].BundleName;
    string bundlePath = Path.Combine(PathUtil.BundleResourcePath, bundleName);
    List<string> dependences = m_BundleInfos[assetName].Dependences;
    if (dependences != null && dependences.Count > 0)
    {
        for (int i = 0; i < dependences.Count; i++)
        {
            yield return LoadBundleAsync(dependences[i]);
        }
    }

    AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(bundlePath);
    yield return request;

    AssetBundleRequest bundleRequest = request.assetBundle.LoadAssetAsync(assetName);
    yield return bundleRequest;

    //Log
    Debug.LogFormat("Package Bundle Mode Load Resource : {0}", assetName);

    action?.Invoke(bundleRequest?.asset);
}

2. 编辑器模式加载资源

/// <summary>
/// 编辑器模式加载资源
/// </summary>
/// <param name="assetName"></param>
/// <param name="actioin"></param>
#if UNITY_EDITOR
void EditorLoadAsset(string assetName, Action<Object> actioin = null)
{
    //Log
    Debug.LogFormat("Editor Mode Load Resource : {0}", assetName);

    Object obj = UnityEditor.AssetDatabase.LoadAssetAtPath(assetName, typeof(Object));
    if (obj == null)
        Debug.LogError("Asset name is not exist" + assetName);

    actioin?.Invoke(obj);
}
#endif

3. 更新模式加载资源

详见3 热更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1953329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3使用递归组件渲染层级结构

先看看是不是你想要的&#xff1a; 当有层级去渲染的时候&#xff0c;嵌套的层级不明确&#xff0c;这时只能通过递归组件去渲染。 数据如下&#xff1a; 通过判断subCatalog这个字段的长度是否大于0来确定是否有下级。 上代码&#xff1a;(代码是使用uniapp开发的&#xff0…

visual studio 问题总结

一. Visual Studio: 使用简体中文&#xff08;GB2312&#xff09;编码加载文件, 有些字节已用Unicode替换字符更换 解决方法&#xff1a;vs 工具-》选项-》文本编辑器

24年第三届钉钉杯大学生大数据挑战赛浅析

需要完整资料&#xff0c;请关注WX&#xff1a;“小何数模”&#xff01; 本次钉钉杯大数据挑战赛的赛题已正式出炉&#xff0c;无论是赛题难度还是认可度&#xff0c;该比赛都是仅次于数模国赛的独一档&#xff0c;可以用于国赛前的练手训练。考虑到大家解题实属不易&#xf…

【BUG】已解决:ERROR: Failed building wheel for jupyter-nbextensions-configurator

ERROR: Failed building wheel for jupyter-nbextensions-configurator 目录 ERROR: Failed building wheel for jupyter-nbextensions-configurator 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我…

【深入理解SpringCloud微服务】深入理解nacos

【深入理解SpringCloud微服务】深入理解nacos Nacos服务注册内存注册表内存注册表的更新通知客户端服务变更、服务同步、健康检查2.x版本nacos的变化 Nacos服务注册 spring-cloud-alibaba-nacos-discovery通过实现spring-cloud-commons规范定义的接口&#xff0c;完成nacos接入…

西电网络空间安全综合953考研分享||西安电子科技大学

一、院校选择 如何选择适合自己的学校以及专业 1. 首先要对自己选择的学校有热情&#xff0c;选择自己最想去的学校 2. 其次选择在自己能力范围内努力能考上的学校&#xff0c;综合考虑地区&#xff08;不同地区公共课分数有一定的差别&#xff09;、学校&#xff08;建议跨…

MySQL索引、事务(数据库管理与高可用)

一、索引的概念 索引&#xff1a;排序的列表&#xff0c;对数据进行快速的查询&#xff1b; 针对不同的产品需求&#xff0c;或者不同的数据库结构&#xff0c;会创建不同的索引&#xff1b; 1&#xff1a;普通索引&#xff08;默认索引&#xff09; 2&#xff1a;唯一索引…

如何有效的进行小程序的优化

如今小程序已经成为了许多开发者开展业务&#xff0c;提供服务的重要平台 。所以如何有效的优化小程序成为了开发者关注的首要问题&#xff0c;以下是一份详细的小程序优化方案&#xff1a; 一、目标设定 明确小程序优化的主要目标&#xff0c;例如提高用户留存率、增加用户活…

writing classes ... [xxx of xxxx] 执行时间太长

一、问题展示 二、解决方法 打开设置【File - Settings…】修改堆大小

MySQL内如何改变编码格式

查找数据库的编码格式&#xff1a; show variables like character%;具体内容时这些 在创建表时设定编码格式&#xff1a; create database <要创建的数据库的名字> charset utf8; 修改数据库默认编码&#xff1a; set character_set_databaseutf8mb4; character_…

『 Linux 』信号概念与信号的产生 ( 万字 )

文章目录 信号概念前台进程与后台进程信号的本质硬件理解信号的产生Core dump 标志 信号概念 "信号"一词指用来传达信息或只是的各种形式的提示或标志; 在生活中常见的信号例如红绿灯,交通标志,短信通知等 在操作系统中,"信号"是一种用于异步通知进程发生特…

Flink大状态作业调优——DataStream篇

一、Flink 状态&#xff08;State&#xff09;简介 在流式计算中有些操作一次处理一个独立的事件(比如解析一个事件), 有些操作却需要记住多个事件的信息(比如窗口操作)。那些需要记住多个事件信息的操作就是有状态的。流式计算分为无状态计算和有状态计算两种情况。状态可以理…

jionlp根据词典进行行政区划补全

背景 需要对地址数据进行行政区划补全的,可以用下面的方法,当然是有条件限制的,只限于提供本省的词典和补全本身的地址数据,否则容易错乱 效果测试 lp = LocationParser() loc = 侨英街道乐海南里170号 res = lp(loc) print(res)1、安装或者更新 python安装 pip insta…

【秋招笔试题】小明的美食

解析&#xff1a;思维题。由于需要互不相同&#xff0c;每次操作取重复的值与最大值相加即可&#xff0c;这样即可保证相加后不会新增重复的值。因此统计重复值即可。 #include <iostream> #include <algorithm>using namespace std; const int maxn 1e5 5; int…

【高中数学/对数函数,指数函数】设方程10^x=|lg(-x)|的两根分别为x1,x1,则以下四选项正确的是? (PS:牛顿中值法失效的案例)

【问题】 设方程10^x|lg(-x)|的两根分别为x1,x1,则以下四选项正确的是&#xff1f; A.x1*x2<0 B.x1*x20 C.x1*x2>1 D.0<x1*x2<1 【解答】 10^x|lg(-x)|的两根&#xff0c;即函数y10^x与y|lg(-x)|的两个交点。 函数y10^x的曲线无须赘述&#xff0c;y|lg(-x)…

C++初阶学习第四弹——类与对象(中)

目录 一. 类的默认成员函数 二.六种默认成员函数 1、构造函数 1.1 构造函数的作用 1.2 特性 1.3 默认构造函数 2、析构函数 2.1 析构函数的作用 2.2 析构函数的用法 3、拷贝构造函数 3.1 拷贝构造函数的作用 3.2 特征 3.3 默认拷贝构造函数 三.总结 类与对象&…

LwIP入门实战 — 1 计算机网络简述

目录 1 计算机网络类别 2 常用网络协议与协议栈 2.1 常用网络协议 2.2 常用TCP/IP协议栈 3 网络协议的分层模型 4 协议层报文间的封装与拆封 5 WAN接口和LAN接口 1 计算机网络类别 广域网WAN(Wide Area Network)&#xff1a;广域网的作用范围通常为几十到几千公里&…

浅析JWT原理及牛客出现过的相关面试题

原文链接&#xff1a;https://kixuan.github.io/posts/f568/ 对jwt总是一知半解&#xff0c;而且项目打算写个关于JWT登录的点&#xff0c;所以总结关于JWT的知识及网上面试考察过的点 参考资料&#xff1a; Cookie、Session、Token、JWT_通俗地讲就是验证当前用户的身份,证明-…

记录|使用HslCommunication库进行写入Real数据的坑

项目场景&#xff1a; 现在已经通过HslCommunication连接上了PLC&#xff0c;需要对DB1.DBD10的位置处进行数据写入。 问题描述 但是进行将12.2写入指定位置DB1.DBD10时&#xff0c;发现无法从博图中实时检测到数据的写入。 下面是我当时错误的数据写入方法&#xff1a;【主…

Maven实战(一)- Maven安装与配置

Maven实战&#xff08;一&#xff09;- Maven安装与配置 文章目录 Maven实战&#xff08;一&#xff09;- Maven安装与配置1.下载安装包2.配置环境变量。3.安装目录分析4.设置HTTP代理5.镜像 前言&#xff1a; ​ 最近博主看完了《Maven实战》&#xff08;许晓斌著&#xff09;…