[Unity] TIL 10 르탄이 카드 뒤집기 게임 만들기

qkrrlcks00·2024년 8월 27일
post-thumbnail

일단 제공된 이미지를 받고 시간 설정을 해준다

public Text timeTxt;
float time = 0.0f;

void Update()
{
    time += Time.deltaTime;
    timeTxt.text = time.ToString("N2");
}

그리고 이전에는 반복해서 오브젝트를 만드는 코드를
Instantiate로 만들었는데 이번엔 카드를 16장만 만들고싶기 때문에
for문을 이용하여 카드를 16장 만들고 배치시키는데

void Start()
{
    for (int i = 0; i < 16; i++) 
    {
        GameObject go = Instantiate(card, this.transform);
        float x = (i % 4) * 1.4f - 2.1f;
        float y = (i / 4) * 1.4f - 3.0f;
        go.transform.position = new Vector2(x,y);
    }
}

가로 위치: (i % 4)는 i를 4로 나눈 나머지를 계산해준다. i가 0부터 3까지는 0, 1, 2, 3이 되고, i가 4부터 7까지는 다시 값이 0, 1, 2, 3이 된다. 이렇게 해서 카드가 가로로 4개씩 놓이게 된다.

세로 위치: (i / 4)는 i를 4로 나눈 몫을 계산해준다. i가 0부터 3까지는 몫이 0, i가 4부터 7까지는 몫이 1, 이렇게 4줄로 카드가 세로로 놓이게 된다.
카드의 X,Y값 1.3 , 카드들의 간격 0,1을 생각해서
1.4를 곱하고 화면상에 알맞게 보이기위해 살짝의 XY값을 조정하여 빼주었다.

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(); 
// 배열.정렬(랜덤한 값) >Tostring 처럼 ToArray값을 집어넣음
go.GetComponent<Card>().Setting(arr[i]); //카드 스크립트를 가져옴

그후 카드에 번호를 지정해주고 랜덤값으로 섞어주고

int idx = 0; 
public void Setting(int number)
{
    idx = number;
    frontimage.sprite = Resources.Load<Sprite>($"rtan{idx}"); 
    // <>안에 자료형 넣고 경로를 넣는데 string값을 조작하는 $, {}안에 변수를 쓸수잇음
}

카드하나하나에 idx값을 넣어주어 각기 다른 이미지들이 들어갈수 있게 만들고

public void OpenCard()
{
    anim.SetBool("isOpen", true);
    fornt.SetActive(true);
    back.SetActive(false);
}

카드를 클릭해야 뒤집힐 수 있게 버튼을 하나 만들어주고 애니메이션을 추가한다.

애니메이션을 추가하고 Parameters에 들어가서 bool값 isOpen을 추가하고 CardIdle과 CardFlip을 MakeTransition으로 이어준다.
CardIdle > CardFlip 으로 갈때는 isOpen값이 true일때 작동하게하고 CardFlip > CardIdle은 isOpen이 false일때 작동하게 하고 Has Exit Time false, Transition Duration 0 으로 적용한다.

현재까지 진행상황

다음엔 첫번째 카드와 두번째 카드를 비교해서 틀리면 다시 덮어놓고 맞으면 match되는 코드를 만들것같다.
그리고 원래 국룰이 처음에 한번 보여주고 시작하는건데, 그것도 할수있으면 해봐야겠다.

0개의 댓글