내일배움캠프 게임개발 종합반 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
'Today I Learned' 카테고리의 다른 글
[TIL] 24.04.23 TIL 쓰기 특강 (0) | 2024.04.23 |
---|---|
[TIL][C#] 24.04.22 내일배움캠프 C# 문법 종합반 1주차 (0) | 2024.04.22 |
[TIL][Unity] 24.04.17 내일배움캠프 게임개발 종합반 3주차 (0) | 2024.04.17 |
[TIL][Unity] 24.04.16 내일배움캠프 게임개발 종합반 2주차 (0) | 2024.04.16 |
[TIL][Unity] 24.04.15 내일배움캠프 게임개발 종합반 1주차 (0) | 2024.04.15 |