기존과 달리 보드게임을 만들 것이다.
보드게임의 경우 로직이 매우 중요하기 때문에, gameManager에 대한 부분이 기존 게임들보다 빡세게 들어간다.
이거저거 활용해서 만들어보자.
만들 게임은 다음과 같다.
- 기본 씬 구성하기 : 배경, 타이머, 리소스 받아두기
- 시간 보내기
- 카드 깔기
- 카드 뒤집기 애니메이션 만들기
- 같은 카드을 뒤집었을 때 없애기
아무래도 카드에 대한 작업이 많다.
1. Pixels per unit
외부 리소스를 스프라이트에 넣을 때, 리소스의 해상도와 스프라이트의 크기가 안맞는 경우가 있을 것이다.
보통은 리소스가 매우 고화질이기 때문에 리소스의 크기를 줄여 스프라이트의 크기와 맞게 해줘야 할 것이다.
그 중에 할 수 있는 방법 중에
이미지의 Pixels Per Unit
을 조정하는 것이다.
여기서 의미하는 Pixel
은 이미지의 픽셀을,
Unit
은 유니티 세계에서의 거리 단위이다.
Position
, Scale
의 1도 이 1 Unit
을 의미한다.
즉, 1 유닛 당 이미지의 몇 픽셀이 들어가게 할 것이냐?를 의미한다.
Pixels Per Unit
을 키우면 키울수록
씬에 표시되는 이미지의 크기는 작아진다.
Pixel Per Unit
을 100
에서 450
으로 늘려보자.
4.5배 작아지는 것을 볼 수 있다.
2. 랜덤으로 배열 섞기
서로 짝이 되는 카드 8종류, 총 16장을 랜덤한 순서로 배치해야하는데, 교안에서는 다음과 같은 코드를 사용하더라.
Card.cs 코드
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();
LINQ
라이브러리의 OrderBy()
를 사용한다.
LINQ
는 쉽게 말하면 Query
를 C#에서 사용하는 기능인데,
랜덤 셔플을 구현하기 위해 사용할 줄이야….
3. 다른 Object의 Sprite 제어하기
카드를 생성하면서 그 카드의 sprite를 바꿔줘야 하는데, 문제는 카드가 동적으로 생성되어서 유니티 상에서 따로 지정되지도 않고, 현재 스크립트에서 그 카드의 스프라이트를 바꿔주고 싶은데, 어떻게 해야하는가?
다음과 같이 Find
와 GetComponent
를 적절하게 사용하자.
이미지 파일은 Resources
폴더에 옮겨놓은 뒤 Load
함수로 사용가능하다.
Card.cs 코드
string rtanName = "rtan" + rtans[i].ToString(); newCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>(rtanName);
Uploaded by N2T
'개발 > Unity 내일배움캠프 TIL' 카테고리의 다른 글
내일배움캠프 8기를 시작하는 마음 (2) | 2023.08.07 |
---|---|
[내일배움단] 사전캠프를 마치며 (0) | 2023.08.04 |
[내일배움단] Unity TIL 3. 고양이 밥주기 게임 (0) | 2023.08.03 |
[내일배움단] Unity TIL 2. 풍선을 지켜라 (0) | 2023.08.01 |
Unity - Update() vs FixedUpdate() (0) | 2023.07.28 |