일정한 간격으로 카드 배치하기
주요 코드 다시보기
// 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# 문법을 집중 공부한다.
잘 따라갈 수 있었으면 좋겠다!
컴퓨터와 오랜 시간 붙어있던 한 주인데, 흥미가 떨어지지 않는 걸보니 잘 따라가고 있는 것 같다.
지금의 열정이 쭉 함께하기를.
++ 눈, 손목, 목, 허리 건강을 잘 챙기자!