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