Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발 달리기

내일배움캠프 5일차 - 팀 프로젝트 시작 본문

Unity

내일배움캠프 5일차 - 팀 프로젝트 시작

옹즤 2025. 4. 11. 22:18

1. 오늘 진행한 내용

- 미니 프로젝트 팀별 발표 참여

- TIL 특강

- 우리팀 미니 프로젝트 추가 기능 제작

- GitHub와 WinMerge 연결 시도

 


2. 학습하며 겪었던 문제점 & 에러

오늘 GitHub와 WinMerge를 연동하여 브랜치 머지 전 충돌되는 파일이 있으면 WinMerge를 띄워서 파일 비교 후
실시간으로 수정이 가능하게 하여 최종 머지를 진행할 수 있게 하려고 했다.
결과적으로는 실패로 끝났다.

진행하면서 2가지 큰 문제게 맞닥뜨렸는데
3-way 방식으로 WinMerge를 사용할 경우 인자 인식쪽에 문제가 생겨 Merge 부분을 최종 반영하는게 아닌

Theirs 부분을 최종 반영했다.

그 때문에 2-way 방식으로 사용했으나 이번엔 Merge 창이 나오지 않아 해당 Merge 창의 내용이 반영됐다.

전체적으로 Git Bash에서 코드 사용하는 방법을 아예 모르는 채로 검색과 Gpt를 이용해서만 진행했는데

결과적으로는 대 실패였고 이것때문에 오늘 다른 공부를 할 시간을 3시간정도 날려먹었다.

남은거라곤 그냥 두 프로그램 호환성 안좋으니까 연동하지 마라이다.

 

이후 실제 GitHub 커뮤니티에서 WinMerge는 호환성이 좋지 않고 여러 버그 이슈가 있다는

여러 개발자들의 글들을 확인할 수 있었다.

좋은 경험이었다고 하기엔 날린 시간이 너무나 많아서 상실감이 매우 크다.


3. 주말에 학습 할 것은 무엇인지

각종 기능 실제로 만들어서 익혀보기

 

 

4. 팀 프로젝트 완료

 

using UnityEngine;
using UnityEngine.UI;
public class Stage2Hidden : MonoBehaviour
{
    public GameObject hidden;
    public Text myText;
    // Start is called before the first frame update
    void Start()
    {
        int stage = PlayerPrefs.GetInt("stage");
        if (stage == 2)
        {
            hidden.SetActive(true);
            myText.text = "20초 내로 4개의 짝을 맞춰라!";
        }
    }
    // Update is called once per frame
    void Update()
    { 
        if (GameManager.Instance.cardCount == 8 && GameManager.Instance.time > 20.0f)
        {
            myText.text = "히든 미션 성공!";
            PlayerPrefs.SetInt("Archive2", 1);
        }
    }
}

오늘은 히든 미션 코드를 짰다.
일단 stage 4의 히든 미션을 짰어야했는데 잘못 짜서 stage 2 기준으로 처음에 짜게 되었다.

코드 작성 자체에는 큰 시간이 걸리지 않았으나 몇가지 문제가 발생했다.

1. 히든 미션이 다른 스테이지에서도 발생함

2. stage 4가 기준이 아니었기에 히든 미션 기능이 의도대로 발동하지 않음

 

public class HiddenMissions : MonoBehaviour
{
    public Text myText;
    int stage;

    string[] mission = new string[4]
        {
            "동일한 카드를 3번 이상 뒤집지 않기",
            "40초 내로 4개의 짝을 맞춰라!",
            "카드 연속으로 4회 맞추기",
            "카드 짝 300회 맞추기"
        };

    string success = "히든 미션 성공!";
    string failure = "히든 미션 실패...";

    bool isMissionFail = false;

    const string matchCountTotal = "matchCountTotal";

    // Start is called before the first frame update
    void Start()
    {
        // 처음 켜는 것이라면 카운트 데이터 생성
        if (!PlayerPrefs.HasKey(matchCountTotal))
            PlayerPrefs.SetInt(matchCountTotal, 0);

        stage = PlayerPrefs.GetInt("stage");
        missionTextChange();
    }

