본문 바로가기
스파르타 내배캠

스파르타 내배캠 Unity 3기 5일차

by LemongO 2023. 12. 28.

끝! 끝! 끝! 끝! 끝!

 

미니 팀 프로젝트 주차가 드디어 끝나는 날이다.

 

근데 근데 근데 다른 팀들의 발표를 들으며 몇 가지 버그들을 듣다보니

우리 팀 프로젝트에도 포함되어 있는 버그라 생각이 돼서 프로젝트 마무리와 발표까지 되었지만

그래도 급히 수정을 해보려 한다.

 

 

!  BugFix

문제점 : 빠르게 같은 카드를 연속 클릭하면 해당 카드를 매칭 성공한 것으로 인식이 된다.

해결방법 : Card 클래스에서 자신이 선택 됐는지 체크를 해주고 선택 됐으면 선택함수를 무시한다.

 

 

 

사진과 같은 어이없는 버그가 있었다......

그런데 해결방법도 어이없을 정도로 간단하다.

 

Card 스크립트에 코드 몇 줄만 추가 해주면 된다.

 

public class card : MonoBehaviour
{
    bool isSelected = false;

    public void openCard()
    {
        if (isSelected)
            return;

        isSelected = true;
    }
    
    void closeCardInvoke()
    {
        isSelected = false;
    }
}

 

Card 클래스와 기존에 있던 함수 openCard 와 closeCardInvoke 에 추가된 코드들이다.

 

전역변수로 bool isSelected를 선언해

카드가 열릴 때 true를, 카드가 닫힐 때 false를 할당해준다.

만약 카드가 열려서 isSelected 가 true 라면 openCard함수 첫 줄에서 return 시켜

카드가 중복으로 선택되지 않도록 하면 된다!

 

더 이상 아무리 클릭해도 중복 선택은 되지 않는다!

해결!

 

하는김에 닫히기도전에 연속으로 선택되는 부분도 좀 수정해야겠다.

지맘대로 마구 열린다

 

이 부분도 마찬가지로 코드 몇줄이면 해결된다.

GameManager 클래스를 수정하자

public bool IsMatching { get; private set; } = false;

public void isMatched()
{
    StartCoroutine(MatchingRoutine());         
}

private IEnumerator MatchingRoutine()
{
    IsMatching = true;
    yield return new WaitForSeconds(0.5f);
    IsMatching = false;
}

 

bool IsMatching 를 프로퍼티로 선언 후 기존에 카드 2개가 선택되면 실행되는 isMatched 함수의 첫줄에 

MatchingRoutine() 코루틴을 실행 해주자.

MatchingRoutine() 코루틴은 IsMatching을 true로 만든 뒤 0.5초 뒤 false로 바꿔준다.

 

이렇게 한 이유는 Card 가 선택될 때 2개의 카드가 모두 선택됐을 때 0.5초동안은 선택을 못하게끔 해주기 위함이다.

 

다시 Card 클래스 openCard 함수의 첫 줄 조건을 추가해주면

if (isSelected || GameManager.Instance.IsMatching)
    return;

 

 

정상적으로 카드가 매칭 확인 중인 0.5초 동안은 다음 카드를 선택하지 못한다.