유니티 미니 프로젝트 카드뒤집기 3번째 이야기입니다.
오늘은 요구사항중에 고민을 많이 했었던 것에 대해 말해보겠습니다.
미니 프로젝트를 진행 하면서 여러가지 기능을 넣으라는 요구사항이 있었는데요
그 중에 첫 번째 카드를 뒤집고 5초가 지나면 카드를 다시 닫는 기능을 만들면서
최대한 원래 있던 함수들을 쓰면서 이 기능을 구현하는 방법을 고민해보았습니다.
시도해본 방법
1. gameManager에서 관리해보기
처음으로 시도해보았던 방법입니다. gameManager는 게임안에서 게임의 전체적인 시간을
관리하고 있었고 처음 보자마자 아 이건 될지도 몰라! 라고 생각했던거 같습니다.
하지만 gameManager에는 카드를 오픈하는 함수가 없었고 card스크립트에서 카드를 오픈하고
gameManager에서 이 오픈된 카드를 서로 매칭하여 맞으면 삭제 아니면 다시 뒤집는 기능을 하고 있었습니다.
결국gameManager의 함수를 쓰려다가 기능이 잘 동작되지 않는다거나 아니면 5초후에 카드가 다시 닫히는 건 되나
매치를 하는 과정에서 매치 실패로 닫히는 카드 코드와 5초후 카드가 닫히는 코드의 동작이 겹쳐서
카드가 3개가 오픈이 되는 버그가 생겨버렸습니다. gameManager에서는 안되겠다 싶어서
카드를 오픈하는 코드가 있는 card스크립트를 이용하게 되었습니다.
2. card에서 관리해보기
이 card 스크립트는 카드가 클릭이 되면 실행되는 스크립트입니다. 그럼 카드가 딱 실행이 되면
5초를 세고 닫으면 되지 않을까? 라고 생각을 해보았습니다. 마침 card스크립트는 update문이
아무도 사용하지 않은 빈 방이였습니다. 그래서 처음에
float timeSpan = 0f;
float checkTime = 5f;
이 두개의 함수를 만들어서 timeSpan += Time.deltaTime;으로 timeSpan의 시간을 증가시켜
5초가되면 카드를 닫는 함수가 실행하도록 해보았습니다. 하지만 조건이 하나 더 있었습니다.
바로 카드가 오픈이 되어야 하고 그 카드가 첫번째 카드여야 한다는 것입니다.
이 부분이 가장 많은 고민을 하게 된것 같습니다. 첫번째 카드를 오픈했을때의 조건을 맞추는건 쉽지만
그 뒤에 gameManager로 보내는 첫번째 카드의 정보를 초기화 해줘야 하는 것이였습니다.
그래서
bool isWork = false;
bool 형태의 변수를 하나 만들어 첫번째 카드가 오픈이 되면 거기에 isWork를 true로 만들고 업데이트 문에서
isWork가 true일때 시간이 증가되게 해보았습니다. 그리고 &&연산자로 두번째 카드가 null이라는 조건도 추가했습니다. 이렇게 만들어보니 정말 다른 불편한점 없이 잘 실행이 되었습니다.👍 그래서 저에게 도움을 준 bool에 대해서 정리해보려고 합니다.
bool 타입
bool(부울) 타입은 true(참)과 false(거짓) 값만 저장할 수 있지만 조건문과 결합하면 코드의 흐름을 조절할 수 있는 강력한 도구.
bool에 사용하는 연산자
! : (exclamation mark, 엑스클러매이션 마크), 느낌표(!)는 부정 연산자이며, bool값 앞에 붙여서 not(아님)의 뜻으로 사용하여 그 값을 반대로 만든다.
& : (ampersand, 앰퍼샌드),&&(AND연산자) 연산을 당하는 양쪽이 모두 true일때만 true를 반환한다.
| : (vertical bar, 버티클 바),||(OR 연산자)연산을 당하는 양쪽이 모두 false 일때만 false 를 반환한다.
주의: 사칙 연산에서 곱셈, 나눗셈을 먼저 계산하듯이 bool연산자에도 연산 순서가 있다.
! (NOT)을 가장 먼저 연산하고 그 다음 & , | , && , || 순서대로 연산이 이루어진다.
정말 최대한 이미 만들어진 코드들을 활용하여 기능을 구현하고 싶었는데
다행이 잘 구현된거 같아 기분이 좋습니다. 앞으로 다양한 방법들을 고민해보고
좋은 방법들으 사용하여 열심히 게임을 만들어 볼 수 있었으면 좋겠습니다.🐈