Имеется ScrollView(нативный),в котором сидит туча картинок.Картинки по мере появления грузят в себя контент через UnityWebRequest.
Если картинка вылезает из скроллвью, реквест отменяется.
Единовременно во вьюпорте не больше 15 картинок.Так вот,когда они все разом шлют реквесты первой картинке ответ приходит через ~0.5сек, а всем остальным через 2-2.5 сек
Весь UI при этом фризится.Компилирую этот же проект в Unity 2018 - и о чудо,всем картинкам контент приходит через ~0.5сек.Как на зло, эта пакость вылезает только в браузере.Вот код загрузчика на имаджах:
Синтаксис:
Используется csharp
public class AlphaImage : MonoBehaviour
{
public RawImage Image;
private string loadedUrl;
private IEnumerator deferredRoutine;
private UnityWebRequest www;
public void Fetch(string ur) {
if (url == null) {
Image.texture = null;
return;
}
if (loadedUrl != null && loadedUrl.Equals(url))
return;
www?.Abort();
StopAllCoroutines();
var routine = load(url);
if (!gameObject.activeInHierarchy || !gameObject.activeSelf) {
deferredRoutine = routine;
} else
StartCoroutine(routine);
}
private void OnEnable() {
CanvasGroup cg = GetComponent<CanvasGroup>();
if (cg != null)
cg.alpha = 1;
if (deferredRoutine != null) {
StartCoroutine(deferredRoutine);
deferredRoutine = null;
}
}
private IEnumerator load(string ur) {
float dur = ViewConfig.GeneralAnimDuration;
Image.texture = null;
loadedUrl = null;
if (www != null) {
http://www.Abort();
www = null;
}
var imgRt = Image.GetComponent<RectTransform>();
www = UnityWebRequest.Get(url);
var ts = Time.realtimeSinceStartup;
yield return http://www.SendWebRequest();
print("ts:" + (Time.realtimeSinceStartup - ts));
loadedUrl = url;
Texture2D texture = new Texture2D(1, 1, TextureFormat.ARGB32, false);
texture.LoadImage(http://www.downloadHandler.data);
http://www.Dispose();
www = null;
Image.texture = texture;
//
var cg = GetComponent<CanvasGroup>();
if (cg == null)
cg = gameObject.AddComponent<CanvasGroup>();
cg.alpha = 0;
float time = 0;
while (time < dur) {
time += Time.deltaTime;
cg.alpha = time / dur;
yield return null;
}
cg.alpha = 1;
}
private void OnDestroy() {
print("destroyed");
StopAllCoroutines();
if (www != null) {
http://www.Abort();
www = null;
}
}
public void Clear() {
StopAllCoroutines();
if (www != null) {
http://www.Abort();
www = null;
}
Image.texture = null;
loadedUrl = null;
}
}
{
public RawImage Image;
private string loadedUrl;
private IEnumerator deferredRoutine;
private UnityWebRequest www;
public void Fetch(string ur) {
if (url == null) {
Image.texture = null;
return;
}
if (loadedUrl != null && loadedUrl.Equals(url))
return;
www?.Abort();
StopAllCoroutines();
var routine = load(url);
if (!gameObject.activeInHierarchy || !gameObject.activeSelf) {
deferredRoutine = routine;
} else
StartCoroutine(routine);
}
private void OnEnable() {
CanvasGroup cg = GetComponent<CanvasGroup>();
if (cg != null)
cg.alpha = 1;
if (deferredRoutine != null) {
StartCoroutine(deferredRoutine);
deferredRoutine = null;
}
}
private IEnumerator load(string ur) {
float dur = ViewConfig.GeneralAnimDuration;
Image.texture = null;
loadedUrl = null;
if (www != null) {
http://www.Abort();
www = null;
}
var imgRt = Image.GetComponent<RectTransform>();
www = UnityWebRequest.Get(url);
var ts = Time.realtimeSinceStartup;
yield return http://www.SendWebRequest();
print("ts:" + (Time.realtimeSinceStartup - ts));
loadedUrl = url;
Texture2D texture = new Texture2D(1, 1, TextureFormat.ARGB32, false);
texture.LoadImage(http://www.downloadHandler.data);
http://www.Dispose();
www = null;
Image.texture = texture;
//
var cg = GetComponent<CanvasGroup>();
if (cg == null)
cg = gameObject.AddComponent<CanvasGroup>();
cg.alpha = 0;
float time = 0;
while (time < dur) {
time += Time.deltaTime;
cg.alpha = time / dur;
yield return null;
}
cg.alpha = 1;
}
private void OnDestroy() {
print("destroyed");
StopAllCoroutines();
if (www != null) {
http://www.Abort();
www = null;
}
}
public void Clear() {
StopAllCoroutines();
if (www != null) {
http://www.Abort();
www = null;
}
Image.texture = null;
loadedUrl = null;
}
}
Перед писаниной в саппорт хотелось бы узнать сталкивался ли кто еще?