어제 프리팹을 제작한 것에 이어서 다른 기능들을 추가했다.
GameManager스크립트에서 선언하는 것을 받아온다.OpenCard() 함수를 통해 firstCard와 secondCard에 각각 해당하는 카드를 저장하는 것.GameManager.cs에서 isMatched()를 판별한 것을 불러온다. if (GameManager.Instance.firstCard == null)
{
GameManager.Instance.firstCard = this;
}
else
{
GameManager.Instance.secondCard = this;
GameManager.Instance.isMatched();
}
GameManager.cs에서 담당public void DestroyCard()
{
Invoke("DestoryCardInvoke", 1.0f);
}
void DestoryCardInvoke()
{
Destroy(gameObject);
}
GameManager.cs에서 판별한다. public void CloseCard()
{
Invoke("CloseCardInvoke", 1.0f);
}
void CloseCardInvoke()
{
anim.SetBool("isOpen", false);
front.SetActive(false);
back.SetActive(true);
}
이 기능들을 주석처리하여 팀원들에게 Push했다.
나는 위 논의사항대로 애니메이션을 만들고, 추가적인 애니메이션도 제작해보기로 했다.
먼저 카드의 뒤집어지는 애니메이션을 수정했다.
원래는 단순히 작아졌다가 커지는 효과만 있었지만, y축 기준으로 회전시켜서 실제 뒤집어지는 효과를 내보기로 했다.
다음으로 카드를 못 맞췄을 때 다시 뒤집는 기능도 추가하였다.
하지만 오류가 발생했다.
오류의 원인을 생각해보았다.
따라서 나는 bool값이 아닌, trigger 파라미터를 이용하기로 했다.
card.cs의 코드 또한 trigger 값을 사용하도록 수정한다. public void OpenCard()
{
anim.SetTrigger("flip");
}
public void CloseCard()
{
Invoke("CloseCardInvoke", 0.5f);
}
private void CloseCardInvoke()
{
anim.SetTrigger("flipback");
}
다음으로 나는 카드를 맞췄을 때 카드를 파괴하는 애니메이션을 추가해보기로 했다.
Card_destroy.anim을 생성하고 작아지면서 회전하고 fade out 하는 효과로 애니메이션을 만들었다. private void DestroyCardInvoke()
{
anim.SetTrigger("Destroy");
Destroy(this.gameObject, 0.5f);
}
포스트에는 짧게 작성했지만, 오늘도 오류와의 전쟁이었다. 분명히 내가 볼 때는 잘못된 조건이 없는 것 같은데, 항상 오류가 발생하는 것이 답답하다. 그리고, 그 해결책을 알았을 땐 허무함과 후련함이 같이 찾아온다.
오류가 해결된 이후 완성된 코드와 에디터 상 구조들을 다시 보며 기능에 따른 구조를 이해하려고 항상 노력하고 있다. 물론 정확하게 같은 기능과 그에 따른 코드를 쓸 일은 거의 없지만, 이러한 구조를 익히는 것이 나중에 더 복잡한 구조를 이해하는 데에 큰 도움이 될 거라 믿는다.