【问题标题】:How to load Textures with Unity3d on Android如何在 Android 上使用 Unity3d 加载纹理
【发布时间】: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


    【解决方案1】:

    您是否尝试过将 png 文件放入可绘制文件夹并使用 BitmapFactory.decodeResources() 访问它们?

    【讨论】:

    • 我在短时间内使用了 unity3d 和 android。你是在告诉我我可以以某种方式在统一中使用我的 Android 标准功能和知识吗?因为我已经使用 eclipse 编写了 android 应用程序。这确实会让很多事情变得更容易
    • 我不知道标准的 android 代码是否在统一中工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 2017-09-30
    • 2013-03-27
    • 1970-01-01
    相关资源
    最近更新 更多