부트캠프/본캠프

[내일배움캠프_2025JUN30]팀 카드 맞추기 게임 + Git

Young_A 2025. 6. 30. 21:20

목차

    팀 카드 맞추기 게임 + Git

     

    오늘부터 본캠프 시작!

    시간표를 보니 거의 매주 ZOOM으로 발제를 진행하고, 챕터마다 새로운 팀에 배정되어 팀으로서 진행을 하게 되는 것 같다.

    오늘은 OT, 발제, Git 특강 등으로 약 3~4시간을 보내고 남은 시간동안 팀 카드 맞추기 게임을 제작했다.

    사전캠프 4주차 강의와 똑같이 진행하되, 르탄이가 아닌 팀원들의 이미지를 이용하고, 팀원을 소개하는 카드를 보여주어야한다.

     

    Git을 이용하면서 분업을 어떻게 해야할지 막막해서 튜터님께 물어보니

    프로젝트 규모가 워낙에 작아서 간섭되는 부분이 많기 때문에,

    Title Scene, Main Scene, Ending Scene으로 나눠서 1, 2, 1명씩 진행하고 총괄로 진행하는 1명. 이렇게 일단 진행해보라고 하셨다.

    어떻게 잘 진행이 되고 있긴하지만, 그래도 팀원들 중 기존에 강의를 따라가며 완성한 게임을 가지고 시작했으면 어땠을까 싶다.

    구현 도전하고 싶은 기능들이 많다.


    Unity에서 Random 숫자 뽑기

    C#의 Random.Next() 대신 Random.Range()를 사용한다.

    Random.Range(min, max)

    int는 max 미포함, float은 max 포함 생성된다.


    멤버 중복 없이 이미지 선택하기

    르탄이 카드 게임처럼 마구잡이로 id를 선택한다면 게임에 출연하지 못하는 팀원이 발생할 수도 있으므로

    최소 한 장의 이미지를 뽑고나서 나머지들 중에 중복 없이 랜덤으로 추가 이미지를 선택하는 방법을 사용했다.

    비슷한 상황인 숫자야구에서 List를 유용하게 써먹은 경험 때문에 바로 List를 채택했다.

    int numOfPair = 8; //확장성 고려
    List<int> cardIds = new List<int>();
    
    //각 멤버들의 1번 이미지를 1 Pair 넣어줌.
    for (int i = 0; i < teamMembers.Count; i++)
    {
        cardIds.Add(i*3);
        cardIds.Add(i*3);
    }
    
    //cardIds의 갯수가 필요한 카드 갯수에 도달할때까지 반복
    while(cardIds.Count < numOfPair * 2)
    {
        int randomNumber = Random.Range(0, teamMembers.Count * 3); //멤버마다 이미지 3장
    
    	//중복 체크 후 Add
        if(!cardIds.Contains(randomNumber))
        {
            cardIds.Add(randomNumber);
            cardIds.Add(randomNumber);
        }
    }

    List 셔플

    List 또한 배열처럼 Linq로 간단히 리스트를 셔플할 수 있다.

    cardIds = cardIds.OrderBy(x => Random.value).ToList();

    그러나 잘 안 섞이는 느낌이 든다!

    시간이 남으면 Fisher-Yates 알고리즘으로 교체할 생각이다.


    이미지파일 매칭 시스템

    이미지파일은 Name_1, Name_2, Name_3과 같이 멤버마다 3장씩 준비되어있다.

    숫자로만 관리해도 되겠지만, 그럴경우 어떤 숫자가 어떤 인물과 관련된 파일인지 대해서 따로 합의하는 documenting이 필요할 것 같아서 직관적이지 않다고 생각했다.

    나중에 한 사람의 이미지를 변경할때, Resources 폴더만 보고 변경할 수 있다는 장점이 생길 것 같았다.

     

    public void Setting(int number)
    {
        idx = number;
        string imageFile = teamMembers[idx/3] + "_" + (idx%3+1);
        //teamMembers는 List<string>이고, 각 멤버들의 이름이 영문으로 입력되어있다.
        //이름 + "_" + 번호 //이름: idx/3 몫 //번호: idx%3 나머지(0, 1, 2) +1
        frontImage.sprite = Resources.Load<Sprite>(imageFile);
    }

    VS code 한글 깨짐 현상 (�) 해결

    Git으로 받은 코드가 EUC-KR 혹은 ANSI 인코딩일 경우,

    VS Code에서 reopen with Encoding > Korean (EUC-KR)로 열고

    Save with Encoding > UTF-8로 저장해야 정상 표시된다.


    파일 이름 변경 후 이미지 로드 안됨

    임시로 붙여진 이름의 파일이 있었다.

    구현을 다 끝내고 TIL 작성하면서, 제대로 이름을 붙이기 위해 파일 이름과, List 내의 "name" string 값을 수정해주었다.

    복붙으로 입력/수정한 거라 철자가 틀릴 일도 없었을 텐데, 심지어 두세번 더 확인했는데도 불구하고, 수정된 파일만 로드되지 않았다.

    수동으로 넣으면 잘 넣어지는 걸 봐서는 파일 문제가 아니었음. Sprite(2D and UI), single 다 확인해봐도 문제가 없었다.

    Debug.Log로 파일명 찍어봐도 문제가 없었다.

    캐시 같은 것 때문에 그런가 싶어서

    1. 에디터 재시작

    2. 이미지파일 삭제 후 다시 붙여넣기 (meta 파일 재생성 유도)

    3. Assets/Resources 우클릭 후 강제로 Reimport

    다 했는데도 불구하고 안되서 결국 프로젝트 폴더 내의 /Library 폴더를 삭제한 뒤 다시 열었더니 된다!

     

    + MainScene말고 Title Scene에서 시작해야지~ 하고 다시 시작했더니 또 안됨~ 환장하것네. 내일 할일에 추가.


    느낀점

    본캠 12시간은... 힘들다...

    방에 에어컨은 없는데 PC본체랑 Laptop이랑 둘 다 가동 중이니 엄청 더움 + 마이크로 시끄러운 소음 들어갈까봐 문 닫음 + 이 방에는 에어컨 선풍기 없음 = 3콤보로 더위를 참아가며 진행했다.

     

    팀원들끼리 소통이 더 필요할 것 같아서 점심시간 시작 전, 저녁시간 시작 전, 그리고 끝나기 전  이렇게 15분씩 세 번 짧은 미팅을 가져보자고 건의했고 받아들여졌다.


    내일 학습 할 것은 무엇인지

    팀원들과 게임 개발 방향에 대해서 짧은 기획, 분업 태스크 구분을 먼저 진행할 예정이다.

    그리고 고친줄 알았던 Resources를 확인해봐야지.

    그리고 데일리스크럼을 빼먹은 것 같은데 오늘치까지 내일 진행해야겠다.