본문 바로가기

Today I Learned

[TIL][Unity] 24.04.18 내일배움캠프 게임개발 종합반 4주차

내일배움캠프 게임개발 종합반 4주차

 

 

이번 주차에서 다룬 게임은 카드 맞추기 게임이다.

카드를 배열하는 로직, 배열된 카드에 특수성을 부여(그림)하는 로직

카드를 뒤집어 동일한 타입의 카드를 선택했는지 판별하는 로직 등 다양한 로직이 사용되어

저번 주차까지 다룬 내용들보다 다소 복잡한 경향이 있었다.

주요 기능들을 살펴보자면

 

카드에 특수성을 부여하여 배열하기

//Board.cs

public class Board : MonoBehaviour
{
    public GameObject card;
    // Start is called before the first frame update
    void Start()
    {
        int[] arr = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 };
        arr = arr.OrderBy(x => Random.Range(0f, 7f)).ToArray();
        //랜덤 특수성 부여 로직 #1
        for (int i = 0; i < 16; i++)
        {
            GameObject go = Instantiate(card, this.transform);

            float x = (i % 4) * 1.4f - 2.1f;
            float y = (i / 4) * 1.4f - 3.0f;
            go.transform.position = new Vector2(x, y);
            //4 x 4 배치 로직 #2
            go.GetComponent<Card>().Setting(arr[i]);
        }
        GameManager.instance.cardCount = arr.Length;
    }

}

 

#1 랜덤 특수성 부여 로직

arr 배열에 각각 0 ~ 7까지의 수가 두 개씩 들어있다.

이를 C#에서 제공하는 기능을 통해 배열의 순서를 랜덤하게 변환한다.

여기서 결정된 특수성을 반복문의 마지막 문장을 통해 배치될 카드에 부여한다.

여기서 부여된 특수성은 각각 카드의 그림을 결정하는데 사용되는데

//Card.cs
public void Setting(int number)
{
    idx = number;
    frontImage.sprite = Resources.Load<Sprite>($"rtan{idx}");
}

위 코드를 통해 rtan(숫자)의 이름을 가진 이미지 파일을 각각 지정한다.

 

#2 4 x 4 배치 로직

좌표계를 통해 이해하기 쉽다.

위 그림의 좌표대로 카드가 배치된다고 할 때, 좌표계의 x좌표는 나머지, y좌표는 몫이 된다.

이를 각 변수에 수치화하여 카드 배치 시에 각각 지정하였다.

 

카드 뒤집기 로직

//GameManager.cs
public void Matched()
{
    if(firstCard.idx == secondCard.idx)
    {
        firstCard.DestroyCard();
        secondCard.DestroyCard();
        cardCount -= 2;
        if(cardCount == 0)
        {
            endTxt.gameObject.SetActive(true);
            Time.timeScale = 0.0f;
        }
    }
    else
    {
        firstCard.CloseCard();
        secondCard.CloseCard();
    }

    firstCard = null;
    secondCard = null;
}

 

위 코드를 통해 카드를 뒤집어 일치 여부를 판별하는데, 조건문을 설명하면

 1) 첫 카드와 두 번째 카드가 일치하면

     두 카드 오브젝트를 파괴 후 CardCount(게임 종료 제어 카운트) -2

     CardCount가 0이 되면 게임 종료

 2) 불일치하면

     두 카드를 다시 뒤집어놓음

이다.

여기서 주목할 점은 카드를 뒤집거나 파괴하는 로직이 아닌 CardCount를 이용한 로직이다.

총 16장의 카드를 서로 일치 시켜 CardCount가 0이 되면 게임을 종료시키는 것이다.

카드를 뒤집는 로직은 UI를 켜고 끄는 것으로 간단하게 구현이 가능하다.

 

위 프로젝트는 밑의 깃허브 레포지토리 주소에서 확인 가능하다.

 

https://github.com/twotop6357/FindRtan

 

24.04.18 Today I Learned