📌 카드 뒤집기 게임
같은 모양의 르탄이를 뒤집는 게임!
카드 배치하기
- 프팹을 반복 생성하여 4 X 4 배열 만들기
- 카드 프리팹을 16개 생성해 부모 오브젝트(cards) 아래에 배치.
- transform.parent를 설정해 계층 정리 용이.
for (int i = 0; i < 16; i++)
{
GameObject go = Instantiate(card);
go.transform.parent = cards;
}
이미지 랜덤 로직
- 카드 인덱스가 쌍으로 존재 (총 8쌍)
- OrderBy + Random.Range 조합으로 배열을 섞고, 각 카드에 번호를 부여
- 동일 쌍의 인덱스를 섞어서 매번 다른 카드 배열 구성
int[] arr = { 0, 0, 1, 1, ..., 7, 7 };
arr = arr.OrderBy(x => Random.Range(0f, 7f)).ToArray();
이미지 부여
인덱스 기반으로 리소스 불러오기
- 카드에 대응되는 이미지(rtan0 ~ rtan7)를 동적으로 불러와 설정
- Resources.Load<Sprite>를 통해 이미지 경로에서 스프라이트 로드
public void Setting(int idx)
{
index = idx;
frontImage.sprite = Resources.Load<Sprite>($"rtan{index}");
}
판정 시스템
- 두 카드가 같으면 제거, 다르면 다시 닫기
- cardCount를 기준으로 남은 카드 개수 관리
- 모두 맞추면 게임 종료 처리 가능
- 인덱스로 매칭 확인 → 제거 or 뒤집기 처리 → 카운트로 게임 진행 추적
if(firstCard.index == secondCard.index)
{
firstCard.DestroyCard();
secondCard.DestroyCard();
cardCount -= 2;
if(cardCount == 0)
{
// 게임 종료 처리
}
}
else
{
endTxt.SetActive(true);
Time.timeScale = 0.0f;
firstCard.CloseCard();
secondCard.CloseCard();
}
💡 느낀 점
- Resources.Load로 이미지 불러오는 방식이 깔끔했고, 리소스를 잘 정리해두면 유용하겠다고 느꼈다.
- 배열 섞기, 카드 매칭 로직, 게임 종료 처리까지 전체 흐름을 작은 코드로 구현해보며 게임 로직 구조가 익숙해졌다.
- 오브젝트 관리가 늘어날수록 변수나 상태 관리가 중요하다는 것을 체감했다.
.
❗ 기억하고 싶은 것
- Instantiate로 프리팹 복제 → 반복문으로 다수 배치 → transform.parent로 정돈
- Resources.Load<Sprite>()로 이미지 동적 불러오기
- OrderBy(x => Random.Range())로 배열 섞기
- 카드 짝 맞추기 로직에서 상태 초기화(firstCard = null)는 반드시 필요
'TIL' 카테고리의 다른 글
| 구조체(struct) vs 클래스(class) (0) | 2025.04.14 |
|---|---|
| 내일배움캠프 5일차 TIL (0) | 2025.04.11 |
| 내일배움캠프 3일차 TIL (0) | 2025.04.09 |
| 내일배움캠프 2일차 TIL (0) | 2025.04.08 |
| 내일배움캠프 1일차 TIL (0) | 2025.04.07 |