내일배움캠프(Unity)
내일배움캠프 게임개발(Unity) 사전캠프 15일차 TIL
빵어
2023. 10. 20. 21:53
같은 조의 어떤 분이 사람을 모아 사전캠프 기간동안 게임을 하나 만들자고 제안하셨다.
각자 카드 게임을 만들어 하나의 어플에 모으는 식으로 제작한다.
먼저 유니티 버전과 해상도를 맞추고 시작했다.
1. 사천성 만들기
1.1 카드 여러개 생성하기
card를 담을 List를 만들었다.
List<GameObject> cardList;
...
cardList = new List<GameObject>();
GameObject card = Instantiate(cardPrefab, cardPosition, Quaternion.identity);
cardList.Add(card);
...
그런 다음 카드의 개수를 x와 y로 받아 그 수 만큼 자리 맞춰 생성해주면

1.2 카드 짝 맞춰 생성하기
카드는 생성되었지만 내가 만들 게임은 짝 맞추기 게임이라, 같은 카드가 적어도 2개는 있어야 한다.
또, 모든 카드의 짝이 바로 옆에 있어서는 안된다.
그렇기 때문에 같은 색깔의 카드를 연속해서 2장씩 만들고, 카드 위치를 뒤죽박죽 바꿔줄 것이다.(shuffle 구현)
void ShuffleCards()
{
for (int i = cardList.Count - 1; i > 0; --i)
{
int randomNum = Random.Range(0, i);
Color tempColor = cardList[i].GetComponent<SpriteRenderer>().color;
cardList[i].GetComponent<SpriteRenderer>().color
= cardList[randomNum].GetComponent<SpriteRenderer>().color;
cardList[randomNum].GetComponent<SpriteRenderer>().color = tempColor;
}
}


2. 따로 찾아본 내용
2.1 Random클래스
Random 클래스를 사용하다가 문제점이 생겼다.
Random random = new Random();
구글링해서 찾은 이 코드에서 에러가 났었는데,
Random은 UnityEnigne에도 있고 System에서도 있는 클래스라 어디에 속해있는 Random을 사용할 것인지 명시를 해줘야 한다.
위 코드는 System의 Random을 사용한 것이라
System.Random random = new System.Random();
이렇게 명시를 해줘야 한다.
2.2 ArrayList와 List
ArrayList는 여러 자료형을 담을 수 있지만
List는 지정해준 특정 자료형만을 담을 수 있다.
2.3 GameObject간 대입 불가 문제
GameObject temp = cardList[i];
cardList[i] = cardList[randomNum];
cardList[randomNum] = temp;
위 코드의 GameObject는 바뀌지 않는다.
Color tempColor = cardList[i].GetComponent<SpriteRenderer>().color;
cardList[i].GetComponent<SpriteRenderer>().color
= cardList[randomNum].GetComponent<SpriteRenderer>().color;
cardList[randomNum].GetComponent<SpriteRenderer>().color = tempColor;
이런식으로 바꾸고 싶은 부분만 가져와서 바꾸는 것으로 문제를 해결했다.
GameObject끼리 바뀌지 않는 이유는 대충 알겠지만 명확히 문서로 나타낸 곳이 없다.
나중에 찾아볼 것