如何在 C# Unity 中加载带有扩展名(.json)的资产文件夹中的任何文件

Posted

技术标签:

【中文标题】如何在 C# Unity 中加载带有扩展名(.json)的资产文件夹中的任何文件【英文标题】:How do I load any file from assets folder with extension(.json) in C# Unity 【发布时间】:2021-11-26 13:47:14 【问题描述】:

我正在尝试从我的资产目录中加载多个扩展名为 .JSON 的文件,并希望在我的游戏的 UI 元素中显示, 就像我在 Unity 的 assets 文件夹中创建了一些 JSON 文件,我只想加载扩展名为 .json 的文件,还想将该 JSON 文件转换为 Base64,然后转换为图像纹理。

我试过了:

bool check1 = file.EndsWith (".json");
if (check1)

        Debug.Log ("JSON File found: " + file);

请给我举个例子,谢谢。

Unity 版本:2020.3.11f1, 语言:C#

【问题讨论】:

为什么要将图像存储为 JSON? @oRoiDev 我必须将此数据发送到服务器。所以我不能直接在 web 请求中发送纹理,我需要将其转换为 basestring,并且需要将整个数据转换为 JSON。 @AliHussain 为什么不能在 webrequest 中发送二进制数据? 【参考方案1】:

如果你想在运行时打开一些东西,我相信它必须位于资源文件夹中。这通常被认为是一种不好的做法,所以我会尝试绕过它。

现在,我不确定您到底想做什么,但如果您想将纹理发送到服务器,那么我会研究 JsonUtility 类和可序列化类。纹理也可以在运行时编码为 PNG,因此它适合 Serializable 类。

您实际上会在执行过程中生成一个 json 请求,其结构由您创建的类定义

编辑:这是从纹理生成 json 编码字符串的代码

using UnityEngine.Serialization;

//the struct
[System.Serializable]
public struct SerializableExample

    public string name;
    public byte[] tex;


//code for generating json with image
string serializeJsonImage(string name, Texture2d tex) 
    SerializableExample example = new SerializableExample();
    example.name = "example name";
    example.tex = tex.EncodeToPng();
    return JsonUtility.ToJson(example); 

【讨论】:

你能举个例子吗,对理解有很大帮助,是Unity和C#的新手。 代码在编辑中

以上是关于如何在 C# Unity 中加载带有扩展名(.json)的资产文件夹中的任何文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在按钮单击事件中的模式弹出扩展器中的iframe中加载页面?

如何在 C# 中从文件中加载 RSA 公钥

如何在unity3d中加载大工程模型

如何在我的组件VUE 2(webpack)中加载外部js文件?

jQuery 没有在 ajax 请求的脚本标签中加载 js 文件

以编程方式在图像中加载纹理并将边框设置为图像 Unity