TIL (2023.08.08)

최장범·2023년 8월 8일
0

TIL

목록 보기
3/50

오늘의 공부 내용

===4주차 강의의 내용===
1. 카드 뒤집기 게임을 만듦
2. 지금껏 배워왔던 3강까지의 강의 내용의 복습이면서 카드를 배치 및 랜덤으로 섞는 것에 대해 공부함
3. for문에 대해
4. 카드 매칭하기


  • 복습한 내용
    자동 카드 생성
    -prefab을 사용하여 card라는 틀을 만들어 원하는 만큼 찍어내는 기능을 구현함

  • 여기서 새롭게 배운것이 for문
    -16가지의 반복을 일일이 수동으로 입력할 수는 있어도 수가 늘어나 100, 1000가지가 된다면 이것을 사람이 수동으로 입력하기는 어려움. 그리하여 for문으로 반복문을 만들어 기능을 구현

public GameObject card;

void Start()
{
    for (int i = 0; i < 16; i++)
    {
        GameObject newCard = Instantiate(card);
        newCard.transform.parent = GameObject.Find("cards").transform;
    }
}
  • 카드 매칭하기
    -카드를 매칭하는 전략으로 첫번째 카드의 이름과 두번째 카드의 이름을 비교하는 코드를 만들어 비교한뒤 if문을 이용해 같았을 경우와 달랐을 경우에 따른 코딩을 함
    **여기서 중요했던 부분이 저번 TIL에서 설명했던 gameManager의 싱글톤화!**
public static gameManager I;

void Awake()
{
    I = this;
}
싱글톤화를 해주지 않으면 무수한 다른 gameManager를 생성하여 오류를 일으킬수 있다 (조심 또 조심!)
  • 카드 매칭하기(cont)
    -카드를 매칭하는 전략은 card.cs script에서 진행. isMatched 함수는 gameManager에 따로 만들어 판단후 성공시 카드를 없애는 것까지 구현
public void openCard()
{
    anim.SetBool("isOpen", true);
    transform.Find("front").gameObject.SetActive(true);
    transform.Find("back").gameObject.SetActive(false);

    if (gameManager.I.firstCard == null)
    {
        gameManager.I.firstCard = gameObject;
    }
    else
    {
        gameManager.I.secondCard = gameObject;
        gameManager.I.isMatched();
    }
}

문제가 생겼던 부분과 해결하려 했던 노력

  1. 싱글톤화를 하는 것을 잊어버리고 진행
    • gameManager를 싱글톤화 해주지않아서 다른 함수에서 gameManger를 불러와야 하는 일이 있을때마다 새로운 gameManger를 생성함
    • 알아차리기 까지의 시간이 걸려 문제가 복잡해짐
    • gameManager의 script를 삭제후 다시 만듦
    • 연계되어있던 다른 script들 까지도 에러가 발생
    • 모두 지우고 강의를 들었던 것을 기억하며 새로 script들을 생성
    • 문제 해결
  2. 카드를 배치하는 방법에서 이해를 못함
    • 카드를 4개씩 가로열로 배치 후에 그 다음줄로 내리는 식을 강사님께서 말씀해주셨으나 이해를 하는데 시간이 걸림
    • 머릿속으로는 말이 맞지 않아 연필과 노트를 들고 직접 계산 및 구현을 해봄
    • 오히려 간단하게 논리를 이해하게 됨
    • 문제 해결

오늘 공부한 것에 대한 생각

  • 복습은 정말 중요하다고 생각하였다. 싱글톤화가 그렇게 중요하다고 TIL에 적으면서까지 이해하고 잊지 않으려 했으나, 막상 코드의 양이 많아지고 더 많은 기능들을 추가하다보니 정작 중요한 gameManager 싱글톤화를 잊어버리게 되었다. 앞으로도 이렇게 생각이 날때마다 기록하고 기억하는 습관을 들여 정말 중요한 요소들을 잊지 않도록 해야겠다.
  • 우리는 컴퓨터를 이용해 코딩을 하지만 어떤 로직을 만들때나 그 로직을 이해할때는 아날로그적 방법 (연필과 노트)이 더 효율성을 높일 수 있다는 것을 깨달았다. (그렇게 이해가 안되던 카드 배치 로직이 노트에 써보자마자 매우 쉬운 로직이라는 것을 깨닫게 됨)

0개의 댓글