- 用户指南
- 资源商店 (Asset Store)
- 资源服务器 (Asset Server)(仅限团队许可证)
- 缓存服务器(仅限团队许可证)
- 幕后场景
- 创建游戏
- 运行时实例化预设 (Prefabs)
- 变换 (Transforms)
- 物理
- 添加随机的游戏元素
- 粒子系统(Particle Systems)
- Mecanim 动画系统
- 旧动画系统
- 导航网格 (Navmesh) 和寻路 (Pathfinding)(仅限专业版 (Pro))
- Sound (音频侦听器)
- 游戏界面元素
- 多玩家联网游戏
- iOS 开发入门
- Android 开发入门
- Blackberry 10 开发入门
- Metro:入门指南
- 本地客户端开发入门
- FAQ
- Advanced
- Vector Cookbook
- 资源包(仅限专业版)
- Graphics Features
- 资源数据库 (AssetDatabase)
- 构建播放器管道
- 分析器(仅限专业版)
- 光照贴图快速入门
- 遮挡剔除(仅限专业版)
- 相机使用技巧
- 运行时加载资源
- 通过脚本修改源资源
- 用程序生成网格几何体
- 富文本
- 在 Unity 工程 (Project) 中使用 Mono DLL
- 事件函数的执行顺序
- 移动优化实用指南
- Unity XCode 工程结构
- 优化图形性能
- 减少文件大小
- 理解自动内存管理
- 平台依赖编译
- 泛型函数
- 调试
- 插件(专业版/移动版特有功能)
- 文本场景文件格式(仅限专业版)
- 流媒体资源
- 启动时运行编辑器脚本代码
- 网络模拟
- VisualStudio C 集成
- 分析
- 检查更新
- 安装多版本 Unity
- 故障排除
- Unity 中的阴影
- Unity 中的 IME
- 对集成显卡进行优化
- 网络播放器 (Web Player) 部署
- 使用网络播放器中的信任链系统
运行时加载资源
有些情况下,资源不必加载到场景就可以用到工程当中很有作用。例如,可能有个角色或其他对象出现在游戏的任何场景中但又极少用到(也许是一个“秘密”功能,一条错误消息或高分提醒)。此外,还可能想从单独的文件或 URL 加载资源,以缩短初始下载时间或允许互换游戏内容。
Unity 支持工程中的资源文件夹 (Resource Folders),允许在主游戏文件中提交内容,但在要求之前不会加载。在 Unity 专业版、Unity iOS 高级版和 Unity 安卓高级版中,也可以创建资源包 (Asset Bundles)。这些文件与主游戏文件完全分离开来,包含游戏需要从文件或 URL 中访问的资源。
资源包 (Asset Bundles)(仅限 Unity 专业版/iOS 高级版/安卓高级版许可证)
资源包 (Asset Bundles) 是一个外部资源集合。可以有许多资源包 (Asset Bundles),所以也有许多不同的外部资源集合。这些文件位于建成的 Unity 播放器外,通常在一个网路服务器上供终端用户动态访问。
要建一个资源包 (Asset Bundles),可从编辑器脚本中调用 BuildPipeline.BuildAssetBundle()。在参数中指定一个对象 (Objects) 数组,与其他选项一起附在建成的文件内。该步骤会生成一个文件,供以后在运行时通过 AssetBundle.Load() 动态加载。
资源文件夹 (Resource Folders)
资源文件夹 (Resource Folders) 为附在建成的 Unity 播放器内的资源集合,不一定要链接到检视器 (Inspector) 中的任一游戏对象。
如果要在资源文件夹 (Resource Folders) 中放入任何内容,只需在工程视图 (Project View) 中新建一个文件夹并命名为“资源 (Resources)”。工程 (Project) 中可以有多个排列不同的资源文件夹 (Resource Folders)。若想要从这些文件夹中加载资源,可随时调用 Resources.Load()。
如果组建目标为流媒体网络播放器 (Streaming Web Player),可规定一个场景包含资源文件夹 (Resource Folders) 中的所有内容。该步骤可在播放器设置 (Player Settings) 中完成,访问地址为编辑 (Edit)->工程设置 (Project Settings)->播放器 (Player)。流队列由构建设置 (Build Settings) 中的场景顺序确定。
注意:
资源文件夹 (Resource Folders) 中的所有资源及其依赖关系都保存在 resources.assets 文件中。如果某资源已被另一个关卡使用,将保存在该关卡的 .sharedAssets 文件中。 编辑 (Edit)-> 播放器设置 (PlayerSettings) 第一个流媒体关卡 (First Streamed Level) 设置确定 resources.assets 将被收集并附在版本中的具体关卡。
如果"第一个流媒体关卡 (First Streamed Level)" 之前的关卡包含资源文件夹 (Resource Folders) 中的资源,该资源将保存在这个关卡的资源中。如果是之后的关卡包含资源,该关卡将从 “resources.assets” 文件中引用资源。
只有资源文件夹 (Resource Folders) 中的资源可通过 Resources.Load 访问。但是,更多资源因为存在依赖关系,可能最后到了 “resources.assets” 文件。(例如,资源文件夹 (Resource Folders) 中的材质 (Material) 可能引用该文件夹之外的纹理 (Texture))。
资源卸载
可通过调用 AssetBundle.Unload() 卸载 AssetBundle 的资源。如果将 true 传递给 unloadAllLoadedObjects 参数,AssetBundle 内部持有的对象和使用 AssetBundle.Load() 从 AssetBundle 中加载的对象都将销毁,资源包占用的内存被释放。
有时您可能想加载 AssetBundle,实例化所需对象并释放资源包占用的内存,又保留对象。这样做的好处是可以释放内存执行其他任务,如加载另一个 AssetBundle。在这种情况下,可将 false 传递为参数。资源包销毁后,不可以再从中加载对象。
如果想销毁已加载的场景对象,请在加载另一关卡前使用 Resources.Load(),对其调用 Object.Destroy()。要释放资源,可使用 Resources.UnloadUnusedAssets()。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论