[引擎]之七:理解资源以及Unity3d资源加载

13 篇文章 0 订阅

0.前言

       看到一篇关于Unity资源加载入门文章(ps.内容很好),虽然我也算是个资深U3D程序了,但是,还从来没有仔细想过加载资源方面的实现原理。最近刚看完《3D游戏编程大师技巧》,借鉴对书中内容的理解,举一反三分析一下U3D的资源加载。

1.《3D游戏编程大师技巧》资源加载总结

  • 1.首先,资源就是存在硬盘上的文件。文件类型,可以是.fbx .obj (模型文件),.midi .mp3 (声音文件),可以是自定义的文件类型
  • 2.将资源加载到内存中之后,需要对资源的格式进行解析,创建对象实例,给对象实例赋值
  • 3.资源的信息存储到了对象实例之后,资源文件其实就没有用了。这个时候,可以选择将资源从内存中释放掉,或者,向U3D加载AssetBundle那样,存在内存中,以方便以后再创建这个资源的实例对象。

要创建资源的实例,并将信息记录到实例中,那么就需要知道资源的格式。
要知道,各种类型的资源其实没什么神秘的敌方,其实就是信息组织的方式不同而已,相对应的,解析的方式也是不同的。

举个例子,.PLG文件的格式是:

  • 物体名称 顶点数 多边形数
  • 顶点列表
    (按0到n的顺序排列。每个顶点的坐标之间用空格隔开:x y z)
  • 多边形列表
    (每行描述一个多边形的颜色、顶点数、顶点的索引号:描述符 顶点数 顶点(逆时针方向排列)v1 v2 v3 … vn)
pyramid 5 5         // 模型名字是 pyramid 有5个顶点,5个面
0 20 0              // 第1个顶点,坐标(0,20,0) 顶点index=0
30 -10 30           // 第2个顶点 顶点index=1
30 -10 -30          // 第3个顶点 顶点index=2
-30 -10 -30         // 第4个顶点 顶点index=3
-30 -10 30          // 第5个顶点 顶点index=4
10 3 0 2 1          // 第1个多边形 描述符是10 3个顶点,顶点的index分别是0,2,1
10 3 0 3 2          // 第2个多边形
10 3 0 4 3          // 第3个多边形
10 3 0 1 4          // 第4个多边形
10 4 1 2 3 4        // 第5个多边形

因此,类推到U3D的资源加载方式中,如果能够知道所加载文件的信息组织方式,那么加载使用什么的,也就不神秘了。

2.U3D资源加载总结

总结Unity资源加载入门中提到的文件格式(U3D自定义的文件格式):

  • 1.meta文件
    .fbx .jpg .png等其他地方也通用的文件,之外U3d自定义的.meta文件用于记录文件的其他信息,可以理解为配置信息
    不同资源的.meta文件内容不一样,稍微列举一些
fileFormatVersion: 2
guid: 620945c7971b94e4c98fb93f29a7526e      // 资源的唯一标识
timeCreateed: xxxx                          // 创建时间
MonoImporter:                               // 脚本
  serializedVersion: 2                      
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
folderAsset: yes                        // 文件夹(文件夹才有的类型)

guid是标识资源的唯一id。文件夹、脚本什么的,也都是资源,都有.meta文件。
如果是模型资源的.meta文件,里面有存储模型的导入信息、动作信息等。导入模型的不同配置都在模型的.meta文件中。U3D中只能修改模型的配置文件,模型资源其实是没有修改的。
同理,其他文件比如图片什么的,配置文件也都在.meta文件中记录

  • 2.*.Prefab
    这是U3D自定义的资源
    这个资源中记录了这个Prefab中所使用到的GameObject的信息,以及这个GameObject上有什么Component、Layer、tags、name、icon等等以及一个唯一标识文件内部各对象之间的关系——Local ID

  • 3 真实的由资源创建的对象实例,会通过InstanceID唯一标识

  • 4.UnityEditor会维护创建一张映射表,记录了File GUID、Local ID 和Instance ID之间的关系。用于请求资源的快速查找。(AssetDatabase类中提供了查找文件资源、prejfab资源、实例资源的各种方法)

  • 5.AssetBundle资源中存储了通用格式资源的压缩文件(也可能不压缩),和与其他引用到的资源的信息

3.总结

总之,游戏中的东西都不是凭空出现的。所有东西都记录到文件里面。文件也就是资源。游戏过程中将资源的信息加载到内存中。
以上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

延澈左

小小心意

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值