Platform: Android + GearVR
Device: Samsung S8+
Here is what I’m trying to do:
- Load several images from a folder of the phone.
- Use the image loaded and assign it as a sprite to a renderer sprite.
Working code:
public void LoadImage(string filePath, SpriteRenderer targetSprite)
{
var texture = new Texture2D(interiorRenderImageSize, interiorRenderImageSize);
texture.LoadImage(File.ReadAllBytes(filePath));
texture.wrapMode = TextureWrapMode.Clamp; //WORKAROUND Altrimenti l'immagine ha un bordino bianco
targetSprite.sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(.5f, .5f), 100);
}
This is working. It has a huge hiccup when called, but it is working. I call this function six times, loading different images.
Not working code:
private IEnumerator LoadCoroutine(string filePath, SpriteRenderer targetSprite)
{
WWW www = new WWW("file://" + filePath);
while (!www.isDone)
yield return new WaitForEndOfFrame();
targetSprite.sprite = Sprite.Create(www.texture, new Rect(0, 0, www.texture.width, www.texture.height), new Vector2(.5f, .5f), 100);
targetSprite.sprite.texture.wrapMode = TextureWrapMode.Clamp;
yield return new WaitForEndOfFrame();
}
If i call this function only 2 times, it will work. However, if i call this six times, the app will freeze, then crash. Sometimes it will only freeze.
This is where i call these functions:
public void StartLoadImages()
{
string interiorPath = Application.isEditor ? Application.dataPath + "/TestFolder/Interiors/" : imageFolderInterior;
print(interiorPath);
DirectoryInfo dirInfo = new DirectoryInfo(interiorPath);
foreach (var f in dirInfo.GetFiles("*" + imageFormat))
{
if (f.Name == front + imageFormat)
{
//LoadImage(f.FullName, frontSpriteRenderer);
StartCoroutine(LoadCoroutine(f.FullName, frontSpriteRenderer));
}
else if (f.Name == rear + imageFormat)
{
//LoadImage(f.FullName, rearSpriteRenderer);
StartCoroutine(LoadCoroutine(f.FullName, rearSpriteRenderer));
}
else if (f.Name == right + imageFormat)
{
//LoadImage(f.FullName, rightSpriteRenderer);
StartCoroutine(LoadCoroutine(f.FullName, rightSpriteRenderer));
}
else if (f.Name == left + imageFormat)
{
//LoadImage(f.FullName, leftSpriteRenderer);
StartCoroutine(LoadCoroutine(f.FullName, leftSpriteRenderer));
}
else if (f.Name == up + imageFormat)
{
//LoadImage(f.FullName, upSpriteRenderer);
StartCoroutine(LoadCoroutine(f.FullName, upSpriteRenderer));
}
else if (f.Name == down + imageFormat)
{
//LoadImage(f.FullName, downSpriteRenderer);
StartCoroutine(LoadCoroutine(f.FullName, downSpriteRenderer));
}
}
}
I am wondering why www method is not working when called several times, i tried to split the calls (call 3 loads, wait for input, then call the other 3) but it still crashes.