ABOUT ME

Today
Yesterday
Total
  • 2024.2.1
    TIL 2024. 2. 1. 21:09

    2월입니다.

    그리고 새로운 팀원들과 만나는 날입니다.

    항상 4명이서 하다가 이번에는 5명이서 해서 북적북적할 거라 생각했지만.. 다들 조용하시더라구요.

    같은 팀원분들 중에서는 발표하신거 봤기 때문에 아는 분이 있긴합니다만 저만 아는 그런거.. 입니다.

     

    그리고 아무래도 새로운 팀원분들 만나면 개인과제가 먼저라 참.. 다가가기가 쉽지 않은데.. 팀 과제에서는 어떨지 모르겠습니다.

     

    오늘은 수준별 반으로 세션 진행하고, 새로운 강의 지급받아서 강의 열심히 듣고 있습니다.

    저번에 강의 듣다가 개인 과제하러 가서.. 강의를 제대로 다 못봤거든요..

    그래서 이번에는 강의 다 듣고 개인과제하려고 합니다.

    개인과제는 2가지 중 한 개를 선택해서 작업하면 되는데, 첫번째꺼는 쉽긴한데 강의 내용이 두번째꺼랑 연관되어있고 해보고 싶은 것도 두번째라서 두번째를 선택해서 해보지 않을까 싶습니다.

     


     

    수준별 반 강의 내용 정리

     

    1. 컴포넌트 패턴

    : 큰 시스템을 구성하는 각 부분을 독립적인 컴포넌트로 분리하여 설계하는 방식

     

    게임 오브젝트를 생성해서 AddComponent를 통해 저장되어있던 컴포넌트를 가져오는 것을 말합니다.

    오브젝트 실행 시 연결되어있는 컴포넌트들을 소환하여 실행시킵니다.

     

    이 컴포넌트들은 독립적이기 때문에 서로 연결되어 있지 않으므로 다른 컴포넌트(보통 Script)에서 사용하기 위해서는 GetComponent를 사용해줘야하며, 불러오는 컴포넌트와 불려와지는 컴포넌트 모두 오브젝트에 연결되어있어야 가능합니다.

     


     

    2. 벡터와 좌표계

    2D에서 사용되는 Vector에서 2가 아니라 3를 사용하는 경우를 따라하면서 보게 되는데 2D이기 때문에 z 좌표는 무조건 0인데 왜 Vecter2가 아닌 Vecter3를 사용하는 것인가에 대한 의문이 생기곤했는데

    이유는 Vecter2가 값형이기 때문입니다.

    갑형의 경우 사용할 수록 메모리에 쌓이기 때문에 사용할 수록 부하가 걸리기 쉬우므로 Vecter3를 사용하는 것이라고 생각됩니다. (Vecter3는 참조형)

     

    벡터를 좌표계에서 봤을 때 중요한 포인트가 있습니다.

    vecter A - vecter B를 했을 때 원점에서 A - B로 가는 벡터와 B에서 A로 가는 벡터가 평행하므로 B가 A를 바라본다라고 볼 수 있습니다.

    그래서 적이 플레이어를 따라갈 때 vecter Player - vecter Enemy를 해주는 것이었습니다. 

     

    그리고 좌표계에는 두가지 종류가 있는데

    transform.localposition : 오브젝트 기준이 있음.

    transform.position : (0,0,0)이 기준.

     

    몸통이 있고 머리를 생성했을 때, 몸통을 기준으로 1만큼 위에 머리를 생성한다고 한다면 머리의 좌표계는

    transform.localposition == (0, 1, 0)

    transform.lposition == (5, 3, 0)

    이 됩니다.

    몸통의 경우 기준을 잡지 않고 생성했기 때문에

    transform.localposition == (5, 2, 0)

    transform.lposition == (5, 2, 0)

    로 둘 다 동일하게 됩니다.

     


     

    3. 싱글턴 패턴

    public static ~~~ instance;

    로 선언하여 Awake { instance = this }

    를 하면 싱글턴이 된다.

     

    메모리 구조는 크게 4가지로 코드, 데이터, 힙, 스택이 있습니다.

    힙에는 참조형이 스택에는 값형이 저장되며, static은 데이터에 저장됩니다.

    데이터의 고정된 메모리 위치에 할당되므로 동일한 값을 공유하게 됩니다.

    싱글턴은 static instance가 단 한개만 생성되도록 보장하는 것이며, 다른 클래스를 이용해서 인스턴스를 불러와도 원래 저장되어있던 인스턴스를 불러오게 됩니다.

     

    public static Singleton instance;
    
    public void Awake()
    {
        if(instance == null)
        {
            instance = new Singleton();
        }
        else
        {
            Destroy(gameObject);
        }
    }

    그래서 싱글턴을 선언할 때에는 instance == null 인지 아닌지 확인할 필요가 있고, null이 아니라면 중복 인스턴스가 생기지 않도록 제거할 필요가 있습니다.

     


     

    4. 데이터 유지

    scene이 변경되면 그 전 scene에 있던 데이터는 사라지게 됩니다.

    그렇기 때문에 데이터를 다른 곳에 저장시키거나 데이터가 파괴되지 않도록 해줘야 scene이 바뀌어도 데이터를 보존하게 됩니다.

    방법은 크게 3가지로

     

    1. PlayerPrefs : Key를 이용해서 레지스트리에 저장합니다. 가져오기 위해서도 Key를 사용해줍니다.

    단, int나 string 정도만 저장이 가능합니다.

     

    2. DontDestroyOnLoad(GameObject) : GameObject가 scene이 바뀌어도 파괴되지 않도록 설정해줍니다. 가장 중요한 부분이나 GameManager에 사용하는 경우가 많습니다.

     

    3. static : 다른 공간에 저장되므로  scene 간 데이터를 공유할 수 있습니다. static으로 선언한 변수를 이용해서 사용할 수 있습니다.

     


     

    5. 레이어 마스크

    int layerMask = 1 << LayerMask.NameToLayer("Player");

    코드에서 사용할 레이어 마스크 값을 정의합니다.

     

    비트연산자를 이용해서 정의하는 것인데 레이어는 총 32개까지 지정이 가능하며, 0부터 31까지의 비트로 표현되기 때문입니다.

     

    00 ... 0001 : 0번 레이어

    00 ... 0010 : 1번 레이어

    00 ... 0100 : 2번 레이어

     

    각각의 레이어들이 저장되면 번호에 맞는 비트가 켜지게 되고, 이를 이용해서 레이어를 동시에 활성화 시킬 수도 있고 활성화된 레이어들을 확인할 수 있습니다.

     

    00 ... 0110 : 1,2번 레이어 활성화

     

    if문에서 비트를 & 또는 |로 비교하여 어떤 레이어가 활성화 되었을 때 if문을 사용할지 정할 수 있습니다.

     


     

    지급된 강의는 다 듣지 못했기 때문에 먼저 오늘 들은 수준별 반에서 진행된 강의를 정리해봤습니다.

    사실 더 많은 내용이 있지만 제가 원래 몰랐거나 이번 기회에 좀 더 알게된 것 위주로 정리해보았습니다.

    'TIL' 카테고리의 다른 글

    2024.2.6  (0) 2024.02.06
    2024.2.2  (0) 2024.02.02
    2024.1.31  (0) 2024.01.31
    2024.1.30  (0) 2024.01.30
    2024.1.29  (0) 2024.01.29
Designed by Tistory.