You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scriptable Object仅打开资源后才可被检测的问题求助

问题解决:编辑器启动时无法检测到ScriptableObject实例

原因分析

Unity编辑器中,未被主动加载的ScriptableObject资源(既没被场景引用、也没通过代码加载)默认不会被实例化到内存中。只有当你在Inspector中打开这类资源时,Unity才会临时加载它们到内存,此时Resources.FindObjectsOfTypeAll才能检测到。

解决方案

方法1:使用Resources.LoadAll主动加载

将所有skinsbgcreator类型的ScriptableObject放在Resources文件夹下,然后用以下代码主动加载:

// 加载Resources根目录下所有skinsbgcreator类型资源,子文件夹可指定路径如"skins"
doges = Resources.LoadAll<skinsbgcreator>("");

这种方法兼容编辑器和打包后的运行时,不需要额外的编辑器代码。

方法2:编辑器模式下用AssetDatabase查找(无需Resources文件夹)

如果不想依赖Resources文件夹,可在编辑器模式下通过AssetDatabase遍历项目中所有该类型资源:

#if UNITY_EDITOR
using UnityEditor;

// 查找所有skinsbgcreator类型资源的GUID
string[] guids = AssetDatabase.FindAssets("t:skinsbgcreator");
doges = new skinsbgcreator[guids.Length];
for (int i = 0; i < guids.Length; i++)
{
    // 通过GUID获取资源路径并加载
    string assetPath = AssetDatabase.GUIDToAssetPath(guids[i]);
    doges[i] = AssetDatabase.LoadAssetAtPath<skinsbgcreator>(assetPath);
}
#endif

注意:AssetDatabase仅在编辑器环境可用,打包发布游戏时需要替换为Addressables、AssetBundles等运行时资源加载方案。

补充说明

Resources.FindObjectsOfTypeAll的作用是查找内存中已存在的对象实例,而非项目中所有资源文件。所以必须确保资源被加载到内存后,该方法才能返回结果。

内容的提问来源于stack exchange,提问作者Ilyass Frach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 11:17:09