在Unity中,我开发了一个UPM包,这个包里面包含一些icon图片,现在我在这个包里面写了一个编辑器窗口用来展示这些ICON,我该如何加载到这些ICON资源?我不想用Resources.Load()加载,是否还有其他方法?
7条回答 默认 最新
关注让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供。
如果还有疑问可以点击头像关注私信或评论。如果答案让您满意,请采纳、点赞、关注,非常感谢!
UPM包内ICON资源加载方案
在Unity UPM包中加载ICON资源,除了
Resources.Load()外,还有以下几种推荐方法:1. 使用EditorGUIUtility.Load
这是Unity编辑器专用的资源加载方式,特别适合加载编辑器资源如ICON:
Texture2D icon = EditorGUIUtility.Load("Packages/com.your.package/Editor/Icons/your_icon.png") as Texture2D;2. 使用AssetDatabase.LoadAssetAtPath
这是最推荐的方式,适用于编辑器脚本:
using UnityEditor; using UnityEngine; Texture2D icon = AssetDatabase.LoadAssetAtPath<Texture2D>("Packages/com.your.package/Editor/Icons/your_icon.png");3. 使用Package相对路径
可以获取包路径后组合路径:
using UnityEditor; using UnityEngine; using System.IO; string packagePath = Path.GetFullPath("Packages/com.your.package"); string iconPath = Path.Combine(packagePath, "Editor/Icons/your_icon.png"); Texture2D icon = AssetDatabase.LoadAssetAtPath<Texture2D>(iconPath);4. 使用ScriptableObject存储引用
创建一个ScriptableObject来存储所有ICON引用:
using UnityEngine; using UnityEditor; [CreateAssetMenu(fileName = "IconDatabase", menuName = "Editor/Icon Database")] public class IconDatabase : ScriptableObject { public Texture2D[] icons; } // 使用时 IconDatabase database = AssetDatabase.LoadAssetAtPath<IconDatabase>("Packages/com.your.package/Editor/IconDatabase.asset"); Texture2D icon = database.icons[0];资源加载流程

最佳实践建议
- 将ICON资源放在
Editor文件夹下,确保不会被打包到运行时 - 使用清晰的命名和目录结构,如
Editor/Icons/ - 考虑使用常量或静态类管理资源路径
- 对于大量ICON,建议使用上述ScriptableObject方案
public static class PackageResources { public const string IconPath = "Packages/com.your.package/Editor/Icons/"; public static Texture2D LoadIcon(string name) { return AssetDatabase.LoadAssetAtPath<Texture2D>($"{IconPath}{name}.png"); } } // 使用 Texture2D icon = PackageResources.LoadIcon("your_icon");这些方法都比
Resources.Load()更适合UPM包中的资源加载,且不会受到Resources系统限制。本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用- 将ICON资源放在