ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 내일배움캠프 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를 만들어보고 싶다

Designed by Tistory.