// 게임개발 종합반 - 4주차(스파르타코딩클럽)
카드 매칭하기
- 목표 : 첫번째 카드의 이름을 가지고 있다가, 두번째 카드와 일치하면 없애기. 그렇지 않으면 다시 뒤집기
- gameManager 에서 일치여부 판단 함수 생성
public static gameManager GM;
public GameObject firstCard;
public GameObject secondCard;
private void Awake()
{
GM = this;
}
public void isMatched()
{
// firstCard 와 secondCard 일치 여부 판단
}
- 카드를 뒤집는 행위는 card.cs에서 하므로 openCard()에서 firstCard, secondCard 에 카드를 넣어줌
public void openCard()
{
animator.SetBool("isOpen", true);
transform.Find("front").gameObject.SetActive(true);
transform.Find("back").gameObject.SetActive(false);
if (gameManager.GM.firstCard == null)
{
gameManager.GM.firstCard = gameObject;
}
else
{
gameManager.GM.secondCard = gameObject;
gameManager.GM.isMatched();
}
}
- gameManager isMatched() 에서 이미지의 파일명을 비교해서 같은카드인지 판단
public void isMatched()
{
// firstCard 와 secondCard 일치 여부 판단
string firstCardImage = firstCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name;
string secondCardImage = secondCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name;
if (firstCardImage == secondCardImage)
{
firstCard.GetComponent<card>().destroyCard();
secondCard.GetComponent<card>().destroyCard();
}
else
{
firstCard.GetComponent<card>().closeCard();
secondCard.GetComponent<card>().closeCard();
}
firstCard = null;
secondCard = null;
}
다른 게임 오브젝트에 있는 스크립트 불러오는 방법
- 오브젝트명.GetComponent<스크립트명>().함수();
firstCard.GetComponent<card>().destroyCard();
public void destroyCard()
{
Invoke("destroyCardInvoke", 1.0f);
}
void destroyCardInvoke()
{
Destroy(gameObject);
}
public void closeCard()
{
Invoke("closeCardInvoke", 1.0f);
}
void closeCardInvoke()
{
animator.SetBool("isOpen", false);
transform.Find("front").gameObject.SetActive(false);
transform.Find("back").gameObject.SetActive(true);
}
게임 끝내기
- 카드가 다 사라지면 게임 종료하기
- 남은 카드가 없다는 것은 cards의 child가 없다는 것을 확인하면 됨
- childCount 프로퍼티 사용
int cardsLeft = GameObject.Find("cards").transform.childCount;
if (firstCardImage == secondCardImage)
{
firstCard.GetComponent<card>().destroyCard();
secondCard.GetComponent<card>().destroyCard();
int cardsLeft = GameObject.Find("Cards").transform.childCount;
if (cardsLeft == 2)
{
// 종료시키자
Time.timeScale = 0.0f;
endTxt.SetActive(true);
}
}