게임 개발이 처음이어도 쉽게 배우는 모바일 게임 개발 4주차 03/28

정광훈(Unity_9기)·2025년 3월 28일

TIL (Today I Learned)

목록 보기
7/110

●씬 추가 구성 - 카드 만들기

MainScene에서 Create Empty로 Card를 만들고 그 안에 Square를 만들어 Front(앞), Back(뒤)을 만든다.
Front에 rtan0 이미지를 넣어주고 Back에는 흰배경에 '?'를 띄워준다.
↑이미지 크기를 설정하는 방법
1. 1번이미지 클릭 (2번은 이미지의 크기를 의미)
2. 3번은 2번의 이미지 크기와 똑같이 값을 입력하면 이미지가 1픽셀 정도의 크기가 된다. (4번이 Pixel)

-Back 설정
Back아래에 UI > Legacy > Text에 '?'가 출력되게 한다.![]
1번과 2번을 클릭 후 3번의 수치를 정해진 값으로 입력하고
텍스트가 잘 나오는지 확인하기 위해 4번을 눌러준다.
World Space상에 표시하기 위해 6번처럼 설정해준다.
최종적으로 5번처럼 카드 뒷면이 나오는 것을 확인할 수 있다.마지막으로 사진 아래에 Scale을 조절하면 전체적인 크기 조절이 가능하다.


●배치하기
반복문을 이용해 카드를 생성

→ x : 1을 4로 나눈 나머지 = 1
→ y : 1을 4로 나눈 몫 = 0
⇒ (1,0) 위치 ⇒ (1.4씩 곱해주면) ⇒ (1.4, 0) 위치

ex)
→ x : 7을 4로 나눈 나머지 = 3
→ y : 7을 4로 나눈 몫 = 1
⇒ (3,1) 위치 ⇒ (1.4씩 곱해주면) ⇒ (4.2, 1.4) 위치

카드를 생성하게 되면 화면 가운데 정렬이 아닌 좌측 하단카드 기준으로 정렬이 된다. 카드들의 위치를 movetool로 움직여 position 값을 확인하고 코드로 더하거나 빼준다.

<Board.cs>

void Start()
{
	for (int i = 0; i < 16; i++) // i가 16보다 작으면 계속 반복 -> 카드가 16개가 생성
    {
    GameObject go = Instantiate(card); // card 게임 오브젝트의 복제본(Clone)을 Board 밑에 생성 / 게임 오브젝트라는 자료형 변수로 저장
    go.transform.parent = cards;
    float x = (i % 4) * 1.4f - 2.1f; // 카드 위치의 x축 / 1.4를 곱하는 이유는 카드의 간격, 2.1을 빼는 이유는 화면 중앙에 배치하기 위함
    float y = (i / 4) * 1.4f - 3.0f; // 카드 위치의 y축
    go.transform.position = new Vector2(x, y); // 카드 생성 위치
    }
}

●이미지 랜덤 로직
1. 일단 [0, 0, 1, 1, 2, 2, ..., 7, 7]까지 쓰인 리스트를 만들고
2. 이걸 섞어서 [2, 3, 4, 1, 2, 0, 1, ..., 7]로 만들고
3. 카드가 만들어질 때 하나씩 꺼내서 르탄이 이미지를 붙여준다.

<Board.cs>

using System.Linq; // Linq라는 시스템을 사용한다

void Start()
{
    int[] arr = {0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7}; // 카드 맞출 숫자 생성
    arr = arr.OrderBy(x => Random.Range(0f, 7f)).ToArray(); // arr 배열값을 랜덤으로 섞어서 arr에 다시 정렬한다.

    for (int i = 0; i < 16; i++) // i가 16보다 작으면 계속 반복 -> 카드가 16개가 생성
    {
        GameObject go = Instantiate(card, this.transform); // card 게임 오브젝트의 복제본(Clone)을 Board 밑에 생성 / 게임 오브젝트라는 자료형 변수로 저장

        float x = (i % 4) * 1.4f - 2.1f; // 카드 위치의 x축 / 1.4를 곱하는 이유는 카드의 간격, 2.1을 빼는 이유는 화면 중앙에 배치하기 위함
        float y = (i / 4) * 1.4f - 3.0f; // 카드 위치의 y축 

        go.transform.position = new Vector2(x, y); // 카드 생성 위치
        go.GetComponent<Card>().Setting(arr[i]); // GetComponent는 어떤 컴포넌트, 스크립트를 가져오기위해 사용하는 키워드 - > card스크립트를 가져온다.
                                                 // card 스크립트의 Setting 함수를 불러와 arr[i] 값을 Setting 함수의 매개변수인 int number 를 통해 넘어와 idx에 넣어줌
    }
}

<card.cs>

public class Card : MonoBehaviour
{
	int idx = 0; // idx는 index를 줄인말
    
    public SpriteRenderer frontImage; // card 에 Front 변수에다가 이미지를 넣어주기 위해 생성
    
    public void Setting(int number) // 외부에서 Setting이라는 함수를 호출할 때 어떤 값을 넣어줄 수 있게 됨
    {
    	idx = number; // idx에 number 저장
    	frontImage.sprite = Resources.Load<Sprite>($"rtan{idx}"); // 앞면 이미지를 Resources의 rtan 이미지로 불러온다.
        // rtan{idx}에서 idx의 숫자값에 맞는 rtan 이미지를 불러옴
    }
}

업로드중..↑이미지를 꺼내오려면? → Images폴더의 이미지들을 Resources 폴더에 옮겨두고 Images폴더를 지운다.

0개의 댓글