게임 개발 일지/내일배움캠프 TIL

일정한 간격으로 카드 배치하기

빛하_ 2023. 11. 3. 20:56

 

 

 

주요 코드 다시보기

// gameManager.cs

  void Start()
  {
      Time.timeScale = 1.0f;

      int[] rtans = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 };

      rtans = rtans.OrderBy(item => Random.Range(-1.0f, 1.0f)).ToArray();

      for (int i = 0; i < 16; i++)
      {
          GameObject newCard = Instantiate(card);
          newCard.transform.parent = GameObject.Find("cards").transform;

          float x = (i % 4) * 1.4f - 2.1f;
          float y = (i / 4) * 1.4f - 3.0f;
          newCard.transform.position = new Vector3(x, y, 0);

          string rtanName = "rtan" + rtans[i].ToString();
          newCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>(rtanName);
      }
  }

 

1. OrderBy , Random.Range

x = x.OrderBy(); 는 x를 (조건)에 맞게 정렬하고 싶을 때 사용하는 함수이다.

이 때 조건에 Random.Range() 를 사용하면 (범위) 안의 값을 Random 으로 지정해 요소를 정렬한다.

 

 

2. void , public void 의 차이

일반적으로 void 앞에는 private이 생략된 것으로 인지하면 된다.

private void : 외부 클래스에서의 접근이 제한된다.

public void : 외부 클래스에서도 접근할 수 있다.

 

* public static void : class 자체를 static으로 선언하면 외부 클래스에 언제든지 부를 수 있으며

                                오류를 방지하기 위해 class 단위 안에서 단 하나만 존재해야 한다. 

                                주로 class 를 싱글톤화 할 때 사용한다.

 

3. index 좌표화시켜 MainScene에 배치하기

앞에서 랜덤으로 정렬한 숫자를 카드에 부착했다면, 카드가 놓일 위치를 지정해야 한다.

 

<코드 해석>

 newCard.transform.position = new Vector3(x, y, 0);

 

16장의 카드가 놓일 위치가 가진 index값을 좌표화 시켜서 놓는다.

카드를 new Vector3(x, y, 0); 에 배치하기 위해 x값과 y값이 필요하다.

 

세로줄의 공통점은 4로 나눌 때의 몫이 서로 같다. 

가로줄의 공통점은 4로 나눌 때의 나머지가 서로 같다. 

그리고 각 카드 사이의 거리가 1.4이기 때문에 1.4f를 곱해준다. 

 float x = (i / 4) * 1.4f - 2.1f;
 float y = (i % 4) * 1.4f - 3.0f;

 

이 때, -2.1f 와 -3.0f 는 Unity 의 Mainscene에서 카드 위치를 조정하기 위해 넣은 상수이다.

 

 

 

Unity 기능 복습하기

 

1. transform 이해하기

Unity에서 transform은 position, rotation, scale 로 구성되어 있으며 각각 x, y, z 로 이루어져 있다.

transform은 object의 위치에 대한 정보를 가지고 있다.

 

* 꿀팁 ) Unity_Scene에서 qwer 단축키 사용하기

      q : scene 을 손 커서로 움직일 수 있다.

      w : position 수정 화면으로 변경

      e : rotation 수정 화면으로 변경

      r : scale 수정 화면으로 변경

 

2. parents 와 child 이해하기

Unity의 Hierarchy에 있는 폴더의 경우

상위 폴더가 parents 

하위 폴더가 child가 된다.

 

3. 위치 개념 이해하기

Unity에서 위치는 2가지가 있다.

1) Inspector 창에서 위치는 position 값의 x, y, z 를 의미한다.

2) Hierarchy 창에서 위치는 폴더 간의 위치로, parents-child 관계를 의미한다.

 

4. Unity의 세계관은 2개

1) 2D : screen = UI 의 영역으로, UI를 선택하면 Rect Transform이 뜬다.

2) 3D : world = game object의 영역으로, object 선택 시 Inspector에 바로 Transform이 뜬다.

 

5. UI 의 Render Mode 3가지

1) overlay : 모든 레이어를 over하여 표현
2) camera : UI를 카메라로 찍듯이 표현, 그 대신 레이어 순서를 바꿀 수 있음 (order in layer 사용)
3) world space : UI를 3D 공간에서 나타날 수 있게 함. 주로 HP바, 닉네임 등에 사용 
  

 

 

 

오늘의 회고

튜터님과 함께하는 과제 복습 및 QnA 시간!

과제를 수행하면서 어려웠던 점을 공유하고 Unity와 C#의 기능에 대해서 배울 수 있었다. 

튜터님들 덕분에 어려운 과제도 잘 마칠 수 있었다.

 

<꿀팁 모음집>

* 개발자의 숫자는 0부터 시작한다!!! (그런데 "첫 번째".. 같은 표현에서 혼란이 생기는 듯하다)

** 문자보다 숫자의 연산이 훨씬 빠르다! 가능하면 숫자로 바꿔보자.

*** 코드가 한 번 손에 익으면 그것만 사용하는 경우가 많아지므로

       다른 개발자들의 코드를 보면서 여러가지 코드에 대한 이해를 쌓는 것도 중요하다!

 

다음 주는 C# 문법을 집중 공부한다.

잘 따라갈 수 있었으면 좋겠다!

 

컴퓨터와 오랜 시간 붙어있던 한 주인데, 흥미가 떨어지지 않는 걸보니 잘 따라가고 있는 것 같다. 

지금의 열정이 쭉 함께하기를.  

++ 눈, 손목, 목, 허리 건강을 잘 챙기자!