内部资源加载
介绍
约定资源在Unity项目内部,需要动态加载的资源为项目内部资源
资源加载配置
位于Resources/UNIHper下的resources.json文件为UNIHper框架的资源加载配置文件,框架会根据此配置文件进行资源的管理,对三种资源加载方式均做了支持,目前Unity较新的资源加载方案为Addressable方式。
按如下规则配置的相关资源,则会在框架启动时进行资源加载。随后则可以使用Managements.Resoure.Get
接口获取相应资源
{
// 持久层资源,不会跟随场景切换而销毁
"Persistence": [
{
"driver": "Addressable",
"type": "Object",
"label": "default"
}
],
// 跟随场景生命周期而存在的资源, 配置的资源会在加载场景的时候同步加载
"SceneEntry": [ // 场景名
{
"driver": "Resources", // Resources 资源
"type": "GameObject", //资源类型
"path": "Prefabs/UI/SceneEntry" // 资源路径 相对于项目内任意Resources文件夹
},
{
"driver": "AssetBundle", // AssetBundle资源
"path": "main.bundle" // 资源路径 相对于 StreamingAssets/AssetBundles/
},
{
"driver": "Addressable", // 可寻址资源
"type": "Sprite", // 资源类型
"label": "scene_entry_textures" // 资源标签
}
]
推荐使用流程
为简化资源管理成本,若项目体量较小,且对资源分包无细颗粒度需求,则可以直接在编辑器内,右键点击资源所在文件夹,执行Add To Addressable System
菜单即可,此操作会默认对该文件夹内的资源打上default标签,resources.json文件默认配置该标签,因此资源会被自动加载。
using UnityEngine;
using UNIHper;
using UniRx;
public class SceneEntryScript : SceneScriptBase
{
// Called once after scene is loaded
private void Start()
{
// 资源路径可以是相对路径, 下面两种方式均能获取到资源
var _avatar1 = Managements.Resource.Get<Sprite>("ArtAssets/Textures/User01/Avatar");
var _avatar2 = Managements.Resource.Get<Sprite>("User01/Avatar");
// 也可以直接使用资源名,但是需要保证资源名唯一性,否则获取结果具有不确定性
var _avatar3 = Managements.Resource.Get<Sprite>("Avatar");
}
}
路径参数解释:
对于Addressables资源,完整路径为Assets/xxx/xxx
对于Resources资源,完整路径为Resources/xxx/xxx
资源分组
若需要获取分组资源,则可以通过Addressable系统的标签功能进行实现。
{
...
"SceneEntry": [
{
"driver": "Addressable",
"type": "GameObject",
"label": "player"
}
]
}
// 获取标签组资源
var _players = Managements.Resource.GetLabelAssets<GameObject>("player");
Last updated