TIL

5일차 첫주차 프로젝트의 마무리 발표 및 코드리뷰

박민혁_kog 2023. 8. 11. 21:26

 

TIL 겸 WIL 겸 프로젝트 회고 

 

프로젝트의 마무리로 볼수 있다 우선 깃 링크를 첨부 하려 한다 https://github.com/StarterpackSparta/Project1Week

 

GitHub - StarterpackSparta/Project1Week: 스파르타 1주차 미니 프로젝트

스파르타 1주차 미니 프로젝트. Contribute to StarterpackSparta/Project1Week development by creating an account on GitHub.

github.com

이번주 동안 완성한 프로젝트를 각자 발표하는 시간을 가졌다 다른조의 진행상황이 항상 궁금했는데 확인 할수 있는 좋은 기회 였다고 생각한다 그 후 우리 조는 각자 서로가 작성한 코드를 설명 및 질문 하는 시간 보냈는데 

모두 자기가 담당한 부분 외에도 구현이나 의도를 서로 궁금해 하였기에 서로 돌아가며 작성한 코드 의도 등을 설명하였는데 상당히 유익했다 허나 설명을 들었음에도 불구하고 이해가 안가는 부분이 있었는데 팀원분들 모두 TIL을 작성을 잘하여 팀원 분의 블로그로 더 자세한 설명을 볼 기회가 있었다.

 

깃 배쉬 사용 도 중 코드 초기화는 겪어 보았으나 나의 대부분의 작업이 메인씬을 별로 건들이지 않아 메인씬 에서의 오류를 겪어보지 못했으나 ( 메인씬은 모두 일하는 공간이기에 충돌이 다수 발생한다고함)

팀원 중 한분이 겪어 간접적으로 경험 할 수 있었는데 좋은 경험 이였다.

 

 

 

코드 설명을 들으며 인상 깊은 내용을 좀 정리해둔다

들으며 메모장에 메모해둔걸 옮겨 적고 나름 정리를 했지만 역시 모호하다 

 

작업량이 늘어나며 게임매니저에 많은 변수? 오브젝트? 정확히 뭐라고 불러야할지 모르겠음 변수에 가까운듯 하다 어쨋든 게임 매니저가 너무 많은 양을 사용하여 팝업스코어 라는 스크립트를 만들어 메인신 스타트신 스테이지신  모든 곳에서 변수를 불러올수 있게 새로 게임매니저 비스무리한것을 만들었다 개념은 모든 신에서 이용하기 위해서 만들었다고 생각되나 아직 좀 이해가 미흡하다 추후 다시 봤을때 이해가 부족할수도 있을듯 하여 각자 팀원분들의 링크를 남기려한다

 

팀원 우민규님 
https://qlxm0828.tistory.com/
스테이지 해금 기능 

스테이지 수만큼 배열을 만드셔서 펄스 트루를 변경하셔서 다음 스테이지를 해금하는 기능 이라고 한다 

        Debug.Log(levelnum);
        for (int i = 0; i < stages.Length; i++)
        {
            stages[i].interactable = false;
            locks[i].gameObject.SetActive(true);
            highScoreTxt[i].text = PlayerPrefs.GetInt("bestScore" + i.ToString()).ToString();
        }

*객체의 스프라이트 이미지를 바꾸는경우 
여러장의경우  이미지코드로
이미지 적게 사용시 객체로 
관리하기 힘들면 - 객체로 -유니티로 드래그 드롭 하면되서 편함

*객체가 활성화될때 소리를 내는경우 
오디오 매니저가 하는경우가 좋지만
간단한 사운드는 객체에 해도 괜찮다 허나 팀원에게 알려주는게 좋다


*우리는 게임에 다 우겨넣었지만 기능마다 분할하여 매니저 스크립트를
작성하는게 좋다 

씬의 스타트함수도 부를수 있지만 스타트를 통째로 호출하는건 좋지않다

on enable 오브젝트가 켜질때마다 씬이 될때마다 인지하는것이 좋다
ㄴ https://itmining.tistory.com/47 참조할것
ㄴ기기사양에 따라 업데이트 실행력이 다르다 
FixedUpdate - 위에 블로그에서 함수를 읽어볼 것
즉 업데이트는 계속 반복하는것 이기 때문에 기기성능에 영향을 받아 누구는 10번 누구는 9번 반복될수 있지만 

