【发布时间】:2015-10-27 18:44:34
【问题描述】:
我正在尝试让这个非常简单的设置工作,它可以在我的计算机上运行,但不能在 Android 上运行。
在尝试了一整天后,我现在问,因为我在互联网上找不到一个例子。
设置:
我的文件夹中有很多 *.png 文件。由于问题出在 android 我将它们放入“StreamingAssets”文件夹
我有一个名为“Overlay”的 RawImage
我有一个名为“Dropdown”的下拉菜单
应该发生什么: 1. Dropdown_script 检查 StreamingAssets 文件夹中的所有 *.png 文件,并将每个文件名添加到下拉选项菜单中。 2. 一旦用户选择了其中一个下拉值,我的“叠加”图像就会将其纹理更改为相应的文件。
在 PC 上很容易......看起来在 android(使用 unity3d)上是不可能的。
我的下拉脚本:
public class DDScript : MonoBehaviour {
void Start () {
GameObject obj = GameObject.Find("Dropdown");
//Get all filenames
var info = new DirectoryInfo(Application.streamingAssetsPath);
var fileInfo = info.GetFiles("*.png");
//Clear the DropDown Menu Items from the Inspector
obj.GetComponent<Dropdown>().options.Clear();
//Make the first chosen item the first filename
obj.GetComponent<Dropdown>().captionText.text = fileInfo[0].Name.Substring(0, fileInfo[0].Name.IndexOf("."));
foreach (var file in fileInfo)
{
Dropdown.OptionData list = new Dropdown.OptionData(file.Name.Substring(0, file.Name.IndexOf(".")));
obj.GetComponent<Dropdown>().options.Add(list);
}
}
它不工作。它可以在我的电脑上运行,但不能在 Android 上运行。我知道在 Android 下,所有东西都被打包到一个 jar 文件中,没有什么像文件夹结构那样。 StreamingAssets 应该仍然有文件,但我可以理解这部分可能无法工作。这不会那么糟糕,因为它只是找到名称并将其放入数组中,我可以在程序中手动完成。因为我事先知道文件夹中有多少文件和哪些文件,所以它永远不会改变。
这是我的更改纹理方法 它由 Dropdown OnValueChange 调用,因此“newOverlay”只是 Dropdown 中的 int。出于调试目的,我将文件路径设置为特定文件。稍后它将根据 newOverlay 改变
public IENumerator SetOverlay(int newOverlay)
{
GameObject obj = GameObject.Find("Overlay");
img = (RawImage)obj.GetComponent<RawImage>();
string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "testfile.png");
WWW www = new WWW(filePath);
yield return www;
img.texture = www.texture;
}
我不明白为什么这不起作用! 文档内容如下: “这意味着如果您不使用 Unity 的 WWW 类来检索文件,那么您将需要使用其他软件” 所以使用 www 是正确的方法。但它不起作用!
没有加载纹理。我没有得到红色问号,我的图像只是纯白色。请问有人可以帮我吗?也许我只是因为所有的树木而看不到森林,或者一天太长了。
我真的不敢相信在我的 apk 文件中统一加载一堆图像是这么难:(
非常感谢您
编辑:解决方案(不知何故) 首先问题是 System.IO.Path.Combine 在文件和文件夹之间添加了一个反斜杠,而不是在文件夹本身之间!!!!
public void SetOverlay(int newOverlay)
{
GameObject obj = GameObject.Find("Overlay");
img = (RawImage)obj.GetComponent<RawImage>();
string filePath = Application.streamingAssetsPath + "/testfile.png";
WWW www = new WWW(filePath);
while (!www.isDone)
{}
img.texture = www.texture;
GameObject.Find("DebugText").GetComponent<Text>().text = filePath;
}
还没有找到解决文件名问题的方法,但我很高兴这个愚蠢的“错误”得到了解决
【问题讨论】:
标签: android image drop-down-menu unity3d