ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2023.12.21
    TIL 2023. 12. 21. 20:57

     

     

    첫 TIL이라니 설레네요.

    이렇게 쓰는게 맞는지 모르겠지만 열심히 써보겠습니다.

     


     

    사전캠프로 공부해둔 4번째 게임을 응용하여, 팀원들을 소개하는 프로그램을 만들려고 합니다.

    파트를 분배해서 따로따로 만들고 나중에 Git으로 합칠려고 하는데 어떻게 될지 모르겠네요.

     

    제가 맡은 파트는 '그림 매칭 성공 시, 팀원들 이름 표시 / 실패 시, 실패 문구 나오게하기' 입니다.

     

    먼저 매칭이 되었을 때 팀원들 이름을 표시해야하는게 우선이기 때문에 매칭 시 이름 나오게 만들어보겠습니다.

    string firstCardImage = firstCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name;
    string secondCardImage = secondCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name;

     

    Find()는 하위 오브젝트 중에서 같은 이름을 가진 오브젝트를 찾는 함수입니다.

    그 오브젝트의 컴포넌트를 가져오는 것이 GetComponent<>이고, <>안에는 사용될 컴포넌트 이름을 적으면 됩니다.

    그림은 SpriteRenderer안에 sprite가 보여주는 이미지의 정보를 가지고 있기 때문에 sprite의 이름을 가져와서 첫번째 카드와 두번째 카드의 이미지 이름을 가져와서 저장합니다.

     

    if (firstCardImage == secondCardImage)
    {
        Destroy(firstCard);
        Destroy(secondCard);
        
        //팀원 이름 표시 전에 시간 멈추기
        Time.timeScale = 0;
    
        //팀원 이름 표시
        nameCard.SetActive(true);
        nameCard.GetComponent<nameCard>().matchName(firstCardImage);
    }

     

    두 이미지의 이름을 비교하여 맞출 경우에는 미리 만들어둔 UI를 나타나게 만들어줍니다.

    처음에는 보여줘서는 안되기 때문에 SetActive는 false 상태로 있게 됩니다.

    그렇기 때문에 SetActive를 true로 만들어줘서 보여주는데! 여기서 멤버들이 다 다른 사람들이기 때문에(당연히!) 큰 틀이 되는 캔버스는 바로 SetActive(true)로 만들어주고, 이미지에 따라 나오는 내용이 달라지게 만들어줍니다.

    이미지 이름이랑 나오는 캔버스 이미지 이름을 같게 만들어서 찾기 편하게 만들어주었습니다.

    마찬가지로 GetComponent에서 nameCard.cs에 있는 함수인 matchName을 불러서 사용해줍니다.

     

    public void matchName(string name)
    {
        transform.Find(name).gameObject.SetActive(true);
        n= name;
    }

     

    matchName는 만들어준 함수로 string name을 받습니다.

    받은 name에 맞는 오브젝트를 찾아서 SetActive(true)로 만들어줘서 맞는 설명이 나올 수 있도록 해줍니다.

     

    string n = name을 한 이유는 처음에 나온 설명이 겹쳐서 나오기 때문에 다시 SetActive(false)로 해줘야합니다.

    void nonmatchName(string name)
    {
        transform.Find(name).gameObject.SetActive(false);
    }
    public void ClickName()
    {
        gameObject.SetActive(false);
        nonmatchName(n);
        Time.timeScale = 1f;
    }

     

    그래서 전역변수 n에 받아둔 name 값을 저장하여서 새로 만들어둔 함수에 다시 사용할 수 있도록 설정해주었습니다.

    나온 설명도 보이지 않아야하고, 큰 틀인 캔버스도 보이지 않아야하기 때문에 SetActive(false)로 설정해줍니다.

     

    위에 안적었지만 팀원들 소개를 보여주는 것이기 때문에 조금 긴 시간을 켜놔야할 것 같아서 timeScale = 0으로 해서 시간을 멈춰두었습니다. 따라서 팀원 소개가 사라지면 다시 시간이 흐를 수 있도록 timeScale = 1을 해서 초기화 시켜줍니다.

     

    소개글은 사진도 넣고 이름도 넣고 소개도 넣고 해야해서 큰 판넬을 준비했다면, 매칭이 실패되었을 때 실패 문구를 보여주는 것은 게임에 방해되지 않도록 작게 만들어줘야합니다. UI를 새로 만들고 새로운 함수를 만들어서 설정해주었습니다.

     

    void failCardInvoke()
    {
        Invoke("FailCard", 1f);
    }
    void FailCard()
    {
        failCard.SetActive(false);
    }

     

    else 즉, 매칭에 실패했을 경우 실패 문구를 SetActive(true)를 사용해서 보여주고, SetActive(false)를  1초 뒤에 수행되기 위해서 Invoke를 사용해줍니다.

    Invoke는 함수명을 받아서 정해진 시간 이후에 함수가 실행될 수 있게 만들어주는 함수입니다.

     

    이후에 팀원들 소개글이라던가 사진을 넣는 것은 코드가 아닌 유니티에서 하면 되기 때문에 코드 정리는 우선 여기까지!

     


     

     

    이미지를 아직 받은게 없기 때문에 UI는 간단하게만 설정해뒀고 오늘은 원하는 기능을 수행할 수 있도록 만드는 것에 집중했던 것 같습니다.

    처음에는 어떻게 만드는게 좋을까하다가 소개글은 자세히 봐야될 것 같아서 버튼 형식으로 구현하게 되었고, 실패는 마찬가지로 버튼으로 하려다가 그러면 일일이 누르는게 일이 될 것 같아서 따로 구현하게 되었습니다.

     

    간단한 것이지만 처음에 어떻게 만들어야할지 고민하게 되네요.

    만들고보니 별것 아니네~ 싶지만 내일은 팀원들이 만든 코드랑 합쳐야해서 또 수정이 될 것 같습니다.

    'TIL' 카테고리의 다른 글

    2023.12.29 - 주석 단축키, 조건문, 배열, 컬렉션  (1) 2023.12.29
    2023.12.28  (0) 2023.12.28
    2023.12.27  (1) 2023.12.27
    2023.12.26  (1) 2023.12.26
    2023.12.22  (1) 2023.12.22
Designed by Tistory.