본문 바로가기
개발/Unity 내일배움캠프 TIL

[내일배움단] Unity TIL 4. 카드 뒤집기 게임

by 석시 2023. 8. 4.



기존과 달리 보드게임을 만들 것이다.

보드게임의 경우 로직이 매우 중요하기 때문에, gameManager에 대한 부분이 기존 게임들보다 빡세게 들어간다.

이거저거 활용해서 만들어보자.

만들 게임은 다음과 같다.

  1. 기본 씬 구성하기 : 배경, 타이머, 리소스 받아두기
  1. 시간 보내기
  1. 카드 깔기
  1. 카드 뒤집기 애니메이션 만들기
  1. 같은 카드을 뒤집었을 때 없애기

아무래도 카드에 대한 작업이 많다.

1. Pixels per unit

외부 리소스를 스프라이트에 넣을 때, 리소스의 해상도와 스프라이트의 크기가 안맞는 경우가 있을 것이다.

보통은 리소스가 매우 고화질이기 때문에 리소스의 크기를 줄여 스프라이트의 크기와 맞게 해줘야 할 것이다.

그 중에 할 수 있는 방법 중에 이미지의 Pixels Per Unit을 조정하는 것이다.

여기서 의미하는 Pixel은 이미지의 픽셀을, Unit은 유니티 세계에서의 거리 단위이다.

Position, Scale의 1도 이 1 Unit을 의미한다.

즉, 1 유닛 당 이미지의 몇 픽셀이 들어가게 할 것이냐?를 의미한다.

Pixels Per Unit을 키우면 키울수록 씬에 표시되는 이미지의 크기는 작아진다.

Pixel Per Unit100에서 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를 바꿔줘야 하는데, 문제는 카드가 동적으로 생성되어서 유니티 상에서 따로 지정되지도 않고, 현재 스크립트에서 그 카드의 스프라이트를 바꿔주고 싶은데, 어떻게 해야하는가?

다음과 같이 FindGetComponent를 적절하게 사용하자.

이미지 파일은 Resources 폴더에 옮겨놓은 뒤 Load 함수로 사용가능하다.

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


Uploaded by N2T