-
2023.12.22TIL 2023. 12. 22. 20:53
오늘은 크게 무언갈 한 날은 아닙니다.
팀원분들과 코드를 합해야하기 때문에 Github 사용법 특강이 있어서 들었는데요.
사실 아직도 잘 모르겠습니다... 하하
우선 팀원들끼리 따로 따로 제작하고 합칠 예정입니다.
그렇다면 제가 만들어둔 코드를 올리는 법을 먼저 알아야겠죠.
'Github Desktop'을 설치해서 사용하는 방법으로 하겠습니다.
설치해서 로그인한 뒤에 아무것도 없었다면 'Create a new repository'를 눌러주고, 그게 아니라면
화살표를 눌러서 Add-Create a new repository를 눌러줍니다.
만들어둔 유니티 경로를 Local path에 넣어주고 유니티 프로젝트 이름을 Name에 넣어주면 알맞게 들어가고 Github 페이지에도 생성됩니다.
생성 시에는 사용하지는 않지만 프로젝트 작동을 위해 필요한 파일들도 같이 보이게 되는데 그것은 Git Ignore을 사용하면 안보이게 되니 사용하면 좋습니다!
만약에 repository를 삭제하고 싶다면,
원하는 repository를 들어가서 setting을 눌러 아래로 드래그하면 Danger Zone에 Delete this repository가 있습니다.
눌러서 삭제해주면 끝!
테스트 항목이라서 거리낌없이 삭제해봤습니다.
올린 repository를 다른 팀원들에게도 공유해서 서로 수정해야하기 때문에 Setting - Collaborators에 갑니다.
Add People로 팀원들에게 초대를 보내면 됩니다. 홈페이지 알림으로도 오고, 메일로도 옵니다. 굿
초대를 받으면 <>Code에서 HTTPS를 복사합니다.
Github Desktop에서 Add를 눌러주는데
이번에는 'Create new repository'가 아니라 'Clone repository'를 눌러줍니다.
팀원이 올린 것을 받아서 사용하는 것이기 때문에 Create를 사용하지 않습니다.
Clone repository에서 URL에 복사한 HTTPS를 붙여넣어주면 끝!
Clone: 복제 라는 뜻입니다.
원본을 복제하여 개인마다 저장하게 됩니다. 그곳을 로컬 저장소라고 하며 원본이 있는 곳을 원격 저장소라고 합니다.
원본을 받아서 자신이 맡은 부분을 수정해서 로컬 저장소에 계속 저장하게 됩니다. 이것을 Commit이라 하며, 어떤 부분이 수정되었는지 알기 쉽게 하기 위해서 로그에 설명을 붙일 수 있습니다.
로컬 저장소는 개인만 사용 가능하기 때문에(개인 PC) 아무리 수정을 해도 다른 팀원들이 모릅니다. 따라서 수정된 것을 공유하기 위해서는 원격 저장소에 다시 올려야합니다. 이를 Push라 하며, 다른 팀원들에게 자동으로 수정시켜주지는 않습니다. Push되어서 수정본을 얻기 위해서는 원격 저장소에 있는 수정본을 다시 받아야하는데 이를 Pull이라 합니다. Pull하게 되면 다른 팀원들이 수정한 부분이 자동으로 반영됩니다.
Branch랑 Merge도 말씀해주셨습니다.
Branch는 수정한 부분이 바로 Main으로 올라가게 하지 않고 자신이 따로 만들어서 올리는 식이기 때문에 다른 사람들에게 영향을 주지는 않습니다.
Merge는 Branch 중에서 '이건 정말 잘 만들었다!', '이게 프로그램 베이스가 되면 좋겠다' 라고 생각되는 것을 골라서 Main이랑 합쳐주는 것 같습니다.
Branch이랑 Merge는 아직 잘 모르겠네요.
이거 때문에 충돌 일어난 건가 싶네요...
Github 사용법을 간단하게 알아보았습니다.
어떻게 잘 사용될지는 모르겠지만 합칠 때 사용하기 편한건 맞을 것 같습니다.
그렇다면 Github 특강만 들었느냐! 그건 아닙니다.
어제 목표한 기능을 완료했기 때문에 추가적으로 Challenge 부분에서 한개에서 두개정도 더 골라서 추가해보기로했습니다.
추가 기능으로는 'firstCard 고르고 5초 간 카운트 다운 - 안 고르면 다시 닫기' 입니다.
void Update() { t -= Time.deltaTime; timeText.text = t.ToString("N2"); if(firstCard != null&&secondCard == null) { settime += Time.deltaTime; } }
전체 시간이랑 다르게 흘러야하기 때문에 새로운 float을 만들어주었습니다.
특정 조건에서만 시간 측정이 시작되어야 하기 때문에 if문을 이용하여 조건을 설정해주었습니다.
첫번째 카드는 선택된 상태여야하기 때문에 null이 아니여야하고, 두번째 카드가 선택되어 있으면 안되기 때문에 null인 상태인 조건을 만들었습니다. 또한 deltaTime이 계속 더해져야하기 때문에 Update 안에 만들어주었습니다.
이렇게 첫번째 카드를 고른 뒤에 두번째 카드가 골라지지 않았을 경우 시간을 체크할 수 있게 되었습니다.
그렇다면 5초가 지날 경우에 다시 닫아줘야합니다. 마찬가지로 조건이 있어야하기 때문에 if문을 사용해줬습니다.
if (settime >= 5) { firstCard.GetComponent<Image>().closeCard(); firstCard = null; settime = 0; }
첫번째 카드를 고른 뒤 5초가 되면 카드는 다시 닫게하기 위해서 Image.cs에 있는 closeCard()함수를 이용해줬습니다.
그리고 선택되어진 firstCard를 null을 넣어줘서 비워줍니다. 그래야 다시 두개의 짝을 맞출 수 있습니다.
다시 닫게되면 또 첫번째 카드 이후에 5초를 계산해야하기 때문에 계산에 사용된 변수는 0으로 초기화 시켜줍니다.
이렇게하면 끝났을거라 생각했지만.... 5초가 지나기 전에 두번째 카드를 선택했을 경우에도 변수를 초기화시켜줘야합니다.
당연히 될거라 생각했지만 큰 오산이다!
else를 이용해서 초기화를 시켜주게 되면 안됩니다. 될 것 같았는데 안되더라구요.
그래서 초기화 위치를 변경해주었습니다.
public void isMatched() { settime = 0; }
isMatched함수는 첫번째 카드와 두번째 카드의 이미지를 확인하여 같으면 팀원의 소개가 나오면서 카드가 사라지고, 다르면 다시 뒤집게 만들어주는 함수입니다.
즉, 첫번째 카드와 두번째 카드가 선택되었을 때 실행되는 함수로 이때 변수를 초기화 시켜주게 되면 초기화도 잘 되고 deltatime으로 인하여 숫자가 증가하지 않게 됩니다.
아무래도 deltatime을 사용하기 위해서 위에 if문들을 다 Update에 넣어준 것이 초기화가 안된 이유라고 생각됩니다.
이렇게 오늘 추가적으로 만들어둔 코드는 완성을 했고 Github에 대해서 배웠기 때문에 만들어진 코드들은 Github로 팀원들과 공유하면서 다듬을 것 같습니다.
근데 왜 인지 모르겠는데 GameManager.cs가 계속 충돌이 생기더라구요..
결국에는 파일 삭제하고 다시 받아서 다시 만들었는데 만들어둔 UI도 Push가 안되더라구요?!
Unity 저장을 해야지 Github도 인식을 하는 것 같습니다. 그래서 저장안하면 바뀐 부분이 아무것도 안떠서 Push를 할 수 없게 되어있습니다.
Unity 저장하려고 보니깐 어느 파일에 저장해야하는지 몰라서 좀 헤매이고 있었는데 Scene을 바꾼 것이기 때문에 MainScene에 저장하면 되는 것이였습니다.
이 뒤로도 GameManager.cs가 충돌이 일어나긴 했는데 UI 안날라간거 같아서 다행이네요. 휴
'TIL' 카테고리의 다른 글
2023.12.29 - 주석 단축키, 조건문, 배열, 컬렉션 (1) 2023.12.29 2023.12.28 (0) 2023.12.28 2023.12.27 (1) 2023.12.27 2023.12.26 (1) 2023.12.26 2023.12.21 (0) 2023.12.21