rao841222 发表于 2023-8-30 12:07

Unity开发过程顶用AsssetBundle还是Resources?

作为游戏开发的菜鸟,想请教一下知乎上的前辈们:Unity开发过程中的资源加载,因为有热更的需求,因此在出产环境下得使用AssetBundle,但是不知道各位在开发过程中是使用什么方式实现资源的动态加载的呢?是否通过Resources.Load()加载,然后在发布时再换成AssetBundle呢?还是说在开发调试的过程中就直接用上AssetBundle呢?如果是直接用上AssetBundle进行开发调试的话,会不会有诸多不便呢?如果是用Resources.Load()的话,能否请教best practice呢?

shongliyong 发表于 2023-8-30 12:08

Unity商业项目中都会使用AssetsBundle或者它的变种Addressable,而不使用Resources。
   原因如下:
       (1) Resources加载的资源,不能做资源热更新,当要更新Resources里面的资源的时候,要借助Ab包,才能更新。
      (2) Resources代码加载资源,要求资源必须要放到Resources文件夹,同时在打包发布的时候也要带上Resources里面的内容,如果一个游戏由1G多的资源,要打空包,使用Resources是不能实现打空包的。
   综上,要热更新与打空包必须要使用AssetsBundle机制/Addressable机制,而不能使用Resources。

wzgyss 发表于 2023-8-30 12:08

开发时使用AssetDatabase.LoadAssetAtPath加载资源,打包状态下使用AssetBundle加载,建议自己封装一个资源加载类,然后用 #if UNITY_EDITOR来判断使用哪种。
另外不建议资源直接放在Resource中,这个目录下的资源会被直接打进包里(不是在AssetBundle,另打AssetBundle的话有两份),建议Asset目录下新建一个目录(如"Res"),来存放所有的资源。

军团秘密 发表于 2023-8-30 12:08

编辑器Editor里采用AssetDataBase.load,模拟环境或真机采用assetbundle,用#if预编译分割开来。

hyq6 发表于 2023-8-30 12:09

AssetBundle 或者 直接调用
Resources 是你不需要频繁更新的资源又不希望常驻场景的时候,或者需要根据需求才调用时用的。
你可以用#if 切换编译代码
我项目里面 是 editor 模式下 直接用 UnityEditor.AssetDatabase.LoadAssetAtPath 获取
然后 simulateBuild 和 打包 下 用 AssetBundle

nsok 发表于 2023-8-30 12:10

直接上AssetBundle,Unity在这方面磕了不久,已经算是比较完善了。
页: [1]
查看完整版本: Unity开发过程顶用AsssetBundle还是Resources?