본문 바로가기

TIL

[TIL] 23년 12월 21일 - 1일차- 내일배움캠프 Unity 3기를 시작하는 마음

 

  오늘은 대학 졸업 전 마지막 기말 시험이 있던 날로, 그래도 결석을 예상했으나 생각보다 일찍 집에 올 수 있었기 때문에 7시 이후부터 뒤늦게 참가하게 되었다. 그렇기 때문에 오늘은 절대적으로 공부 시간이 부족한 날이기에 첫 일지는 앞으로의 다짐에 가깝게 남기고자 한다.

 

   뒤늦게 필요한 정보를 채우고 내용을 복기 했다. 첫날인 만큼 작업을 진행하기 보다는 서로를 알아보고 본격적인 작업에 들어갈 준비를 하는 과정이었다. 앞으로 해야 할 과제는 팀원 소개 카드 게임 만들기로 이는 스파르타 강의 4주차를 각자 복습하고 22일 역할 분담 후 진행하기로 결정한 후 오늘은 마무리 되었다.

 

오늘의 메인 주제 :

 

   지금까지는 내가 어떤 삶을 살아왔고, 어떤 계기로 개발자 진로와 내일배움캠프를 결심했고, 앞으로 어떻게 이 과정에 임할지 앞으로의 다짐을 남긴다면,

 

   나는 어릴적부터 창작을 좋아했고 특히나 게임을 좋아했다. 그렇지만 게임이라는 분야로 진로로 선택하게 되는데 까지는 많은 고민이 있었다. 쉽사리 개발자라는 직업을 생각하기도, 말하기도 어려웠던 시절이지만 초등학교 때부터 롤모델을 말하라면 블리자드의 크리에이티브 부사장이던 '크리스 멧젠'을 말하곤 할 정도로 개발자에 대한 관심은 많았다.

   개발자라는 확고한 목표를 가지게 된 건 대학교에 진학하게 될 때 미래에 대한 진지한 고민을 하며 '나는 내가 해보고 싶은 일에 도전 하겠다'라는 마음을 다잡게 되면서 였다.

 

   하지만 코딩에 대한 막연한 무서움이 있었고 내 재능은 기획이 메인에, 취미로 하는 그림에 가깝다고 생각해왔다.

그렇기에 대학교 진학도 코딩과 관련된 것이 아닌 경영학과 였고 이러한 경영학도로서의 경험이 기획에 도움이 될 것이란 생각을 하면서 다니게 되었었다.

   중학교 때 친구들끼리 결성한 게임 개발 팀에서도 비록 프로젝트가 흐지부지 해졌지만 아트를 담당했었고 이렇게 취미로 그리던 그림으로 다름아닌 올해의 게임, 라리안 스튜디오의 '발더스 게이트 3'의 커뮤니티 이모티콘 외주를 맡기도 하면서 좋은 경험들을 쌓을 수 있었고 이 경험은 더욱 더 나를 코딩보다 다른 곳에 관심을 가지게 하였다. 대학에서 게임 개발 동아리에 들어가서도 기획으로서 들어가 동아리 총무로 활동 하는 등, 개발자는 꿈 꾸면서도 코딩은 멀리하는 생활을 했던 것이다. 

 

   그렇지만 취업을 위한 포트폴리오를 만들기 위해 프로젝트를 결성, 실질적인 '개발'이라는 활동에 들어가게 되면 항상 내 코딩에 부족함이 걸림돌이 되었다고 느껴왔다. 무언가 업무를 지시하는 데에도 코딩에 대한 이해도가 부족해 그 명확도가 떨어졌고, 프로그래머들과 의사소통에 어려움이 많았다. 이러한 현실에 벽을 만나게 되면서 더 이상 코딩을 피할 수 없다고 느꼈고 이제는 코딩에 대해 공부를 해야겠다는 다짐을 하게 되었다. 마침 프로젝트를 진행하던 친구와 동아리 선배의 추천으로 내일배움캠프에 대해 알게 된 것이다. 마침 빡세게 공부할 수 있는 환경을 갈구하던 나에게는 매우 좋은 기회로 들렸고 이번에 Unity 3기에 친구와 같이 신청하게 되었던 것이다.

 

   이처럼 이미 현실의 벽을 느껴 필요성을 몸소 체험한 뒤 참여한 캠프인 만큼, 또한 취업을 위해 중요한 과정이라고 여기는 만큼, 대충 참여할 생각은 없다. 비록 꺼리던 코딩이라는 것이 갑자기 마음을 다잡는다고 잘하게 된다고 생각하지도 않기 때문에 많은 사람들의 도움도 받게 될 것이라 생각한다. 그런만큼 주변의 도움이 헛되지 않도록 열심히 하고자 한다.

 

오늘을 마무리 하며 : 

 

   새로 만난 조원분들이 친절한 것 같아 1차적으로 크게 안심했다. 아직 절망적인 조별과제들의 충격이 가시지 않은 갓 졸업생에겐 이것 만으로도 기쁜 일이다. 본격적으로 진행되는 수업에 부담이 느껴지면서도 드디어 시작이라는 기대감이 크다. 학습 과정을 잘 마치고 꿈에 그리던 훌륭한 개발자가 될 수 있었으면 한다.

 

4주차 강의 복기를 하며 중요한 코드들을 이후 참고를 위해 일부 남겨 놓기로 했다.

//카드 위치를 잡고 카드를 생성 
//리스트를 만들고 이를 랜덤하게 섞기

void Start()

{
int[] rtans = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 };

    rtans = rtans.OrderBy(item => Random.Range(-1.0f, 1.0f)).ToArray();
    for (int i = 0; i < 16; i++)
    {
        GameObject newCard = Instantiate(card);
        newCard.transform.parent = GameObject.Find("cards").transform;
        float x = (i / 4) * 1.4f - 2.1f;
        float y = (i % 4) * 1.4f - 3.0f;
        newCard.transform.position = new Vector3(x, y, 0);
    }
}

 

   public void isMatched() // 게임매니저에서 카드 매칭 코드
    {
        string firstCardImage = firstCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name;
        string secondCardImage = secondCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name;

        if (firstCardImage == secondCardImage)
        {
            firstCard.GetComponent<card>().destroyCard();
            secondCard.GetComponent<card>().destroyCard();

            int cardsLeft = GameObject.Find("cards").transform.childCount;
            if (cardsLeft == 2)
            {
                endTxt.SetActive(true);
                Time.timeScale = 0.0f;
            }
        }
        else
        {
            firstCard.GetComponent<card>().closeCard();
            secondCard.GetComponent<card>().closeCard();
        }

        firstCard = null;
        secondCard = null;
    }

 

// 1초 뒤 같은 카드는 파괴하고 다른 카드는 다시 뒤집기
//게임매니저에서 destroyCard()를 부르기 때문에 Invoke에 텀을 1초 두어야 하는 조건

public void destroyCard()
{
    Invoke("destroyCardInvoke", 1.0f);
}

void destroyCardInvoke()
{
    Destroy(gameObject);
}

public void closeCard()
{
    Invoke("closeCardInvoke", 1.0f);
}

void closeCardInvoke()
{
    anim.SetBool("isOpen", false);
    transform.Find("back").gameObject.SetActive(true);
    transform.Find("front").gameObject.SetActive(false);
}