람다 표현식
과 OrderBy()
자습 (미완료)Invork
의 사용 (복습)
Invork
로 딜레이를 걸어줄 때, 왜 바로 GameManager에서 Invork
를 쓰지 않는거지? 싶었는데, 딜레이를 걸어줘야 하는 메서드가 GameManager가 아닌 Card에 있어서였다.
또한 Invork
를 사용하려면 메서드의 이름을 문자열로 넣어주어야 하기 때문에, CloseCard()
메서드와 CloseCardInvoke()
메서드를 나눠 만들어주어야 했다.
Invoke
말고 딜레이를 주는 다른 방법은 없는 걸까? 시간이 난다면 따로 찾아보는 것도 좋을 듯.
public void DestroyCard()
{
Invoke("DestroyCardInvoke", 1.0f);
}
void DestroyCardInvoke()
{
//카드를 없애라
Destroy(gameObject);
}
public void CloseCard()
{
Invoke("CloseCardInvoke", 1.0f);
}
void CloseCardInvoke()
{
//열었던 카드를 다시 뒤집어라
anim.SetBool("isOpen", false);
front.SetActive(false);
back.SetActive(true);
}
카드가 뒤집히기 전에 다른 카드를 뒤집지 못하게 하려고 GameManager
에 isClickable
변수를 만들었는데 생각처럼 잘 안된다…
내가 생각한 방식:
isClickable
를 true
로 세팅한다.true
상태일 때만 시도할 수 있다.false
가 되도록 한다.isClickable
를 다시 true
로 만든다.하지만 카드를 뒤집는 과정이 생각보다 복잡해서 내 처음 생각대로 되지 않았다.
이하 나의 삽질:
카드의 뒷면이 클릭될 때마다 실행되는 메서드 OpenCard()
에, isClickable
가 true
일 때만 내가 클릭한 카드 정보를 넘겨주도록 수정했다.
카드 비교, 뒤집기, 없애기는 모두 Matched()
메서드 안에서 처리되고 호출되므로 Matched()
메서드 안에 들어가면 isClickable
를 false
로 바꿔주도록 했다.
“모든 과정”이 끝난 뒤라는 건, 카드 뒤집기 메서드인 CloseCardInvoke()
까지 끝난 뒤일테니 CloseCardInvoke()
내부에 isClickable
를 true
로 바꾸는 코드를 넣어주었다.
결과: 딜레이 문제가 해결되긴 커녕 없던 오류가 생겼다…
일단 시간이 없어서 오늘까진 혼자서 문제가 뭔지 살펴본 뒤, 내일까지 해결이 안 된다면 튜터님께 여쭤볼 예정...🥲