我正在尝试创建一个函数,将 Unity 游戏中的每个资源数据转储到文件中,并能够从当前加载的场景中转储屏幕上的视频、音频、脚本名称和图像。
当我试图对纹理和矩阵、向量和 int 值和浮点数等着色器数据做同样的事情时,我被卡住了。我知道我可以通过函数获得这些阵型Material.GetXXX。
例如,我目前可以Texture从标准着色器中获取主着色器,该着色器的纹理类型属性命名_MainTex为:
Material mat = gameObject.GetComponent<MeshRenderer>().material;
Texture mat1Tex = mat.GetTexture("_MainTex");
SaveTex(mat1Tex);
问题是我需要知道属性的名称以及它是哪种类型,例如 Texture、Matrix、Float、Color 等,然后才能在运行时获取它们的值
我希望项目中有许多来自第三方来源的着色器,手动检查每个着色器、复制它们的属性名称和类型以便获取数据会很复杂。
有没有办法获取着色器属性和使用Material.GetXXX函数检索其值所需的类型?如果这是不可能的,有没有办法单独转储着色器数据?
注意:
这不是保存功能,我不是在寻找保存和加载游戏状态的方法。这是一个用于分析和解决 Unity 游戏故障的插件。