내일배움캠프 Unity 2일차 TIL

2024. 4. 16. 20:48Unity/내일배움캠프

본격적으로 첫주차 미니프로젝트에서 코드를 구현하고 테스트를 하는 작업을 진행하였습니다. 첫주차이니만큼 난이도가 높지 않았습니다. 내일 있을 깃허브 강의 후 코드를 병합하는 과정에서 조금 더 수정하고 팀원들간의 스크립트를 조율해야 할 것 같습니다.

 

목차

    1. 미니프로젝트에서 맡은 작업
    2. 코드구현 및 설명
    3. 테스트

     


    미니프로젝트

     

    게임개발종합반 4주차를 기준으로 구현을 추가하는 것이 이번 미니프로젝트 입니다.


    미니프로젝트에서 맡은 작업

    • 필수 매칭 성공 시, 팀원의 이름 표시 / 실패 시 실패 표시 (종료 시 끝! 나타나는 것처럼)
    • 실패할 때 마다 시간 감소 효과 넣어보기

     

    코드구현 및 설명

    1) 매칭 성공 시 , 팀원의 이름을 표시/ 실패 시 실패 표시

    Canvas에 "팀원의 이름" 혹은 "실패"를 표현해줄 NameTxt 오브젝트를 만들어 넣었습니다.

    GameManager.cs에서 해당 NameTxt를 전달받습니다.

    //GameManager.cs
    public Text NameTxt;

    매칭 성공관련해서는 GameManager.cs에 있는 Matched() 함수를 통해 관리하고 있어 해당 코드를 수정하여 성공 혹은 실패 여부에 따라 NameTxt에 담길 text내용을 바꾸어 주면 됩니다.

     

    먼저 NameTxt에 담아줄 Text를 고르는 함수를 만들어줍니다. Board.cs에서 카드를 배열의 인덱스값 {0,0,1,1,....,7}으로 관리하고 있기 때문에 해당 인덱스 값을 기준으로 SettingText()함수를 만듭니다. 팀원은 5명이고 인당 2장 즉 2개의 인덱스를 사용하기 떄문에 총 10가지 경우의 수가 필요합니다.

    void SettingNameTxt()
    {
        switch (firstCard.idx)
        {
            case 0:
                NameTxt.text = "김창연";
                break;
            case 1:
                NameTxt.text = "김창연";
                break;
            case 2:
                NameTxt.text = "박성준";
                break;
            case 3:
                NameTxt.text = "박성준";
                break;
            case 4:
                NameTxt.text = "박신환";
                break;
            case 5:
                NameTxt.text = "박신환";
                break;
            case 6:
                NameTxt.text = "이서영";
                break;
            case 7:
                NameTxt.text = "이서영";
                break;
            case 8:
                NameTxt.text = "윤정빈";
                break;
            case 9:
                NameTxt.text = "윤정빈";
                break;
    
        }
    }

    10가지 Switch-Case문을 만들어 카드의 인덱스 값에 따라 NameTxt에 담길 이름을 넣었습니다.

    //GameManager.cs
    public void Matched()
    {
        if(firstCard.idx == secondCard.idx)
        {
            audioSource.PlayOneShot(clip);
            firstCard.DestroyCard();
            secondCard.DestroyCard();
            cardCount -= 2;
            SettingNameTxt(); //맞추면 해당 인덱스 이름을 세팅
            NameTxt.color = Color.white;
            if(cardCount == 0)
            {
                GameOver();
            }
        }
        else
        {
            NameTxt.text = "실패!";
            NameTxt.color = Color.red;
            time += 1f; //실패시 시간증가
            IncreaseTime.SetActive(true); //시간증가를 표현하는 텍스트 활성화
            Invoke("TxtControl", 0.5f); //인보크를 통해 0.5초만에 시간증가 텍스트를 지워준다.
            firstCard.CloseCard();
            secondCard.CloseCard();
        }
        firstCard = null;
        secondCard = null;
    }

     

    if문은 매칭이 성공시에 실행되는 구간이기 때문에 해당 구문에 SettingNameTxt()함수를 실행시켜 NameTxt.text를 이름으로 바꿔주고 색깔은 Color.White로 나타내줍니다.

    else 문은 매칭이 실패했을때로 text를 "실패"로 만들고 Color.red로 바꿈으로써 강조하여 표현했습니다. 실패시 시간 감소보다 시간을 증가시켜 보다 빠르게 최대시간에 다가가게 설계했습니다.

    그리고 IncreaseTime이라는 시간증가를 표현하는 텍스트를 활성화 시켜 플레이어가 시간이 증가됐다는것을 시각적으로 볼 수 있게 하였습니다.

    테스트

     

     

    올바르게 작동한다.

     

     


     

    마무리

    2일차를 하면서 느낀점은 12시간을 온전히 집중해서 공부를 하는것은 쉬운일이 아닌거같다. 적절히 쉬면서 공부하는게 길게 보는게 맞다는 생각이 든다. 내일은 깃허브 관련해서 튜터님이 강의를 해주시는데 이번기회에 개발자의 중요한 툴인 깃허브를 다뤄보면서 잘 배울수있도록 할 것이다.

    'Unity > 내일배움캠프' 카테고리의 다른 글

    내일배움캠프 Unity 3일차 TIL  (0) 2024.04.17