-
내일배움캠프 3일차 TIL - 애니메이션으로 게임 마무리하기Unity/오늘 알아낸 것 2023. 8. 10. 20:09
오늘은 게임을 완성하였다
일단 요구사항인 카드 플립 애니메이션을 넣기 위해서 팀이 작성한 게임 로직을 갈아엎었다
팀이 작성한 코드를 보니
public void openCard() { anim.SetBool("isOpen", true); transform.Find("front").gameObject.SetActive(true); transform.Find("back").gameObject.SetActive(false); if (GameManager.I.firstCard == null) { GameManager.I.firstCard = gameObject; GameManager.I.firstCardpos = gameObject.transform.position; } else if (GameManager.I.firstCard != null) { GameManager.I.secondCard = gameObject; GameManager.I.secondCardpos = gameObject.transform.position; GameManager.I.IsMatched(); } } public void destroyCard() { Invoke("destroyCardInvoke", 0.5f); } void destroyCardInvoke() { Destroy(gameObject); } public void closeCard() { Invoke("closeCardInvoke", 0.5f); } void closeCardInvoke() { anim.SetBool("isOpen", false); transform.Find("back").gameObject.SetActive(true); transform.Find("front").gameObject.SetActive(false); }
이런식으로 되어있었기에 카드 뒤집기 온라인 강의에서 쓰던 코드라고 한다
이렇게 하기보단
[SerializeField] Animator anim; public void PlayAnim(string _triggerName) { anim.SetTrigger(_triggerName); } public bool isFliping() { if(anim.GetCurrentAnimatorStateInfo(0).IsName(Define.CARD_ANIM_FLIP_0) == true || anim.GetCurrentAnimatorStateInfo(0).IsName(Define.CARD_ANIM_FLIP_1) == true) { return true; } else { return false; } } public void OpenCard() { if(isFliping() == true) { return; } int ranFlipNum = Random.Range(0, 2); if(ranFlipNum == 0) { SoundManager.I.PlaySFX(Define.GAME_CARD_PLAYED_SFX_0); PlayAnim(Define.CARD_ANIM_FLIP_0); } else { SoundManager.I.PlaySFX(Define.GAME_CARD_PLAYED_SFX_1); PlayAnim(Define.CARD_ANIM_FLIP_1); } if (GameManager.I.firstCard == null) { GameManager.I.firstCard = gameObject; GameManager.I.firstCardpos = gameObject.transform.position; } else if (GameManager.I.firstCard != null) { GameManager.I.secondCard = gameObject; GameManager.I.secondCardpos = gameObject.transform.position; GameManager.I.IsMatched(); } } public void DestroyCard() { PlayAnim(Define.CARD_ANIM_MATCHED); } public void DestroyAnimEvent() { Destroy(gameObject); } public void CloseCard() { PlayAnim(Define.CARD_ANIM_RESET); }
애니메이션을 만들어서 애니메이터로 제어하고 스크립트론 플립 체크 하는걸로 바꾸었다
주석도 쓰는 버릇을 좀 들여야하는데 오늘 마감이라 마음이 급했다..
리절트 씬 스코어 올라가는건 어제 생각했던 Mathf.Lerp() 메서드를 사용해서 구현헀다
float t = timePassed / duration; float calculatedValue = Mathf.Lerp(startValue, _value,t);
구글에서 긁어왔다
별건 없고 startValue를 _value까지 duration 시간만큼 채우는 코드이다
결과창에서 뿅뿅뿅뿅 하는걸 만들고싶었다 (이런거 좋아함)
심심해서 움직이는 르탄이랑 크레딧 씬도 만들었는데
노가다해서 애니메이션 박았다
좀 더 재밌게 만들수도 있었던거 같은데
기획 단계에서 재미 포인트를 제대로 살리지 못한거 같아 아쉽다
카드 애니메이터
다시 반대로 뒤집히는건 그냥 트리거와 스피드 -1로 해서 반대로 돌리게 했다
카드 매치됬을때 애니메이션
별건없고 앞면 키고 뒷면 끄고
컬라이더 꺼버려서 더 이상 안뒤집게 한뒤 마지막에 애니메이션 이벤트로 스스로 파괴되게 했다
이번엔 몸 푼 셈 치고 다음 프로젝트를 준비해야겠다
다음은 버튼이 이리저리 움직인다거나 아니면 전체가 움직인다거나 애니메이션으로 동적 UI를 만들어보고 싶다
'Unity > 오늘 알아낸 것' 카테고리의 다른 글
해상도에 맞게 트렌스폼 포지션과 스케일 맞추기 (0) 2023.08.12 내일배움캠프 4일차 TIL - 프로젝트 발표 (0) 2023.08.11 내일배움캠프 2일차 TIL - UGUI로 게임, 결과 UI 만들기 (0) 2023.08.09 내일배움캠프 1일차 TIL - UGUI로 메뉴, 로고 만들기 (0) 2023.08.08 유니티 깃 설정하기 (0) 2023.08.07