找回密码
 立即注册
查看: 335|回复: 5

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

[复制链接]
发表于 2023-8-30 12:07 | 显示全部楼层 |阅读模式
作为游戏开发的菜鸟,想请教一下知乎上的前辈们:Unity开发过程中的资源加载,因为有热更的需求,因此在出产环境下得使用AssetBundle,但是不知道各位在开发过程中是使用什么方式实现资源的动态加载的呢?是否通过Resources.Load()加载,然后在发布时再换成AssetBundle呢?还是说在开发调试的过程中就直接用上AssetBundle呢?如果是直接用上AssetBundle进行开发调试的话,会不会有诸多不便呢?如果是用Resources.Load()的话,能否请教best practice呢?
发表于 2023-8-30 12:08 | 显示全部楼层
Unity商业项目中都会使用AssetsBundle或者它的变种Addressable,而不使用Resources。
   原因如下:
       (1) Resources加载的资源,不能做资源热更新,当要更新Resources里面的资源的时候,要借助Ab包,才能更新。
      (2) Resources代码加载资源,要求资源必须要放到Resources文件夹,同时在打包发布的时候也要带上Resources里面的内容,如果一个游戏由1G多的资源,要打空包,使用Resources是不能实现打空包的。
   综上,要热更新与打空包必须要使用AssetsBundle机制/Addressable机制,而不能使用Resources。
发表于 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预编译分割开来。
发表于 2023-8-30 12:09 | 显示全部楼层
AssetBundle 或者 直接调用
Resources 是你不需要频繁更新的资源又不希望常驻场景的时候,或者需要根据需求才调用时用的。
你可以用#if 切换编译代码
我项目里面 是 editor 模式下 直接用 UnityEditor.AssetDatabase.LoadAssetAtPath 获取
然后 simulateBuild 和 打包 下 用 AssetBundle
发表于 2023-8-30 12:10 | 显示全部楼层
直接上AssetBundle,Unity在这方面磕了不久,已经算是比较完善了。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-6-25 01:27 , Processed in 0.107979 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表