Добавил кэширование поскейленных картинок, чтобы расходовать меньше батарейки и сетевого трафика

This commit is contained in:
ftc
2021-05-27 23:59:12 +03:00
parent 98da719fcc
commit ca893f8687
7 changed files with 231 additions and 19 deletions
+31 -18
View File
@@ -20,6 +20,7 @@ public class PhotoFrame : MonoBehaviour
InputField url;
private int currentImage;
private Cache cache;
private Image CurrentImage
{
@@ -33,6 +34,7 @@ public class PhotoFrame : MonoBehaviour
public void Start()
{
cache = new Cache(Application.persistentDataPath);
Screen.sleepTimeout = SleepTimeout.NeverSleep;
currentImage = 0;
ActivateUI(true);
@@ -89,29 +91,40 @@ public class PhotoFrame : MonoBehaviour
int imageIndex = Random.Range(0, loader.images.Count);
string imageUrl = loader.images[imageIndex];
var request = UnityWebRequest.Get(imageUrl);
request.downloadHandler = new DownloadHandlerTexture(true);
yield return request.SendWebRequest();
if (request.isNetworkError || request.isHttpError)
var bytes = cache.Get(imageUrl);
if (bytes != null)
{
yield return new WaitForSeconds(1f);
continue;
var tex = new Texture2D(2, 2);
tex.LoadImage(bytes);
SetImageTexture(NextImage, tex);
}
var downloadTime = Time.realtimeSinceStartup - startTime;
if (PHOTO_INTERVAL > downloadTime)
else
{
yield return new WaitForSeconds(PHOTO_INTERVAL - downloadTime);
var request = UnityWebRequest.Get(imageUrl);
request.downloadHandler = new DownloadHandlerTexture(true);
yield return request.SendWebRequest();
if (request.isNetworkError || request.isHttpError)
{
yield return new WaitForSeconds(1f);
continue;
}
var downloadTime = Time.realtimeSinceStartup - startTime;
if (PHOTO_INTERVAL > downloadTime)
{
yield return new WaitForSeconds(PHOTO_INTERVAL - downloadTime);
}
var dh = request.downloadHandler as DownloadHandlerTexture;
var tex = dh.texture;
SetImageTexture(NextImage, tex);
dh.Dispose();
request.Dispose();
cache.Add(imageUrl, tex.EncodeToJPG());
}
var dh = request.downloadHandler as DownloadHandlerTexture;
var tex = dh.texture;
SetImageTexture(NextImage, tex);
dh.Dispose();
request.Dispose();
float currentStart = CurrentImage.color.a;
float currentFinish = transparent.a;
float nextStart = NextImage.color.a;