'C#/Unity'에 해당되는 글 15건

  1. 2016.12.12 WWW disposer / www.dispose bring about android device frozen
  2. 2016.04.10 2D OthographicSize
  3. 2015.09.15 NGUI Drawcall
  4. 2015.06.22 c# 의 new키워드에 대해
  5. 2015.06.12 Action, Func 콜백 예시
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. 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 반얀
2015. 6. 22. 15:00



-------------------------------------------------------------------------------------


c++은 모두 value type


c#은 type이 지정되어있다


c++은 사용자가 필요에 따라 포인터라는 기능을 사용해 메모리 위치를 정할수있지만


c#은 닷넷에서 알아서 분배해서 reference type은 아예 할당안하면 에러나고 그럼


즉 c++ 에서는 


class AAA

{}


void main()

{

AAA aaa;

aaa.test();


AAA aaa = new AAA();

aaa->test();

}

이런식으로 정적할당할지 동적할당할지 정할수 있었다. 모든것이 value type이기 때문


하지만 c#에서는 애초에 reference type인것은 무조건 동적할당을 해줘야 사용가능하다는 말임



-------------------------------------------------------------------------------------

issue about 'new ' keyword


[원문]http://stackoverflow.com/questions/23034541/operator-new-in-c-sharp-vs-c


변수, 객체 할당에 대한 내용

간단히 번역만 해둠


3가지 경우가 있다 1. 지역변수 

 2. (non-static)구조체 멤버변수

 3. 클래스 멤버변수


1.지역변수

class C

{

  void M()

  {

    Foo fooInstance = new Foo();

    //definite assignment - 접근해서 사용가능

    // the variable is "definitely assigned" and can be read (copied, passed etc)

    // consider using the 'var' keyword above!

  }

}


class C

{

  void M()

  {

    Foo fooInstance;

    // 이건 안됨. 접근 불가.  할당후에 사용가능함

    // the variable is not "definitely assigned", you cannot acquire its value

    // it needs to be assigned later (or can be used as 'out' parameter)

  }

}



2.(non-static)구조체 멤버변수

struct S

{

  Foo fooInstance = new Foo(); // compile-time error! cannot initialize here

       // 선언시 할당 불가

}


struct S

{

  Foo fooInstance; // OK, access level is 'private' when nothing is specified

                      // 특별히 접근제한자 안걸면 private으로 사용가능

}



3. 클래스 멤버변수

class C

{

  Foo fooInstance = new Foo(); // OK, private

}


class C

{

  Foo fooInstance; // OK, private

  // equivalent to 'Foo fooInstance = null;' if 'Foo' is a reference type (class, interface, delegate, array)

  // equivalent to 'Foo fooInstance = new Foo();' is 'Foo' is a value type (struct, enum) <- 이부분이 궁금함

아아 value 타입인경우 그냥 쓰나 이니셜라이저 사용하나 똑같다는 말임


 애초에 값이 reference타입인지 value타입인지 정해져있으면 new 키워드를 붙여도 무조건 그에 따라 스택 힙 결정되는건가

}


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

2D OthographicSize  (0) 2016.04.10
NGUI Drawcall  (0) 2015.09.15
Action, Func 콜백 예시  (0) 2015.06.12
c# where  (0) 2015.05.29
GetComponentsInChildren overload  (0) 2015.05.28
Posted by 반얀
2015. 6. 12. 17:36

다 찾아서 정리좀 하자


System.Action<T> T가 이 delegate의 매개변수



delegate는 따로 정리하자


Action, Func는 오버로드된 delegate들의 모음들?이라고 보면될듯


Action은 return값이 없는 delegate, Func는 return값을 갖는 delegate이다


Action, Action<T>, ~ Action<T, ......> 이런식으로 매개변수가 없는 것부터 여러개 가진것까지 다양하게 제공되어져있다.


여러가지 필요에 따라 사용할 수 있겠지만 이번에는 콜백용도로 사용하는 예시를 보이겠다.


문법은 그냥 슈도코드처럼 알아볼수있게만 쓰도록하겠음 컴파일러없이 그냥 쓰는건 익숙치가않아서..


class BBB

{

//이 함수는 클릭, 키입력등 특정 입력값 발생시 호출되는 함수로 가정하겠음

//매개변수 입력도 이 때 받게됨

public void Calculate(int a, int b)

{

print( "첫번째 입력 :" + a + " , " + "두번째 입력 :" + b + ", 두 수의 합은 " + (a + b));

}

}


class AAA

{

public void ShowCalculateBBB()

{

//여기서 BBB.Caculate()의 결과를 내가 원하는 때에 ShowCaclulateBBB()함수 호출을 통해 보고싶다면

}

}


BBB.Calculate가 호출될때가 아니라 내가 의도한 때에 AAA.ShowCalculateBBB를 통해 보고싶다면 어찌해야할까

방법은 여러가지있겠지만 여기선 람다식과 Action을 통해 사용하는 한가지 방법을 보이겠다.


class BBB

{

//이 함수는 클릭, 키입력등 특정 입력값 발생시 호출되는 함수로 가정하겠음

//매개변수 입력도 이 때 받게됨

public void Calculate(int a, int b)

{

AAA._receiveAction =

() =>

{

print( "첫번째 입력 :" + a + " , " + "두번째 입력 :" + b + ", 두 수의 합은 " + (a + b));

}

}

}


class AAA

{

public System.Action = _receiveAction; 



//BBB.Calculate가 호출된 시점에  _receiveAction에 원하는 시퀀스가 저장되고

//그 시퀀스를 원하는 시점에 AAA.ShowCalculateBBB()를 통해 진행할수있다.

//만약 Action<T..>같이 매개변수를 둔다면 그 매개변수의 참조값을 가져와 접근도 가능하다

public void ShowCalculateBBB()

{

_receiveAction();

}

}


이런식으로 Action변수에 등록해놓는 방식으로 꺼내쓸수있다. 


또 Action<object> 형으로 선언하면 박싱/언박싱 이슈가 있을 수 있지만 어떤 형을 인자로 사용하든 활용가능하다는 장점이 있다.


나중에 더 좋은 예시를 추가할것임



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

NGUI Drawcall  (0) 2015.09.15
c# 의 new키워드에 대해  (0) 2015.06.22
c# where  (0) 2015.05.29
GetComponentsInChildren overload  (0) 2015.05.28
delegate, callback  (0) 2015.05.08
Posted by 반얀