ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 21.07.05 - Object Variety (1)
    Devil Toast/Cat Like Coding 2021. 7. 5. 15:00

    해당 글은 아래 Cat like Coding을 배우다 알게된 점들을 적어둔 글입니다.

    영어만 된다면 직접 해보시는 걸 추천드립니다.

     

    https://catlikecoding.com/unity/tutorials/object-management/reusing-objects/

     

    Reusing Objects

    A Unity Object Management tutorial covering the reuse of objects via pooling.

    catlikecoding.com

    1, Rect Transform

    물론 이걸 처음 봤을리는 없다.

    그래도 유니티를 했다면 Canvas를 썼을 것이고 그렇다면 높은 확률로 Text나 TextMeshPro든 뭐든 사용하지 않았겠는가?

     

    뭔가 당연한 듯한 사실이기도 한데,

    Rect Transform은 Transform을 상속받는다.

     

    뭐, 그러하다

     

    2, 일정 주기로 호출하기

    처음이라면 IE numerator와 Coroutine으로 해결했을 것이고,

    그보다 더 심플하게는 Update에서 Time. deltaTime을 프레임 단위로 더하면서 처리했을 것이다.

     

    (후자의 경우는 velocity나 acceleration에서도 사용하니까)

     

    이 예제에서도 자동으로 물체를 create, destroy하고 싶어서 이런 것들을 한다.

     

    creationProgress = Time. deltaTime * creationSpeed;

    해당 코드를 Update에 넣어서 축적시키다가,

     

    if(creationProgress == 1f)

    또는

    if(creationProgress >= 1f)

    의 조건에서 실행을 시키는 심플한 구조이다.

     

    그런데 여기서 if 대신 while을 사용할 수도 있다는 점이 이 파트의 요지.

     

    보통 이렇게 축적이 되는 방식은 조건을 만족하게 되면

    creationProgress = 0f;

    등으로 초기화를 시켜서 사이클을 다시 돌아가도록 하기 마련이다.

     

    그런데 만약, creationSpeed가 한 5000쯤 되어가지고

    한 프레임만에 creationSpeed가 10은 훌쩍 넘기면 어떻게 되겠는가?

     

    제작자 입장에서는 5000정도 넣어서 한 번에 엄청 많이 생산하기를 바랄 수도 있으므로,

    바로 0으로 초기화하는 것이 아니라 1f값씩 줄여나가서

    매우 거대한 creation Speed의 초과분도 반영할 수 있게 된다.

    creationProgress -= 1f;

     

    매번 참 신박하다.

     

    3, Dynamic 값

    Slider의 값을 바꾸면, Event System에 따라 Game.cs의 특정 값이 변하도록 했다, (get set사용)

    그래서 slider 오브젝트와 Game.cs에 해당 멤버 변수를 만들고 성분을 할당하려고 했는데,

    이게 선택지가 2개가 존재한다

     

    사진으로 먼저 보면...

     

    둘 다 Creation Speed인데, 뭔가 조금 다르다

     

    이 둘의 차이는 매우 간단하다.

     

    Parameter 방식은 해당 값 자체를 인자에 넣는 방식으로,

    인게임에서 slider의 값을 변경해도 처음에 inspector에 입력한 값만이 정적으로 적용된다. (저런-)

     

    반대로 Dynamic은 이름에서도 알 수 있듯이 동적으로 적용이 되며, 때문에 play mode에서 slider를 잡아당기면, 이에 따라 값이 계속 바뀌게 된다.

    static parameter는 말 그대로 '고정된' '인자값'이다. inspector에서 넣어주는 듯
    반대로 게임에서 내내 동적으로 변할 값이라면 dynamic 분류의 값을 사용해주도록 하자

     

    4, Garbage Collection와 Recycling

    이 부분은 내일 할 생각이지만 간단하게 개념만 읽어보았다.

     

    나도 Garbage Colleciton에 대해서 정확하게 알지는 못하지만,

    사용자가 더 이상 쓰지 않는 영역의 메모리가 있다면 그 부분을 할당 해제해주는 개념이다.

     

    아무튼 이것도 하나의 작업이고, 그렇기에 딜레이는 물론 연산량이 존재할 수 밖에 없다.

    이 예제처럼 Instantiate와 Destroy가 빈번하게 일어난다면 컴퓨터가 얼마나 아파하겠는가?

     

    그래서 물체를 파괴하고 그 뒤에 가비지 컬렉팅을 하는 대신, 그냥 해당 object를 재사용한다는 것이 3.3 단원 마지막 부분의 지론이다.

     

    도대체 그런 생각은 어떻게 하는거지.

Designed by Tistory.