FixedUpdate를 통해 일정 주기 마다 공통적으로 반복시킬수 있다고 한다

실시간반영 -키입력 행동 을 보통 언제 들어올수 알수없기 때문에 보통 업데이트에 넣는듯?
극한테스트용으로 구형 핸드폰 기종을 보관 하며 테스트 하는 사람이 있다고 하더라

 

팀원 이도현님
https://velog.io/@riviea
카드배치 기획 의도 
처음엔 갯수를 고정값을 사용하려 했지만 스테이지가 늘어남에 따라 카드 갯수가 달라지는걸 고려하여 함수로 작성하셨다 

1. 스테이지값에 따라 배율을 받아 일반화로 생성 -if문을 반복하지않아 코드압축이 더 좋음 
유니티 명령좌표가 화면중앙기준 카드의 인스펙터를 옮겨서 해결  --- 내가 -2초 텍스트를 생성할때 좌표값을 혼동하였었는데 비슷한 케이스 였다 덕분에 이해하기 좀 더 수월했던듯 시작 위치 설정 같은 개념 
2. 크기조절 초기당시 직접 할당해주려 했는데 스테이지가 늘어날수록 힘들기에 식을 작성하였음 

카메라 시점이 환경에따라 다를수 있기에 카메라터치의 0 0 0 값을 받았음 
객체의 중앙이 상수값만 줄시 정확한 위치에 가지 않아 가기 때문에 보정을 해주었음


목록중(12개중) 일정 갯수만 뽑아 쓰기 
대응배열을 1개 만들어 뽑으면 그에 맞는 배열을 펄스로 바꿔 중복을 방지함
예외처리- 2스테이지 9장 이기때문에 1장이 남아서 스테이지가 2면 꽝번호(99)를 섞어줌
배열[^1] << 뒤에서 1번째로 들어감 
셔플은 버블 정렬이랑 같은 개념 인듯 하다 

 

이 부분은 사실 함수를 자세히 이해하지 못하여 작성하신 팀원분의 블로그를 정독했다.

 

팀원 이현지님

내가 사전캠프때 5강을 완독하지 못하여 UI 애니메이션의 이해도가 떨어졌었는데 상당히 참고가 되었다.

https://szloveleesz.tistory.com/
뒤집기 애니메이션은 줄어들어서 ㅣ 이 되는순간 투명도변경 
내가 사각형으로 만들어둔게 게임의 통일성을 떨어트린다고 생각했고 미리 보여주기 3 2 1 의 가시성이 떨어진다고 생각하였는데 통일감있게 바꿔주셨었다.


기존 4주차 강의시 매칭이성공했을때 카드의 자식 카운트로 했었는데 
우리가 플레이했을때 남은 카드가 사라지는게 늦을시 카운트가 오류가 생겨 게임이 안끝나는거라고 판단하시고 차일드 카운트를 세는게 아니라 카드 오브젝트의 남은갯수를 파악하게 변경하셨다 
남은 카드 갯수가 2개미만(2스테이지 꽝1개가남음) 으로 패치함
이경우 카드레프트의 수를 수동입력하였음 4 9 16

매칭이 발생시 +1 하였는데 게임오버 호출후 매칭이 올랐기에 1이 미반영되여 수작업으로 끝나고 1을 올려줌

ㄴ 구조상 바꿀수 있을듯 하긴 하나 그러면 함수를 새로고쳐어야 했을듯 하여 더 간단한 방법인듯 하다 나중에 기회가 있다면 바꿔보는것도 좋을듯하다

카드 뒤집기 5초대기 인보크사용할때 첫카드 등록 두번째카드 등록이 되기에 버그가 있었다 다른팀에서도 이러한 현상을 겪었다는 말이 있던걸로 보아 모두 겪은듯함 
불값 2개로 첫카드 뒤집힘 두번째카드 뒤집힘 으로 해결 

오디오 매니저 싱글톤화가 안되있었음 !!
스타트씬 -메인씬 이동때 음악이 끊김!! 싱글톤화를 하여 dontdestroyonload(gameobject); <<오디오매니저가 유지됨
음악이 계속 됨 

