当前位置: 首页 > news >正文

做网站要钱吗广州论坛建站模板

做网站要钱吗,广州论坛建站模板,长春模板建站系统,适合企业员工培训的课程【文件格式】 文件可以分为文本文件、图片文件、音频文件、视频文件等等#xff0c;我们常见的这些文件都有行业内的标准格式#xff0c;其意味着按照一定的规则和规范去保存读取文件#xff0c;可以获取我们想要的数据。 有些软件会有自己的文件格式#xff0c;会按照其…【文件格式】 文件可以分为文本文件、图片文件、音频文件、视频文件等等我们常见的这些文件都有行业内的标准格式其意味着按照一定的规则和规范去保存读取文件可以获取我们想要的数据。 有些软件会有自己的文件格式会按照其自己设计的规则和规范去保存读取文件。 我们自己在做开发时也需要保存和读取一些文件但我们需要保存的数据一般会比较简单很少去做设计格式。 例如要保存一系列角色和怪物的当前血量。为了读取时能区分是角色和怪物可以先保存角色个数。读取时先读取角色个数n随后读取n个血量数据这些都是角色的随后读取的是怪物的。 个数n就是文件头血量是文件数据。 一般来说任何文件都可以分为文件头和文件数据两个部分文件头用于描述文件数据。如果要保存的数据很复杂可以进一步将文件头分为文件头描述整个文件的例如版本号和数据头描述数据部分的、将文件数据分为主要数据段和次要数据段等。 如果复杂些例如还需要保存当前的魔力值那么需要区分当前的值是魔力值还是血量。如果是自己做开发自己读写可以默认先是血量随后的值是魔力值。如果要保存角色的更多属性那么要保存的不能是单一的数值而是不同数值组成的数据结构了。 如果是软件那么采用默认的方式就不合适随着版本的迭代要保存的数据会发生变化必须在文件头中加入版本号和其他信息以描述要保存的数据。要保存的数据越复杂文件头也就越复杂。 尽管更加复杂但只要明白保存读取的规则和规范即文件格式那么和我们自定义的保存读取的主要逻辑在本质上没有区别。 行业标准格式更为复杂其会被多个软件使用可以看看场景的文件格式了解下文件是怎么样构成的 PNG文件解读(2):PNG格式文件结构与数据结构解读—解码PNG数据-腾讯云开发者社区-腾讯云 MP3文件结构解析(超详细)-CSDN博客 AVI文件格式详解-CSDN博客 【AssetBundle格式】 详细的请看下Unity 的AssetBundle解析视频和AssetStudio读取Bundle的源码这里只做简要介绍 AssetBundleHeader AssetBundleFileHeaderStorageBlock[] m_BlocksInfoNode[] m_DirectoryInfoSerializedFile SerializedFileHeader 文件头MetaData Types 每个对象的类型是什么 TypeTreeObjects 有多少对象分别是什么多大在哪开始读取ScriptTypes 如果有mono脚本的话脚本的类型是什么Externals 如果包里的对象引用了其他AB里的资产分别在哪里可以找到RefTypesObject第一个Object类型为AssetBundle一系列的其他Object (包内Object的数据)ResourceFile 下面是相关的数据结构 // AssetBundle文件头结构 public class AssetBundleFileHeader {public string signature;public uint version;public string unityVersion;public string unityRevision;public long size;public uint compressedBlocksInfoSize;public uint uncompressedBlocksInfoSize;public ArchiveFlags flags; };public class StorageBlock{public uint compressedSize;public uint uncompressedSize;public StorageBlockFlags flags;}public class Node{public long offset;public long size;public uint flags;public string path;}public class SerializedFileHeader{public uint m_MetadataSize;public long m_FileSize;public SerializedFileFormatVersion m_Version;public long m_DataOffset;public byte m_Endianess;public byte[] m_Reserved;}public class SerializedType{public int classID;//unity有个classId的映射表public bool m_IsStrippedType;public short m_ScriptTypeIndex -1;public TypeTree m_Type;public byte[] m_ScriptID; //Hash128public byte[] m_OldTypeHash; //Hash128public int[] m_TypeDependencies;public string m_KlassName;public string m_NameSpace;public string m_AsmName;}public class TypeTree{public ListTypeTreeNode m_Nodes;public byte[] m_StringBuffer;}public class TypeTreeNode{public string m_Type;public string m_Name;public int m_ByteSize;public int m_Index;public int m_TypeFlags; //m_IsArraypublic int m_Version;public int m_MetaFlag;public int m_Level;public uint m_TypeStrOffset;public uint m_NameStrOffset;public ulong m_RefTypeHash; }public class ObjectInfo{public long byteStart;//相对于SerializedFileHeader的偏移public uint byteSize;public int typeID;public int classID;public ushort isDestroyed;public byte stripped;public long m_PathID;public SerializedType serializedType;}public class LocalSerializedObjectIdentifier{public int localSerializedFileIndex;public long localIdentifierInFile;}public class FileIdentifier{public Guid guid;public int type; //enum { kNonAssetType 0, kDeprecatedCachedAssetType 1, kSerializedAssetType 2, kMetaAssetType 3 };public string pathName;//custompublic string fileName;}public class AssetBundle : NamedObject{public PPtrObject[] m_PreloadTable;public KeyValuePairstring, AssetInfo[] m_Container; }public class AssetInfo{public int preloadIndex;public int preloadSize;public PPtrObject asset; } 我们要关心的核心问题是如何从Bundle中加载需要的Asset 业务上层会传入一个资源路径游戏中的资源加载模块会根据资源路径得到其所在的Bundle路径资源加载模块会调用Unity接口去加载Bundle先将整个文件头加载到内存中其以SerializedFile 格式存储在内存中注意保存文件时也即磁盘上的数据结构和内存中的数据结构不一定一致根据传入的路径从Bundle内的Container中找到该Asset对应的AssetInfo从AssetInfo中拿到PreloadIndex其是PreloadTable中的索引PreloadSize是长度结合两者可以知道该Asset包含了哪些Object并获取到ObjectInfo(也叫ObjectHeader)从ObjectInfo中拿到FileID和PathID,PathID是Object在AssetBundle内的标识如果FileID为0表明Object在该Bundle内如果FileID不为0则说明需要的Object在其他AssetBundle中从Exteranls中根据FileID找到对应的FileIdentifier拿到AssetBundle的名字再根据PathID找到Object 。 在内存中会有其他转换例如每个SerializedFile都会有个SerializedFileIndex。FileID和SerializedFileIndex不过是同一个Bundle在磁盘和内存上的不同标识而已从ObjectInfo中拿到byteStart和byteSize即可知道Object数据在整个Bundle文件中的位置并实现读取依次将Asset内的所有Object数据读取到内存中根据读取的Object数据反序列化得到想要加载的资源 【AssetBundle的加载和卸载】 先看一张图 加载时AssetBundleHeader、SerializedFileHeader、MetaData的数据会进入到内存中也即途中的AssetBundle内存镜像 AssetBundle.LoadFromFile(path)同步加载path为本地路径AssetBundle.LoadFromFileAsync(path)异步加载path为本地路径AssetBundle.LoadFromMemory(byte[] binary)从字节数组加载binary为目标ab二进制流AssetBundle.LoadFromMemoryAsync(byte[] binary)从字节数组异步加载binary为目标ab二进制流UnityWebRequest.GetAssetBundle(string uri)url为ab文件路径可为本地也可为云端 加载Asset时会从Bundle中加载一系列的Object生成对应的Asset每个Asset会根据FileID和PathID生成唯一的标识ID assetBundle.LoadAssetT(name)T为目标资产类型name为资产名称会返回一个T实例assetBundle.LoadAsset(name,type)name为资产名type为资产类型assetBundle.LoadAllAssetsT()T为目标资产类型会返回一个assetBundle中所有T类型资产数组assetBundle.LoadAllAssets()加载assetBundle中所有资产返回一个assetBundle中所有资产数组 实例化时会生成一份新的Asset其有一个对应的InstanceID并引用原来的Asset。 【AssetBundle解析工具】 unity官方的WebExtract和Binary2Text WebExtract路径 cd进入路径后 输入AssetBundle路径即可  Binary2Text路径 AssetStudio 【AssetBundle优化】 IO优化先了解下读取文件的详细流程 这里说的都是很通用的IO优化方法不光是读取AssetBundle读取其他文件也一样 缓存文件句柄 打开关闭文件是一个耗时的操作上层要卸载Bundle时可以先缓存文件句柄而不是立即关闭释放Object数据重排 IO中很大一部分时间消耗是寻找磁道和磁头移动的时间即寻道时间为了减少这个时间需要数据顺序排列这样可以顺序读取类似CPU读取数组比List快。在加载Asset时会读取多个Object的数据如果保证传入的流的Pos是顺序增加或减少而不是来回横跳那么可以大幅度减少IO时间。无锁多线程 一般来说一个成熟软件的读取文件操作会在单独的IO线程中执行但会涉及到很多加锁操作可以考虑改成无锁的这个难度比较大组合IO请求 一次大的IO请求比多次小的IO请求好如果多个小的IO请求的位置大致是连续的即使中间有部分数据可能不是需要的也可以组合成一次大的IO请求 大小和内存优化 剔除重复数据 保证每个Asset只在一个Bundle内字符串优化内存优化很大一部分是去如何优化字符串 string转Id 例如所有的AssetInfo中的assetName转为int加载资源时也传入Id所有标识改为用Id,int64改为int32合并重复数据例如TypeTree合并成一份精简冗余数据 会建立各种映射关系可以梳理下简化映射例如PersistentManager里的remapper有些数据在加载到内存后可能不会用了从原有的数据结构中拆开然后释放例如各种版本信息动态Buffer读取文件时一般会有个Buffer缓存数据读Object时的Buffer是FileCacherRead可以根据需要动态调整或者共用Buffer 【参考】 AssetBundle研究报告 | BLOG Unity如何把一个对象从内存序列化到磁盘 | 矩阵·空间 AssetBundle热更新完整工作流与知识点解析 | 登峰造极者殊途亦同归。
http://www.tj-hxxt.cn/news/221902.html

