我目前有2个功能。
我的第一个是LoadImage
,我们称之为IEnumerator LoadImage()
{
WWW www = new WWW("https://s3-ap-northeast-1.amazonaws.com/myeyehouse/uimg/scimg/sc661120171130095837184/pano/thumb_Eyehouse.jpg");
while (!www.isDone)
{
Debug.Log("Download image on progress" + www.progress);
yield return null;
}
if (!string.IsNullOrEmpty(www.error))
{
Debug.Log("Download failed");
}
else
{
Debug.Log("Download succes");
Texture2D texture = new Texture2D(1, 1);
www.LoadImageIntoTexture(texture);
Sprite sprite = Sprite.Create(texture,
new Rect(0, 0, texture.width, texture.height), Vector2.zero);
return sprite;
}
}
,它处理从网址下载图片。
LoadImage()
我的第二个函数需要将GameObject
的输出(这是一个精灵)分配给我的GameObject
。我无法放入LoadImage()
并将其加载到LoadImage()
函数中。如果可能的话,我需要有关如何从command:
- "sh"
- "-c"
- >
nohup /bin/ecr-refresh-token &
sleep 10
exit 0
函数分配精灵的建议。
答案 0 :(得分:2)
您无法从协程返回值。所以你需要使用委托。 我会返回纹理并保留Sprite创建。
IEnumerator LoadImage(Action<Texture2D> callback)
{
WWW www = new WWW("https://s3-ap-northeast-1.amazonaws.com/myeyehouse/uimg/scimg/sc661120171130095837184/pano/thumb_Eyehouse.jpg");
while (!www.isDone)
{
Debug.Log("Download image on progress" + www.progress);
yield return null;
}
if (!string.IsNullOrEmpty(www.error))
{
Debug.Log("Download failed");
callback(null);
}
else
{
Debug.Log("Download succes");
Texture2D texture = new Texture2D(1, 1);
www.LoadImageIntoTexture(texture);
callback(texture;)
}
}
然后你打电话:
void Start()
{
StartCoroutine(LoadImage(CreateSpriteFromTexture));
}
private CreateSpriteFromTexture(Texture2D texture)
{
if(texture == null) { return;}
Sprite sprite = Sprite.Create(texture,
new Rect(0, 0, texture.width, texture.height), Vector2.zero);
// Assign sprite to image
}
整个挑战是了解委托和行动的运作方式。