Archive:对应文件夹位置,包含文件夹,压缩文件,网络位置,包含Load,Unload,Open,Create,Remove,FineFile等主要虚方法,用于对应各具体Archive来实现.

ResourceLocation:主要包含Archive,Watcher(文件位置变动),Recursive(是否查找子文件夹),Monitor(新建文件是否关联Watcher).

ResourceLocationIndex:为Dictionary<string,Archive>的别名,用于记录对应Archive里的所有文件.

ResourceGroup:成员LocationList为List<ResourceLocation>,而ResourceIndexCaseSensitive与ResourceIndexCaseInsensitive对应ResourceLocationIndex.二者分别记录当前组里所有文件夹和记录当前所有文件夹里的所有文件.

ResourceGroupManager会自动定义四个ResourceGroup,分别是DefaultResourceGroupName,InternalResourceGroupName,BootstrapResourceGroupName,AutoDetectResourceGroupName.用户定义的ResourceGroup可以直接放入配置文件.

Root在第一次初始化窗口时,会对各ResourceManager的子类初始化,如MaterialManager(DefaultResourceGroupName),ParticleSystemManager,MeshManager(InternalResourceGroupName).

资源是共通的,意思资源之间的引用不限制在同一文件夹或是压缩文件内,如在一个文件夹Materials下有一个文件MorningSkyBox.material,里面会有一个资源(Examples/MorningSkyBox)调用cubic_texture morning.jpg separateUV.代码路径大致如下过程:

ResourceGroupManager.Instance.InitializeResourceGroup("groupName");

//遇到MorningSkyBox.material

MaterialManager.ParseScript("MorningSkyBox.material")

//解析文件语句到cubic_texture morning.jpg separateUV

MaterialSerializer.ParseScriptLine("cubic_texture morning.jpg separateUV")

//解析cubic_texture,调用解析cubic_texture的方法

MaterialSerializer.ParseCubicTexture("morning.jpg separateUV")

//生成TextureUnitState

MaterialScriptContext.TextureUnitState.SetCubicTextureName("morning.jpg",false)

//根据文件名加上立方体纹理对应6个位置,得到正确的六个纹理文件名.

注意此时只在TextureUnitState的Frames填充六个纹理文件名,并没有加载资源.

而加载这些资源是在用材质Examples/MorningSkyBox的时候.如下面.

//使用Examples/MorningSkyBox资源做天空图.

SceneManager.SetSkyBox(true,"Examples/MorningSkyBox",5000);

//找到Examples/MorningSkyBox资源然后加载

Resource.Load()

//进入Resource具体的子类Material加载.

Material.Load()

//查找具体的Techniques里的Pass里的TextureUnitState加载.

TextureUnitState.Load()

//我使用的是OpenTK,则最终会使用GLTexture来加载

GLTexture.load()

//把文件名返回给ResourceGroupManager里的OpenResource来处理.

ResourceGroupManager.OpenResource(filename,groupname)

处理在这,我感觉有些问题,在前面TextureUnitState.Load()中,会把所有的资源都统一到组ResourceGroupManager.DefaultResourceGroupName来加载,不知是因为得不到正确的groupName,还是想全放入这个组添加引用.然后在OpenResource会根据DefaultResourceGroupName来查找,会发现找不到,因为这个资源本来是属性用户在配置文件添加的Popule组,这样就会调用ResourceGroupManager._findGroupContainingResoureceImpl(filename)找到正确的组.但是这样会引发一个问题,就是程序内部所有资源名都不能一样,不管是否在同一文件下,不然可能引用不到正确的资源,后面来实验一下.

总的来说,Axiom在解析资源文件时,会得到文件名字,但是不会去加载文件,因为这时并不会保证对应的ResourceManager已经加载过这个文件,只有先加载了所有资源文件,然后在用户使用这些资源时,对应的如材质,图片才会真正的加载.别的资源文件如Mesh,font总的来说也是这个流程.其中各类关系大致如下.

  