相关文章:

  • 做知识产权服务的网站网页模板下载 可以赚钱吗?
  • 网站建设的技术难点食品类网站模板
  • 网站软件app网络管理系统平台
  • 爱站网ip反域名查询自学网站建设要看什么书
  • 阿里云自助建站教程自适应网站如何做移动适配
  • 武夷山市建设局网站广告模板网站
  • 网站推广渠道怎么做wordpress带会员中心的主题
  • 商城网站流程wordpress qps
  • 流量卡分销平台seo优化价格
  • 网站策划案内容2万一3万电动汽车
  • 邯郸市建设局网站2017网站建设的软件叫啥
  • 卓越 网站中国交通建设监理协会网站打不开
  • iis5.1怎么发布网站做馋嘴小栈官方网站
  • html5网站开发框架灰色关键词排名优化
  • 自己网站做电子签章有效么首页关键词排名代发
  • 全自动引流推广软件下载谷歌seo网站推广怎么做
  • 建设银行温州支行官方网站做英语四级题的网站
  • 求创意设计分享的网站建立企业网站步骤
  • 地板网站源码做网站能挣钱么
  • 网站死链接怎么删除seo专员是干嘛的
  • 赣州本地网站句容网站制作哪家好
  • 汕头免费做网站广告牌logo设计制作
  • 湛江网站优化wordpress 正在发送请求
  • 用vs2010做网站登录做选择的网站首页
  • 需要上传视频的网站长沙景点介绍
  • 中国建设银行网站企业网银收费vue如何网站开发
  • 加强公司网站平台建设的意义专门开发小程序的公司
  • 什么网站有加工外发做的网页设计实训报告摘要怎么写
  • 建工教育网校官方网站腾讯云阻止网站访问
  • 长沙高端网站建设软件开发技术方案模板