ㄴ 마찬가지로 5강을 덜들었기 때문에 이해도가 떨어진 오디오 부분 오디오를 사용해보긴 하였으나 오디오 매니저를 사용하지 않고 오브젝트에서 사용하였기에 그냥 음악을 이렇게 넣을수 있다 정도로 알고 있었는데 상당히 도움이 되는 부분이였다

onsceneloaded(신 신 로드신모드 로드신모드) 
신이 신이로드 될때마다 호출됨
신.네임 으로 배경음악 선정 
업데이트 스타트 함수 처럼 만들어지면 스타트 함수가 실행되는 것처럼 신이 로드 되면 자동으로 실행되는 함수 


프로젝트를 마치며

작성 도중 알게된 것 인데 이 글 작성은 실패한듯 하다 위에 글까지 TIL로 여기서 부터 WIL겸 프로젝트 회고로 글을 나눠서 작성 하였다고 생각된다 하지만 자유롭게 작성해보자는 처음 취지에 맞게 그냥 쓰기로 한다

 

나는 게더로 소통 하는 것의 단점이 게더의 소리가 작다고 생각하였는데

서로 말이 겹치면 안들렸는데 서로 먼저 말씀하세요 등 양보하는 모습이 자주 연출 됬다.  

금요일 발표의 아쉬운 점은 코드를 발표 하는 부분이 없다는 점이다. 추후 광장? 에서의 대화도 코드 를 물어보는 시간이라기 보단 " 와 끝났다! 야호~" 이런 느낌이라 아쉬웠는데

우리 조는 오후 시간을 서로 자신이 만든 코드의 의도와 느꼈던 점, 어려움을 느낀 부분에서의 튜터님의 조언 등을 서로 공유 하는 시간을 가졌는데 모두 적극적으로 참여해주어 자신이 만들지 않은 부분도 서로의 의도와 원리를 이해하는데 도움이 되었다

 

나는 사실 조별 과제를 하면 그리 주도적이지 않은 편인데 팀원 분들이 모두 너무나 적극적이였기 때문에 나도 열심히 하게 되는 긍정적인 영향을 많이 받았다. 

  처음 우리 조의 방향성은 구현목록중 1개씩을 골라 완성하고 완성후 1개씩 늘려 나간다는 방침이였는데 이는 개발속도가 차이가 나더라도 천천히 한개씩 배워서 깃을 이용하여 협업을 경험 해보는게 이번주의 목표라고 생각했기 때문인데 모두 적극적으로 참여하여 구현 목록의 남은 일들이 금방금방 사라졌다  

이점이 엄청나게 자극됬는데 '어? 이러다 저 할일이 없어져버려요?' 이런 느낌으로 구현목록 외 에도 게임에 이런 기능이 있으면 어떨까 하는 기능도 추가하게 되었다.

 

모두 자신이 일을 하고 싶어하여 나는 발표회후 서로 말을 할때 ,내가 젤 일을 적게 한거 같다 제가 버스 탔다 감사하다 이런애기를 했는데 

 

놀랍게도 팀원 모두 자기가 적게한거 같다 간단한거 구현했다 버스 탔다 이런 애기를 하시는게 신기했다

 간단한 프로젝트로 만나게 된게 아쉽고 주요 프로젝트를 이런 팀원분들과 함께하고 싶다 한편으론 처음 부터 너무 100점짜리 팀을 만나 앞으로의 팀프로젝트가 어떤 다사다난이 일어날지 두려울정도..

 

게임의 완성도 버그수정 UI 모든것이 맘에든다 사실 카드 맞추기 게임이 별로인 종목이라고 생각했는데 만들다보니 정이간다. 사전캠프 5주차 강의처럼 APK로 빌드하는것 까지 상상해봤지만 이미 수많은 카드뒤집기 게임이 스토어에 올라와 있을것이고 팀원분들의 사진이나 내사진이 들어갔기에 포기한 부분이었는데

놀랍게도  APK로 만들고 큐알코드로 다운받을수 있게 만든팀이 존재했다. 이 부분은 상당히 리스펙트한다