-
짝 맞추기 카드 만들기, 카드 섞기, 리소스를 사용한 스프라이트 설정Unity/제로부터 구현 2023. 11. 28. 20:48728x90
오늘의 구현
짝 맞추기 카드 만들기
카드 섞기
스프라이트 설정하기.
1. 짝 맞추기 카드 만들기
- 보드판의 크기 만큼의 카드를 만들고, 0,0(정중앙) 을 기준으로 카드를 만들 것 입니다.
- 0,0 을 기준으로 카드를 배열할 것이기 때문에 가장 첫번째 카드는 정중앙으로부터 -보드판/2 만큼 떨어져 있습니다. 만들어진 게임오브젝트의 중심점이 보드의 왼쪽 아래 모서리의 위치해 있기 때문에 만들어진 게임오브젝트 또한 중심점을 정중앙으로 만들기 위해 0.5를 더해줍니다.
- 카드들을 보기 쉽게 서로 간격을 두고 만들기 위해 , outLinePercent(0~1 사이)라는 변수를 받고 게임 오브젝트의 크기를 1로 고정 한 다음 1에서 퍼센트를 뺀값을 곱해주고, 게임 오브젝트의 크기를 곱해줍니다.
public void SetBoard() { prefebIdxs = new int[boardSize * boardSize]; Shuffle(); for(int i = 0; i< boardSize; i++) { for(int j = 0; j< boardSize; j++) { CreateNewCard(i, j); } } } GameObject CreateNewCard(int _x,int _y) { int idx = queue.Dequeue(); float x = -boardSize / 2f + _x + 0.5f; float y = -boardSize / 2f + _y + 0.5f; GameObject newCard = Instantiate(card[idx], new Vector3(x,y,0), Quaternion.identity); newCard.GetComponent<Card>().SetCoord(_x, _y); newCard.transform.localScale = Vector3.one * (1 - outLinePercent) * 1.3f; newCard.transform.parent = board; return newCard; }
2. 카드섞기
- 짝 맞추기 카드는 카드들이 서로 짝을 이뤄야 하기 때문에 배열을 {0,0,1,1,2,2,3,3,4,4} 이런식으로 배열을 만든뒤 배열을 섞고 카드를 만들때 섞은 배열을 이용해 카드를 만들 것 입니다.
- spriteMaxCount 는 만들어 놓은 스프라이트 이미지 갯수 입니다. 배열 숫자가 만들어 놓은 스프라이트 개수를 넘어가지 않게 % 해줍니다.
- System.Linq; 를 추가하고 prefebIdxs = prefebIdxs.OrderBy(item => Random.Range(-1.0f, 1.0f)).ToArray(); 코드를 사용하면 아주 쉽게 배열을 랜덤하게 정렬 시킬 수 있습니다. prefebIdxs의 배열을 Random.Range(-1.0f, 1.0f) 기준으로 정렬 시킨후 ToArray() 로 반환합니다.
void Shuffle() { for(int i = 0; i< boardSize * boardSize; i++) { prefebIdxs[i] = (i / 2) % spriteMaxCount; } //prefebIdxs = prefebIdxs.OrderBy(item => Random.Range(-1.0f, 1.0f)).ToArray(); for (int i = 0; i < boardSize * boardSize; i++) { int randomIdx = Random.Range(i, boardSize * boardSize); int term = prefebIdxs[randomIdx]; prefebIdxs[randomIdx] = prefebIdxs[i]; prefebIdxs[i] = term; } queue = new Queue<int>(prefebIdxs); }
3.리소스를 이용한 스프라이트 설정
- Resources 폴더를 만들어 이미지들을 저장합니다.
- 위에서 만든 배열을 이용해 이미지를 가져올 것이기 때문에 이미지 이름 뒤에 숫자를 넣어줍니다. ex)name1, name2,name3
- 위에 만든 배열을 큐로 만들어 하나씩 가져와 스프라이트 이름을 만들고
- transform.Find 로 이미지를 넣을 게임 오브젝트를 찾아 Resources.Load<Sprite>()로 스프라이트를 설정해 줍니다.
GameObject CreateNewCard(int _x,int _y) { int idx = queue.Dequeue(); string name = "name" + idx.ToString(); float x = -boardSize / 2f + _x + 0.5f; float y = -boardSize / 2f + _y + 0.5f; GameObject newCard = Instantiate(card, new Vector3(x,y,0), Quaternion.identity); newCard.GetComponent<Card>().SetCoord(_x, _y); newCard.transform.Find("Front").GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>(name); newCard.transform.localScale = Vector3.one * (1 - outLinePercent) * 1.3f; newCard.transform.parent = board; return newCard; }
728x90'Unity > 제로부터 구현' 카테고리의 다른 글
같은 맵 계속 반복 시키기(3D). (0) 2023.12.01 1인칭 시점 구현하기 + 이동 (0) 2023.11.30 3D 플레이어 이동 구현(마우스로 방향전환, 키보드로 방향전환) (1) 2023.11.24 마우스 이동에 따른 물체 옮기기, PlayerPrefs를 이용한 최고 점수 저장 밑 불러오기 (0) 2023.11.23 GameManager(싱글톤) + CanvasGroup으로 UI 컨트롤 (1) 2023.11.22