이번엔 카드를 뒤집어 같은 카드라면 카드를 없애고 같은 카드가 아니면 닫는 로직을 만들 것이다.
맨 먼저 GameManager에서 카드를 판정하는 것을 구현할 함수 public void Matched() 를 만들어준다.
그리고 뒤집은 카드를 받을 변수 public Card firstCard; public Card secondCard;를 선언 해준다
그리고 GameManager의 함수를 다른 곳에서 사용할 수 있도록 싱글톤을 만들어준다.
Card 스크립트로 가서 OpenCard 함수 안에 코드를 작성하여 준다.
//만약 첫번째카드가 비어있다면 첫번째카드에 이 카드의 정보를 저장하고
//비어있지않다면 두번째 카드의 정보를 이것으로 하고 대조해보는 함수를 불러온다.
첫번째 카드가 비어있다면 실행해보았을때 firstcard부분이 비어있고
카드를 선택하고 보면 클릭한 카드의 내용이 들어있는 것을 확인할 수 있다
firstcard와 secondcard의 idx를 비교해서 같다면 없애고 다르다면 다시 뒤집는 것이 최종목표다.
gamemanager의 matched 함수로 돌아가서 if (firstCard.idx == secondCard.idx) 라는 조건문을 만들어준다.
둘의 idx가 같다면 일어날 일은 card 스크립트에서 만들어준다. public void destroycard와 public void closecard 함수를 만들고
만약 같다면 Destroy(gameObject); //게임오브젝트를 제거
카드들을 게임에서 퇴장시키고
다르다면
오픈카드에서 불값을 참으로 만들어 애니메이션을 작동시키고 앞뒤면을 바꾸었던 것을 역순으로
anim.SetBool("isOpen", false);
front.SetActive(false);
back.SetActive(true);
라고 closecard 함수안에 적어주고
matched 함수안에는 일치할 경우 두 카드를 파괴 일치하지 않을 경우는 다시 뒤집는 함수를 다음처럼 작성하고 실행해본다.
실행하였을때 정상적으로 작동하지 않는데 이유는 카드들의 정보가 firstcard 와 secondcard 변수에 남아 있기 때문이다. 따라서
조건문 밑에 다시 firstcard와 secondcard를 초기화 시켜주는 로직을 작성해준다. 다시 실행하였을때 제대로 작동한다면 이번엔 파괴될 때나 닫힐 때의 전에 카드 조합이 맞는지 확인할 시간을 주어야 하기때문에 이 동작들이 지연되도록 해야한다.
Invoke로 destroycard, closecard 함수가 1초씩 지연되게 하였다. 카드에 대한 매커니즘은 일단 다 설계한 것 같다.
그럼 이제 게임의 모든 카드를 뒤집었을 때 게임이 종료되는 로직을 만든다.
먼저 텍스트 부문에서 timeTxt를 ctrl d하여 복사붙여넣기 해준다.
이름을 바꾸고 pos y 0 너비 높이 300 폰트사이즈는 200 색은 255 255 0 으로 노란색을 만들어주고 텍스트에 끝을 적어주고 보이지않게 꺼준다.
스크립트로 돌아가서 스크립트에 불러오기 위해 변수를 선언 하고 카드 갯수를 세어줄 정수형 변수도 하나만든다.
(Board 스크립트에서 불러오기 위해 public을 붙여줌)
카드를 생성하는 로직 밑에 코드를 작성
//gamemanager의 cardcount를 arr 리스트의 크기만큼 설정 arr은 16개의 배열이 들어있으므로 16이됨
그리고 카드가 일치하여 사라지면 카드카운트도 2씩 사라지게 한다.
만약 카드카운트가 0이되면 시간을 멈추고 엔드텍스트가 보이게 되게 코드를 작성한다
//그러기 위해 start 에도 재시작했을때 다시 시간을 흐르게 초기화해줄 timescale도 만들어주고
텍스트변수를 게임오브젝트 변수로 바꾸기도 하였다.
실행하였을 때 카드 카운트는 정상적으로 16이 되었고
끝날 때 끝 도 출력이 잘 되었다.
끝났을 때 다시 시작하는 버튼도 만들어준다.
맨위에 using UnityEngine.SceneManagement;
public void retry()
{
SceneManager.LoadScene("MainScene");
}
endtxt 오브젝트에 button과 retrybutton을 부여하고 onclick 에 endtxt를 버튼으로 retry()함수를 사용하도록 해주면 된다.
'TIL' 카테고리의 다른 글
2024 09 05 TIL (2) | 2024.09.05 |
---|---|
2024 09 04 TIL (3) | 2024.09.04 |
2024 09 02 TIL (1) | 2024.09.02 |
2024 08 30 TIL (0) | 2024.08.30 |
2024 08 29 TIL (0) | 2024.08.29 |