解释
EditorResMgr
是一个用于在 Unity 编辑器中加载资源的管理器。它通过 Unity 编辑器的 API (AssetDatabase
) 进行资源加载,但仅在开发和编辑模式下可用,不能在最终发布的游戏中使用。这种工具通常用来在开发过程中快速加载编辑器中的资源(如预制体、材质、纹理、音效等),以便开发人员调试、设计或者测试功能。
主要功能包括
- 单个资源加载 :通过
LoadEditorRes<T>
方法,支持加载特定类型的资源(预制体、材质、纹理、音效等)。 - 图集加载 :通过
LoadSprite
方法,可以从一个图集中加载指定的单个Sprite
。 - 图集批量加载 :通过
LoadSprites
方法,可以加载图集中的所有Sprite
,并将它们存入字典中。
功能详解:
-
rootPath
:这是资源文件夹的根路径,所有加载的资源都位于Assets/Editor/ArtRes/
文件夹下。 -
LoadEditorRes<T>
:- 根据资源类型决定文件后缀名(例如:预制体
.prefab
、材质.mat
、纹理.png
、音效.mp3
)。 - 使用
AssetDatabase.LoadAssetAtPath<T>()
函数通过指定路径加载资源。 - 仅在编辑器模式下(
#if UNITY_EDITOR
)可用,在发布版本中无法使用。
- 根据资源类型决定文件后缀名(例如:预制体
-
LoadSprite
:- 从图集中加载指定名字的
Sprite
。 - 通过
AssetDatabase.LoadAllAssetRepresentationsAtPath()
加载图集中的所有子资源,然后匹配名字返回对应的Sprite
。
- 从图集中加载指定名字的
-
LoadSprites
:- 加载图集中所有的
Sprite
并存入字典,键为Sprite
的名称,值为Sprite
对象。
- 加载图集中所有的
使用案例
假设我们在开发过程中需要在场景中动态加载一些编辑器资源,比如预制体和纹理,以下是一个简单的使用案例:
案例:从编辑器中加载并生成一个预制体对象
cs
using UnityEngine;
public class TestEditorResMgr : MonoBehaviour
{
private GameObject loadedPrefab;
void Start()
{
#if UNITY_EDITOR
// 从 EditorResMgr 加载一个预制体资源
loadedPrefab = EditorResMgr.Instance.LoadEditorRes<GameObject>("MyPrefab");
// 如果成功加载预制体,实例化到场景中
if (loadedPrefab != null)
{
Instantiate(loadedPrefab, Vector3.zero, Quaternion.identity);
Debug.Log("预制体加载成功并实例化!");
}
else
{
Debug.LogError("预制体加载失败!");
}
#else
Debug.LogWarning("在发布版本中无法加载编辑器资源!");
#endif
}
}
运行流程:
- 资源加载 :
- 在
Start
方法中,调用EditorResMgr.Instance.LoadEditorRes<GameObject>("MyPrefab")
,加载名为MyPrefab.prefab
的预制体资源。
- 在
- 实例化对象 :
- 如果预制体成功加载,调用
Instantiate
将其实例化到场景中的(0, 0, 0)
位置。 - 如果加载失败,则输出错误日志。
- 如果预制体成功加载,调用
使用条件:
- 开发模式 :该代码块仅在 Unity 编辑器模式下有效,因为它依赖于
AssetDatabase
进行资源加载。 - 路径注意 :资源必须放置在
Assets/Editor/ArtRes/
文件夹中,并根据资源类型指定正确的后缀名(如.prefab
、.png
等)。