왜 이 현상이 일어나는지는 모르겠지만, 안드로이드에서 www.dispose를 호출하면 엄청나게 오래걸리면서 device가 얼어버리는 현상이 있다.
disposal같은거나 namespace였나.. 뭐 이거저거 해봐도 안되다가 unity answer였나 stackoverflow였나 어딘가에서 찾은 방법.
timeout check에서 내가 정한 time limit를 넘어가면 www.dispose를 하고싶은데 dispose를 호출하면 얼어버리니까 그냥 disposer클래스를 만들고 얘한테 넘겨버리고 진행해버리는 방법임.
timeout check 메소드에서 _isDisposed같은 플래그를 세우고 이걸로 dispose되었는지 아니면 done되었는지 진행하면된다.
public class WWWDisposer : MonoBehaviour
{
private static WWWDisposer _instance;
public static WWWDisposer Instance
{
get
{
if (_instance == null)
return _instance = GameObject.FindObjectOfType(typeof(WWWDisposer)) as WWWDisposer;
else
return _instance;
}
}
private List<WWW> m_wwwsToDispose = new List<WWW>();
public int cout;
void Awake()
{
GameObject.DontDestroyOnLoad(gameObject);
}
public void AddWWWToDispose(WWW _toDispose)
{
m_wwwsToDispose.Add(_toDispose);
}
void Update()
{
for (int i = 0; i < m_wwwsToDispose.Count; i++)
{
D.Log("m_wwwsToDispose[i].isDone not" + m_wwwsToDispose[i].url + ", " + m_wwwsToDispose[i].error);
if (m_wwwsToDispose[i].isDone)
{
D.Log("[TRS] WWW disposed after natural error or completion: " + m_wwwsToDispose[i].url + ", " + m_wwwsToDispose[i].error);
m_wwwsToDispose[i].Dispose();
m_wwwsToDispose.RemoveAt(i);
i--;
}
}
}
public static WWWDisposer GetDisposer()
{
GameObject gameObject = GameObject.Find("_wwwDisposer");
if (gameObject == null)
{
gameObject = new GameObject("_wwwDisposer");
gameObject.AddComponent<WWWDisposer>();
}
return gameObject.GetComponent<WWWDisposer>();
}
}
'C#/Unity' 카테고리의 다른 글
2D OthographicSize (0) | 2016.04.10 |
---|---|
NGUI Drawcall (0) | 2015.09.15 |
c# 의 new키워드에 대해 (0) | 2015.06.22 |
Action, Func 콜백 예시 (0) | 2015.06.12 |
c# where (0) | 2015.05.29 |