gpt4 book ai didi

c# - 在 Unity 中使用 Resources.Load 时搜索所有子文件夹

转载 作者:行者123 更新时间:2023-12-05 01:15:00 26 4
gpt4 key购买 nike

是否可以让 Resources.Load(name, type) 不仅在基础 Resources 文件夹/指定的子文件夹中搜索合适的 Assets ,而且在 Resources 下的完整子文件夹结构中搜索?

示例文件夹结构

Resources
- Subfolder
- image.png

我想要像 Resources.Load("image", typeof(Texture2D)) 这样的东西来返回图像,而用户不必指定“子文件夹/图像”。

我知道它很难看,但它应该是“将它放入你的拼凑项目中而不用担心你的文件夹结构”类型的实用程序脚本,我不知道子文件夹。

最佳答案

接受的答案仅在编辑器上下文中有效,在构建游戏后不起作用。资源文件夹在构建游戏时已打包,不再是您可以使用 Directory.GetDirectories 循环访问的文件层次结构。让它工作的唯一方法是在编辑器上下文中保存所有文件路径,并使用此文件层次结构在运行时加载 Assets 。在我的项目中,我使用以下代码向使用资源文件夹中 Assets 的组件添加了一个按钮,名为 CharacterGen。单击此按钮时,Resources 文件夹中所有子文件夹中的所有 png 文件都将保存到 CharacterGen 具有的名为 filePaths 的公共(public)属性中。

[CustomEditor(typeof(CharacterGen))]
public class RefreshCharacterList : Editor
{
CharacterGen charGen;
public void OnEnable()
{
charGen = (CharacterGen)target;
}

public override void OnInspectorGUI()
{
base.OnInspectorGUI();
if (GUILayout.Button("Load resource paths"))
{
List<String> paths = new List<string>();
LoadPathsRecursive("", ref paths);
charGen.filePaths = paths;
EditorUtility.SetDirty(charGen); //original post didn't have this line, but this is needed to make sure your changes are saved.

}
}


void LoadPathsRecursive(string path, ref List<string> paths)
{
var fullPath = Application.dataPath + "/Resources/" + path;
Debug.Log("fullPath: " + fullPath);
DirectoryInfo dirInfo = new DirectoryInfo(fullPath);
foreach(var file in dirInfo.GetFiles())
{
if (file.Name.Contains(".PNG") && !file.Name.Contains(".meta"))
{
paths.Add(path + "/" + file.Name.Replace(".PNG", ""));
}
}

foreach (var dir in dirInfo.GetDirectories())
{
LoadPathsRecursive(path + "/" + dir.Name, ref paths);
}
}

}

在 CharacterGen 中,我稍后调用 Resources.Load,使用单击按钮时保存的路径。

foreach (var filePath in filePaths)
{
var loadedSprite = Resources.Load<Sprite>(filePath);
//Do something with loadedSprite
}

编辑:我没有在我的原始帖子中提到一个重要的细节。 filePaths 是一个 Monobehaviour 字段,我用 [SerializeField] 标记它(或者它可以标记为公共(public)),以便统一实际序列化该字段的值并将其包含在构建中。

关于c# - 在 Unity 中使用 Resources.Load 时搜索所有子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57094126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com