2016. 12. 12. 15:15

왜 이 현상이 일어나는지는 모르겠지만, 안드로이드에서 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
Posted by 반얀
2016. 11. 27. 13:46

class Outer

{

private Inner _innerClass;


IEnumerator Start()

{

_innerClass.Init();

yield return StartCoroutine(_innerClass.InnerEnumerator);


yield return StartCoroutine(_innerClass.InnerEnumerator);


yield return StartCoroutine(_innerClass.InnerEnumerator);


yield return StartCoroutine(_innerClass.InnerEnumerator);

}



class Inner

{

public IEnumerator InnerEnumerator;


public void Init()

{

InnerEnumerator = DirectionSyquence();

}


IEnumerator DirectionSyquence()

{

...

yield return null;//1

...

yield return null;//2

...

yield return null;//3

}

}

}



위와 같은 경우 StartCoroutine(_innerClass.InnerEnumerator);가 한번만 호출됨


각각 호출할때마다 _innerClass.Init();을 통해서 _innerClass.InnerEnumerator를 다시 할당해줘야하는데,


아마도 IEnumerator가 반복기니까 변수로 저장되면 내부에 들어있는 iterator블럭을 다 반복하면 그 마지막 상태로 저장되기 때문인듯


즉,  Start()에서 첫번째 yield return StartCoroutine(_innerClass.InnerEnumerator);을 호출했을때 

DirectionSyquence의 세번째 yield return null까지 반복한 상태가 InnerEnumerator변수에 기록된거고

그 뒤로는 암만 StartCoroutine으로 반복기 돌려봤자 저 InnerEnumerator변수에는 등록된 IEnumerator의 iterator블럭을 다 돌렸기 때문에 돌아갈 로직이 없는것인듯함.


때문에 각각 호출시마다 변수에 IEnumerator함수(이걸 함수라고 해야하나 뭐라고하나)를 재등록해줘야 첫 iterator블럭부터 다시 돌아가게됨.


이게 아니면 DirectionSyquence를 그냥 public으로 돌려서 StartCoroutine(_innerClass.DirectionSyquence())하면 될듯


잠깐 생각해보니 이게 변수 메모리도 안먹고 더 좋은거아님? 슈ㅏㅂㅁ

Posted by 반얀
2016. 6. 27. 15:37



저거 눌러보시면 받아집니다


아 사이트는 https://curl.haxx.se/ 공홈인듯?


openssl도 설치해야한다고합니당


딴거 다 깔아봣는데 안됨 슈밤 하루를 날렸네ㅜㅜ


윈7 64비트에서는 저것을 사용하세요


imageMagick은 반드시 인스톨매지션에서 command 머시기 옵션도 켜줘야 콘솔에서 제어가 가능한듯 ㅎ희힣ㅎ


이건 사용 성공샷 헿헤


아 글구 vs로 직접 빌드해서 쓸수도 있는듯합니당


사실 잘 몰라영 ㅎㅎ


Posted by 반얀
2016. 4. 10. 11:12

document에 나온 그대로 화면의 height의 1/2사이즈를 의미함.


사이즈 단위는 (1,1)크기의 단위 유닛.


즉 othographicSize == 5면 화면 height의 절반을 채우는 단위유닛의 갯수는 5개고, 그말은 화면 전체height의 길이는 10개의 단위유닛이라는 뜻


따라서 카메라.bounds를 얻고 싶으면 요 othographicSize랑 aspectRatio랑 샤바샤바하면 나올듯함

'C#/Unity' 카테고리의 다른 글

WWW disposer / www.dispose bring about android device frozen  (0) 2016.12.12
NGUI Drawcall  (0) 2015.09.15
c# 의 new키워드에 대해  (0) 2015.06.22
Action, Func 콜백 예시  (0) 2015.06.12
c# where  (0) 2015.05.29
Posted by 반얀
2015. 9. 15. 18:19

Atlas - Sprite packing을 통해서 여러 이미지들을 One drawCall로 처리 가능


Drawcall은 UIPanel단위로 들어감(UGUI경우 Canvas)


















현재 패널은 4개이다 최상위 Root, 그 하위로 test1,test2와 test2의 자식인 SubPanel2


네이밍이 뒤죽박죽인건 스샷을 벌써 찍어서 귀찮아서 안바꿈..


아무튼 현재 Drawcall은 7이다 test1에서 Atlas, Label (2 Drawcall), test2에서 Atlas, Label(2 Drawcall)


그리고 SubPanel2에서 Atlas 2개, Label(3 Drawcall)


여기서 같은 아틀라스를 사용해도 패널이 다르면 따로 그려진다는걸 알 수 있다. 


별 생각없이 아틀라스로 묶으면 One Drawcall이지 생각했다가 헷갈릴수 있겠다 싶어서 적어둠.


특히 패널안에 서브 패널을 넣는 경우들이 있으니 한번쯤 생각하고 하면 괜찮을듯








'C#/Unity' 카테고리의 다른 글

WWW disposer / www.dispose bring about android device frozen  (0) 2016.12.12
2D OthographicSize  (0) 2016.04.10
c# 의 new키워드에 대해  (0) 2015.06.22
Action, Func 콜백 예시  (0) 2015.06.12
c# where  (0) 2015.05.29
Posted by 반얀