카드 뒤집기 게임의 매칭 로직 흐름 파악하기
1. Card 게임오브젝트 Button 컴포넌트의 On Click 이벤트 발생하면(사용자가 카드를 클릭하면) Card.cs의 OpenCard() 호출
public void OpenCard()
{
// 카드를 앞면으로 뒤집기
anim.SetBool("isOpen", true);
front.SetActive(true);
back.SetActive(false);
// 첫번째 카드 오브젝트가 없으면 자기 자신을 첫번째 카드로 설정
if (GameManager.Instance.firstCard == null)
{
GameManager.Instance.firstCard = this;
}
// 첫번째 카드 오브젝트가 있으면 자기 자신을 두번째 카드로 설정
else
{
GameManager.Instance.secondCard = this;
// 두 카드를 비교하는 함수 호출
GameManager.Instance.checkMatched();
}
}
2. GameManager.cs 의 checkMatched() 에서 두 카드의 인덱스가 일치하는 지 확인
이때 Card.cs의 index 변수가 public으로 설정해야 GameManager.cs에서 접근 가능
public void checkMatched()
{
// 첫번째 카드와 두번째 카드의 인덱스가 같으면
if (firstCard.index == secondCard.index)
{
// 두 카드를 없애기
firstCard.DestroyCard();
secondCard.DestroyCard();
}
// 첫번째 카드와 두번째 카드의 인덱스가 다르면
else
{
// 두 카드를 닫기(뒷면이 보이게 뒤집기)
firstCard.CloseCard();
secondCard.CloseCard();
}
// 비교가 끝나면 다음 비교를 위해 오브젝트 비우기
firstCard = null;
secondCard = null;
}
3. Card.cs의 DestroyCard()와 CloseCard() 호출되면 InvokeXX()로 지연 호출하기
public void DestroyCard()
{
// 자기 자신을 삭제하는 함수 1초 뒤에 호출
Invoke("DestroyCardInvoke", 1.0f);
}
void DestroyCardInvoke()
{
// 자기 자신을 삭제
Destroy(this.gameObject);
}
public void CloseCard()
{
// 카드 닫는 함수 1초 뒤에 호출
Invoke("CloseCardInvoke", 1.0f);
}
void CloseCardInvoke()
{
// 카드를 뒷면으로 뒤집기
anim.SetBool("isOpen", false);
front.SetActive(false);
back.SetActive(true);
}
호출 흐름


'내일배움캠프 > TIL' 카테고리의 다른 글
| [내배캠][Unity6기][TIL] 5. Unity 주변 기능 학습(4~5) (0) | 2024.09.12 |
|---|---|
| [내배캠][Unity6기][TIL] 5. Unity 주변 기능 학습(1~3) (0) | 2024.09.11 |
| [내배캠][Unity6기][TIL] 4. 카드 뒤집기(1~4) (0) | 2024.09.09 |
| [내배캠][Unity6기][TIL] 3. 고양이 밥주기(5~9) (0) | 2024.09.07 |
| [내배캠][Unity6기][TIL] 3. 고양이 밥주기(1~4) (0) | 2024.09.06 |