    void Update()
    {
        // 4/11 밤 수정 : 해당 도전과제를 작업하신 팀원님의 프로필이 해금되게끔 하기 위해 달성 시 써주는 Archive0 와 Archive1을 맞바꾸었습니다.
        if (stage == 4 && !PlayerPrefs.HasKey("Archive0"))
        {
            // 제한 시간 내 4짝 이상을 맞춘 상태라면 업적 달성하고 텍스트 변경
            if (GameManager.Instance.time > 40.0f)
            {
                if (GameManager.Instance.cardCount < 24)
                {
                    PlayerPrefs.SetInt("Archive0", 1);
                    missionTextChange();
                }
            }
            // 제한 시간 내 카드를 24장 내로 줄이지 못하였다면 실패 알림으로 변경
            else 
            {
                SetFail();
            }
        }

        // 6스테이지에서 히든 미션을 성공하지 못한 상태로
        else if(stage == 6 && !PlayerPrefs.HasKey("Archive2"))
        {
            // 카드가 4짝 미만으로 남고, 체인이 0일 때
            if (GameManager.Instance.cardCount < 8 && GameManager.Instance.GetChain() == 0)
            {
                // 미션을 성공할 수 없기에 실패 문구 알림
                SetFail();
            }
        }
    }

    public void missionTextChange()
    {
        myText.text = "";
        if (stage == 2)
        {
            if (PlayerPrefs.HasKey("Archive1"))
                myText.text += success;
            else if (isMissionFail)
                myText.text += failure;
            else
                myText.text += mission[0];
        }
        if (stage == 4)
        {
            if (PlayerPrefs.HasKey("Archive0"))
                myText.text += success;
            else if(isMissionFail)
                myText.text += failure;
            else
                myText.text += mission[1];
        }
        if (stage == 6)
        {
            if (PlayerPrefs.HasKey("Archive2"))
                myText.text += success;
            else if (isMissionFail)
                myText.text += failure;
            else
                myText.text += mission[2];
        }

        Archive3_Text();
    }

    void Archive3_Text()
    {
        // 업적이 달성되지 않았다면
        if (!PlayerPrefs.HasKey("Archive3"))
        {
            // 다른 히든 업적이 있을 경우 한 줄을 띄우고
            if (myText.text != "")
                myText.text += "\n";

            // 업적 설명 (수행횟수/300) 
            myText.text += (mission[3] + " (" + PlayerPrefs.GetInt("matchCountTotal") + "/300)");

            // 각종 키 명칭,300도 변수로 바꿔놓고 싶었지만 시간 부족
        }
        else
        {
            // 다른 히든 업적이 있을 경우 한 줄을 띄우고
            if (myText.text != "")
                myText.text += "\n";

            // 업적 설명 (수행횟수/300) 
            myText.text += (mission[3] + " (달성)");
        }
    }

    // 미션 실패 때 호출
    // 해당 스테이지에서의 히든 미션 문구를 실패로 변경하여 플레이어에게 알림
    public void SetFail()
    {
        isMissionFail = true;
        missionTextChange();
    }

    // 카드 짝을 맞췄을 때 1씩 증가하는 카운터를 저장
    // 업적 달성 횟수를 넘으면 달성
    public void matchCountPlus()
    {
        int successStadard = 300; // 해당 수만큼 짝을 맞추면 업적 달성
        int plusCount = (PlayerPrefs.GetInt(matchCountTotal) + 1); // 맞춘 짝의 횟수 누적으로 1 증가
        PlayerPrefs.SetInt(matchCountTotal, plusCount); // 1증가한 짝 맞춘 횟수를 저장

        // 업적을 달성하면 약속한 값 넣어주기
        if (plusCount >= successStadard)
        {
            PlayerPrefs.SetInt("Archive3", 1);
        }

        // 변화에 따른 텍스트 변경
        missionTextChange();
    }
}

결과적으로는 다음과 같이 통합 코드가 짜여졌다.

팀원들이 각각 히든 미션 기능을 만든 것을 통합하여 팀장님이 최종적으로 코드를 정리했다.

이로써 전체적으로 카드 뒤집기 게임 자체는 잘 동작하고

히든 미션도 마지막에 추가해서 어느정도 의도대로 잘 움직이게 되었다.

 

이번 프로젝트를 진행하며 좋았던 점과 아쉬운 점을 꼽자면

일단 좋았던 점에 있어서는 오늘 프로젝트 팀의 발표를 보면서도 느꼈는데

특출나게 잘 준비했던 팀을 제외하곤 비슷비슷해서 전혀 주눅 들 필요가 없었다.

우리팀의 작품도 충분히 프로젝트 팀처럼 발표를 할 수 있을 만큼 여러 기능이 들어있었다.

 

아쉬운 점은 조금 많은데

첫번째로 다른 프로젝트 팀에 비해 이틀 늦게 시작한 부분이 제일 아쉬웠다.

두번째는 이 프로젝트에 집중하느라고 팀 스크럼 이틀치를 날렸다. (개인적으로는 재미있던 시간이라)

세번째는 시간이 부족해서 신박한 기능을 넣고 기획을 하지 못했다.

팀원이 한명만 더 있었으면 더 좋은 기능을 만들 수 있을텐데라는 아쉬움도 남는다. (4명이었음)

다음 프로젝트는 꼭 만족할 수 있을 만한 결과를 내고싶다.