Axiom3D:资源引用与加载基本流程.的更多相关文章

  1. 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件

    [源码下载] 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件 作者 ...

  2. HTML页面处理以及资源文件的加载

    Javascript 异步加载详解 这篇文章很详细的介绍了HTML的页面处理以及资源文件的加载. 本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading ...

  3. Webpack 常见静态资源处理 - 模块加载器(Loaders)+ExtractTextPlugin插件

    Webpack 常见静态资源处理 - 模块加载器(Loaders)+ExtractTextPlugin插件 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二: ...

  4. UNITY_资源路径与加载外部文件

    UNITY_资源路径与加载外部文件 https://www.tuicool.com/articles/qMNnmm6https://blog.csdn.net/appppppen/article/de ...

  5. 【UE4 C++ 基础知识】<11>资源的同步加载与异步加载

    同步加载 同步加载会造成进程阻塞. FObjectFinder / FClassFinder 在构造函数加载 ConstructorHelpers::FObjectFinder Constructor ...

  6. 【Cocos2d-Js基础教学(5)资源打包工具的使用及资源的异步加载处理】

    TexturePacker是纹理资源打包工具,支持Cocos2dx的游戏资源打包. 如果用过的同学可以直接看下面的资源的异步加载处理 首先为什么用TexturePacker? 1,节省图片资源实际大小 ...

  7. Unity3d Web3d资源的动态加载

    Unity3d Web3d资源的动态加载 @灰太龙 参考了宣雨松的博客,原文出处http://www.xuanyusong.com/archives/2405,如果涉及到侵权,请通知我! Unity3 ...

  8. [UE4]一个好用的虚幻4插件,根据资源名称动态加载资源,GetCurrentLeveName(获得当前地图名称)

    下载地址 一.下载与UE4相对应的版本 二.在工程根目录新建Plugins目录,解压插件. 三.如果工程已经打开,则需要重新打开   四.重新打开工程后,右下角会有提示有新插件可用. 五.这个插件提供 ...

  9. 下载某资源文件并加载其中的所有Prefab到场景中

    using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> / ...

随机推荐

  1. HTML5学习笔记(七):CSS盒子模型

    在CSS中,盒子模型有W3C标准盒子模型和IE盒子模型两种,这里所谈的是基于W3C标准的盒子模型. 所有HTML元素都可以看作盒子,即所有HTML标签都支持盒子模型的属性,在CSS中,"bo ...

  2. Python 传值和传址 copy/deepcopy

    传值:被调函数局部变量改变不会影响主调函数局部变量 传址:被调函数局部变量改变会影响主调函数局部变量 Python参数传递方式:传递对象引用(传值和传址的混合方式),如果是数字,字符串,元组则传值:如 ...

  3. Asp.Net MVC绑定DropDownList等控件

    测试环境:vs2013..Net4.5.mvc5 一.Asp.Net MVC绑定控件原理说明 以Html.TextBox为例 /// <param name="name"&g ...

  4. LeetCode:Sqrt(x) 解题报告

    Sqrt(x) Implement int sqrt(int x). Compute and return the square root of x. SOLUTION 1: 参见:二分法总结,以及模 ...

  5. Django项目关闭debug模式后,静态文件无法加载的解决办法

    开启内置服务器,由于项目中local_settings.py文件中的DEBUG=True,进行开发和调试一直没什么问题. 但是现在需要编写404,500等出错页面,在debug模式下出了错都会出现报错 ...

  6. 将目录下面所有的 .cs 文件合并到一个 code.cs 文件中,写著作权复制代码时的必备良药

    将目录下面所有的 .cs 文件合并到一个 code.cs 文件中,写著作权复制代码时的必备良药 @echo off echo 将该目录下所有.cs文件的内容合并到一个 code.cs 文件中! pau ...

  7. Json转list,二层解析转换

    一层结构的数据: { "code": "0", "results": { "boyTotal": 0, "cl ...

  8. Postgres客户端编码问题

    数据库编程的编码问题数据库编程设计的编码问题包括三个方面:    数据库服务器编码:    数据库客户端编码:    本地环境编码.(1)数据库服务器字符编码:数据库服务器支持某种编码,是指数据库服务 ...

  9. Java 原码 反码 补码

    本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...

  10. FTDI通用转USB芯片简述

    FTDI公司的FT2232系列芯片可实现USB与异步串行口RS232/RS485.同步串行总线IIC/SPI/JTAG相互通信,市场占有率,使用普遍. FTDI芯片有两种类型的驱动:virtual C ...