내용
오늘의 학습 키워드
- color 클래스에 대해 알게 된 점이 있다. color 클래스는 각 색상 채널에 대해 0과 1사이의 부동 소수점 값을 받기 때문에 원하는 값에 255를 나눠줘야 원하는 결과를 얻을 수 있다.
오늘 학습한 내용
- 팀원 소개 카드게임 - 한 번씩 뒤집은 카드는 색을 다르게 표시하기 (옅은 회색 등) 기능 추가
- 어떻게 기능을 추가할 것인지
처음에는 UsedCard 함수를 만들어서 카운트가 0인 카드는 원래 색깔, 카운트가 1 이상인 카드는 색깔을 변경해보자고 생각했다. - 진행과정
카드에 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초 간 카운트 다운
'TIL' 카테고리의 다른 글
내일배움캠프 6일차 TIL (C# 문법 종합) (0) | 2023.12.29 |
---|---|
내일배움캠프 5일차 TIL (미니 팀 프로젝트) (0) | 2023.12.28 |
내일배움캠프 4일차 TIL (미니 팀 프로젝트) (0) | 2023.12.27 |
내일배움캠프 3일차 TIL (미니 팀 프로젝트) (2) | 2023.12.26 |
내일배움캠프 2일차 TIL (미니 팀 프로젝트) (0) | 2023.12.22 |