ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2024.2.16
    TIL 2024. 2. 16. 20:43

    팀 프로젝트가 끝났습니다.

    마지막까지 코드확인 오류확인하느라 힘들군요.

     

    팀프로젝트가 끝났기 때문에 강의를 미리 주셨습니다.

    강의 뿐만 아니라 추가 세션도 있어서 그것도 듣게 되었습니다.

     

    세션내용은 프로젝트 설계에 관한 이야기였습니다.

    참고사항이지만 코드를 어떻게 정리할 수 있을까 하면서 개인 프로젝트를 진행했던 저로써는 정리 방식에 대한 이야기라 좋았습니다.

    (팀 프로젝트는 팀에 맞춰서 진행합니다.)

     


     

    원본은 다른 분이 쓰신거라고 하십니다.

     

    1. Enum, struct, 유틸리티 함수, 글로별 변수 모아두기

    Enum이나 struct는 무엇인지 한 번에 알아볼 수 있지만 유틸리티 함수와 글로벌 변수는 감이 잘 안오는데요.

     

    유틸리티 함수는 자주 사용되는 것들, 두 번 이상 사용할 함수들입니다.

    게임을 실행할 때 TimeScale = 1로 두고 게임이 끝날 때는 TimeScale = 0으로 합니다.

    Scene이 변경될 때 TimeScale의 영향을 받을 수 있기 때문에 TimeScale를 생각보다 자주 사용하게 됩니다.

    그렇기 때문에 TimeScale에 대한 함수를 정의하여 파라미터값을 입력하면 그것이 TimeScale을 수정 시켜주는 함수를 설정하게 되면 어디서 사용했고, TimeScale이 어디서 꼬였는지 확인하기 편하게 됩니다.

     

    글로벌 변수는 변하지 않는 변수값을 가진 변수들입니다. 

    외부의 변수로 인해 변하면 안되는 값들이므로 const , readonly를 이용해서 변할 수 없게 막아줘야합니다.

     

    참고로 유틸리티 함수와 글로벌 변수에 static을 이용해주게 되면 좀 더 편하게 접근이 가능합니다.

     


     

    2. 관리자 클래스

    관리자 클래스로는 기본적으로 GameManager가 있습니다.

    그 외에 UIManager, ItemManager 등을 생성할 수 있습니다.

     

    많은 Manager들을 관리하는 방법은 크게 두 가지 입니다.

     

    싱글턴을 모든 Manager들이 사용하는 것 

    vs

    싱글턴은 GameManager만, 나머지 Manager는 GameManager 하위로

     

    이건 저도 어떻게 할지 고민인 방식인데요.

    모든 Manager들이 싱글턴 방식을 사용하는 것은 Manager의 갯수가 2~3개일 경우,

    그 이상은 GameManager 하위로 이동하는 것이 좋아보입니다.

     


     

    3. 공통된 데이터를 모아두기

    Scene이 변경되면 데이터는 파괴됩니다. 따로 저장한 것들만 남게 되는데요.

    모든 오브젝트를 DontDestroyObject 할 수는 없기 때문에 공통으로 남겨둘 데이터는 모아두는 것 입니다.

     

    이건 아직 잘 모르겠습니다! 아직 크게 많은 양의 데이터가 파괴되면 안되는 것을 경험하지 않아서 인 것 같습니다.

     


     

    4. 리소스 종류 별로 모아두기

    scriptable(플레이 중 변하지 않을 값, 프리팹 등), test에 필요한 정보들, 아무때나 쓰기 위한 정보 등을 종류 별로 정리해서 묶어두는 것입니다.

    이 부분은 예시를 보는 것이 가장 좋을 것 같지만..

    예시를 여기에 적으면 우선 안될 것 같으므로 나중에 쓰게 된다면 쓴 코드를 이용해서 다시 정리해보겠습니다.

     


     

    5. MonoBehavior + @ 생성

    script에서 유니티를 연결하기 위해서는 monobehavior를 상속받아야 합니다.

    그렇다고 monobehavior에 있는 함수들로만 적용하기 어려울 때가 있습니다.

    한 부분만 그렇게 된다면 함수를 그 부분에 추가하면 되지만 공통적으로 어렵게 된다면 그것을 모든 부분에 추가하게 되면 비효율적이 됩니다.

    그렇기 때문에 MonoBehavior을 상속받으면서 +@부분을 추가로 생성해둔 class를 따로 작성하여 MonoBehavior 대신 추가로 생성한 class를 상속받게 하면 MonoBehavior + @ 기능을 편하게 사용할 수 있습니다.

     


     

    6. OnDestroy() { null; }

    보통 OnDestroy를 하게 되면 GC가 메모리를 정리해주게 됩니다.

    하지만 가끔 정리를 못해주거나, OnDestroy를 했지만 연결된 부분이 있어서 제대로 사라지지 않는 경우가 있습니다.

     

    OnDestroy가 되는 객체 안에 있는 변수들을 null 해주므로써 GC가 메모리 관리를 쉽게 해줄 수 있게 할 수 있습니다.

     


     

    정리할 부분은 이 정도이며, 항상 세션은 유익했지만 이번 세션은 더 유익했던 것 같습니다.

    꿀같은 주말이 지나고 새로운 팀원분들을 만나게 되는데요.

    두근두근 기대됩니다.

    'TIL' 카테고리의 다른 글

    2024.2.20  (1) 2024.02.20
    2024.2.19  (0) 2024.02.19
    2024.2.14  (1) 2024.02.14
    2024.2.13  (1) 2024.02.13
    2024.2.8  (0) 2024.02.08
Designed by Tistory.