从StreamingAssets文件夹读取/加载图像文件

时间:2018-07-30 16:32:42

标签: c# unity3d

我的StreamingAssets文件夹中有一个png图像。当我尝试检索图像时,它将返回带有红色问号的图像(这不是正确的图像)。 我正在使用此脚本:

{{1}}

enter image description here

我应该如何获得正确的图像?

图片位置:

enter image description here

我要更改的图像的“检查器”选项卡:

enter image description here

1 个答案:

答案 0 :(得分:0)

在读取StreamingAssets文件夹中的文件时,您必须在某些平台上使用WWW或在其他平台上使用File.ReadAllBytes。您检查路径是否包含://:///,然后确定要使用哪个路径。这应该解决问号问题。请注意,除非存在UnityWebRequest的错误,否则您现在应该使用WWW,其中UnityWebRequest是必需的。


将会出现的另一个问题是SpriteRenderer图片没有更新。材质将反映图像的更改,但SpriteRenderer不会。更改SpriteRenderer的精灵的正确方法是更改​​SpriteRenderer.sprite属性。这意味着您将必须将Texture2D转换为Sprite,然后将该精灵指定给SpriteRenderer.sprite属性。

最后,访问Application.streamingAssetsPath文件夹中的文件时,请使用StreamingAssets。这不是问题,因为您正在编辑器中运行它,但是它将在构建中。

以下是您在StreamingAssets中读取图像文件的代码应如下所示:

public string url;

IEnumerator Start()
{
    ///url = Application.dataPath + "/StreamingAssets/shareImage.png";
    url = Path.Combine(Application.streamingAssetsPath, "shareImage.png");

    byte[] imgData;
    Texture2D tex = new Texture2D(2, 2);

    //Check if we should use UnityWebRequest or File.ReadAllBytes
    if (url.Contains("://") || url.Contains(":///"))
    {
        UnityWebRequest www = UnityWebRequest.Get(url);
        yield return www.SendWebRequest();
        imgData = www.downloadHandler.data;
    }
    else
    {
        imgData = File.ReadAllBytes(url);
    }
    Debug.Log(imgData.Length);

    //Load raw Data into Texture2D 
    tex.LoadImage(imgData);

    //Convert Texture2D to Sprite
    Vector2 pivot = new Vector2(0.5f, 0.5f);
    Sprite sprite = Sprite.Create(tex, new Rect(0.0f, 0.0f, tex.width, tex.height), pivot, 100.0f);

    //Apply Sprite to SpriteRenderer
    SpriteRenderer renderer = GetComponent<SpriteRenderer>();
    renderer.sprite = sprite;
}