1. Instantiate시 부모 설정 및 sprite 로드하기
2. 두 스프라이트가 맞는 지 확인하기
3. 마지막 카드를 맞출 때 종료하기 + 코드 수정 요구 사항
4. 카드 선택 순서 지정하기
5. 빌드 오류 해결
계층구조에 있는 Cards 오브젝트의 자식으로 생성하는 코드
// newCard 변수로 새 카드 생성
GameObject newCard = Instantiate(card);
// newCard를 Cards로 옮겨줘
newCard.transform.parent = GameObject.Find("Cards").transform;
Find로 "Cards"를 찾고 transform.parent를 이용하여 부모를 설정한다.
두 오브젝트가 같은지를 스프라이트로 판단하여 매치할 수 있다.
string firstCardImage = firstCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name;
string secondCardImage = secondCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name;
// 첫 번째 카드와 두 번째 카드가 같은지 판단
if(firstCardImage == secondCardImage)
{
audioSource.PlayOneShot(match);
firstCard.GetComponent<Card>().destroyCard();
secondCard.GetComponent<Card>().destroyCard();
두 스프라이트가 동일 한지 확인 하고 맞추는 방법은 생각하지 못해서 놀라웠다.
게임에서 동작하는 방식 그대로 코드로 작성하는 간편한 코드가 마음에 들었다.
카드 맞추기 게임의 우승 조건. 카드가 2개 남았을 때 맞추면 게임을 종료한다.
int cardsLeft = GameObject.Find("Cards").transform.childCount;
if (cardsLeft == 2)
{
// 게임 종료
Invoke("GameEnd", 1f);
}
남은 카드의 개수로 게임을 끝내는 코드도 참 간단하게 실행할 수 있었다.
그러나, 오류가 있다.
빠르게 마지막 카드 두 쌍을 맞추면 카드가 4장 있을 때 맞춘 판정이기 때문에
위의 조건문을 통과하지 못하고 모든 카드를 맞추게 된다.
두 카드를 선택하여 둘을 비교해야 하기 때문에, 고른 카드의 순서가 중요하다.
if(GameManager.I.firstCard == null)
{
GameManager.I.firstCard = gameObject;
}
else
{
GameManager.I.secondCard = gameObject;
GameManager.I.IsMatched();
}
게임 메니저의 두 저장공간을 만들어 두고, 비어있을 때 첫번째 카드를 넣고
그렇지 않으면 두번째 공간에 넣는다.
또한 GameManager에서 두 카드가 맞지 않을 때 모두 Null 값을 입력해야 한다.

빌드 시에 해당 오류가 나타났다.
찾아본 결과, 프로젝트 폴더에 바로 빌드를 하면 생기는 오류이다.
Build 폴더를 생성한 뒤 빌드 해보니 문제 없이 빌드가 성공하였다.
다른 조건에도 생길 수 있는 듯 하다.