새소식

C#,Unity Programming

게임개발 학습. 카드 뒤집기 게임(카드 매칭하기, 다른 게임 오브젝트에 있는 스크립트 불러오기)

  • -
728x90

 

// 게임개발 종합반 - 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);
            }
        }

 

 

Contents
  • -

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.