본문 바로가기

TIL

내일배움캠프 시작 TIL (미니 팀 프로젝트)

내용

오늘의 학습 키워드

  • color 클래스에 대해 알게 된 점이 있다. color 클래스는 각 색상 채널에 대해 0과 1사이의 부동 소수점 값을 받기 때문에 원하는 값에 255를 나눠줘야 원하는 결과를 얻을 수 있다.

오늘 학습한 내용

  • 팀원 소개 카드게임 - 한 번씩 뒤집은 카드는 색을 다르게 표시하기 (옅은 회색 등) 기능 추가
  1. 어떻게 기능을 추가할 것인지

    처음에는 UsedCard 함수를 만들어서 카운트가 0인 카드는 원래 색깔, 카운트가 1 이상인 카드는 색깔을 변경해보자고 생각했다.

  2. 진행과정

    카드에 clickCount값을 줘서 한 번 클릭한 카드는 값이 1씩 증가하도록 설정 - > clickCount의 값이 0일 때는 그대로 흰 색으로 1 이상일 경우 색상을 변경 -> UsedCard 함수 작성
public void UsedCard()
{	
	if (clickCount >= 1)
	{
    		gameObject.transform.Find("back").GetComponent<SpriteRenderer>().color = new Color(180 , 180 , 180 , 255);
	}
}



카드를 클릭 -> 카드 오픈 되면 카운트가 1씩 증가하도록 openCard 함수 끝에 clickCount++; 추가 -> 게임 매니저의 isMached함수에서 일치하지 않을 경우 closeCard함수 작동전에 색이 변하면되니 그 위에 적용하면 된다고 생각함.
else구문에 firstCard.GetComponent <card>().UsedCard(); secondCard.GetComponent<card>().UsedCard(); 추가

 

작동이 안됌. -> 그러면 함수를 작성하지 않고 게임매니저의 퍼스트카드, 세컨드카드에서 색상을 변경하자고 생각함.

firstCard.GetComponent<SpriteRenderer>().color = new Color(180, 180, 180, 255);
secondCard.GetComponent<SpriteRenderer>().color = new Color(180, 180, 180, 255
=> 스크립트 상 오류는 안뜨는데 유니티에서 게임을 실행하면 에러가 발생함. card(Clone) 오브젝트의 스프라이트 렌더러를 찾을 수 없음) 

 

카드의 back을 찾아서 스프라이트 렌더러 컬러값을 바꾸자고 생각함.
firstCard.transform.Find("back").GetComponent<SpriteRenderer>().color = new Color(180, 180, 180, 255);
secondCard.transform.Find("back").GetComponent<SpriteRenderer>().color = new Color(180, 180, 180, 255);
으로 변경 =>  색이 변하지 않음.

 

구글링해보니 color 클래스는 각 색상 채널에 대해 0과 1사이의 부동 소수점 값을 받기 때문에 원하는 값에 255를 나눠줘야 원하는 결과를 얻을 수 있다는 내용을 발견하고 수정함.

firstCard.transform.Find("back").GetComponent<SpriteRenderer().color = new Color(180 / 255f, 180 / 255f, 180 / 255f, 255f);
secondCard.transform.Find("back").GetComponent<SpriteRenderer().color = new Color(180 / 255f, 180 / 255f, 180 / 255f, 255f);

 

  3. 최종코드

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();
        audioSource.PlayOneShot(match);

        int cardsLeft = GameObject.Find("cards").transform.childCount;
        if (cardsLeft == 2)
        {
            
            Invoke("gameEnd", 1.0f); 
        }
    }
    else
    {
    	//추가한 부분
        firstCard.transform.Find("back").GetComponent<SpriteRenderer>().color = new Color(180 / 255f, 180 / 255f, 180 / 255f, 255f);
        secondCard.transform.Find("back").GetComponent<SpriteRenderer>().color = new Color(180 / 255f, 180 / 255f, 180 / 255f, 255f);

        firstCard.GetComponent <card>().closeCard();
        secondCard.GetComponent<card>().closeCard();
    }

    firstCard = null;
    secondCard = null;

}

오늘의 회고

  • 가야 할 길이 멀고 정말 힘들겠다는 생각이 들었다. 한 주 동안 미니 프로젝트를 진행할 팀이 구성되었는데 나머지 팀원들은 모두 관련 분야에 경험이 있는 것 같아서 팀에 조금이라도 도움이 되려면 정말 노력해야 겠다는 생각이 들었다.

 

  • 미니 프로젝트를 진행하면서 프로젝트에 필요한 기능들을 각각 파트를 맡아 진행하기로 했고 [한 번씩 뒤집은 카드는 색을 다르게 표시하기 (옅은 회색 등)] 를 맡아서 진행했다.(제일 쉬워보여서 골랐다.....)

 

  • 함수로 만들어서 적용하던 ismached에서 일치하지 않은 카드의 색상을 변경하던 둘 다 적용은 된다. 그런데 함수를 작성할 경우 card.cs에 필드값도 추가해야 하고 void update는 프레임마다 함수를 불러야하므로 2번째로 한 방법을 적용하는게 맞는 것 같다.

 

내일 할 일

  • 아침 팀 회의
  • Git특강 듣기
  • 미니 프로젝트 추가 기능 구현하기 - firstCard 고르고 5초 간 카운트 다운