본문 바로가기
Unity 포트폴리오/플젝1. 2D디펜스 게임

팀프로젝트 개발일지 모음 / 기획서 & 보고서

by jjiing 2022. 6. 26.

4/18~4/29에 진행한 팀프로젝트(디펜스게임) 개발일지입니다.

 

기획서 및 보고서 링크

https://drive.google.com/drive/folders/18pG754t5JSNrJslCkF0-u8A9V5bEAJ1Q

 

개발일지

1-2일차  (4월 18일, 19일)
구현 내용
 
1. 전사 조작법 구현(우클릭으로 이동)
2. 전사 방향별 이동 애니메이션 구현
 
발생한 문제점
 
1. 우클릭을 이용한 전사 이동 구현 중 게임이 시작하자마자 전사이 움직이는 문제.
2. 우클릭(전사 이동)이 주황색 타일에만 가능하게 하기(지나다니는 건 초록색 타일도 가능) - 마우스 커서 위치를 좌표값으로 받아서 구현 어려움
3. 이동 애니메이션을 방향별로 적용시켜야 하는데, 오브젝트(전사)가 키보드로 이동하는 것이 아닌 마우스 우클릭으로 이동해 방향별로 적용시키는 것이 어려움.
 
해결 방법
 
1. 목적지(우클릭 포인트)를 초기화 하지 않고 구현해서 생긴 문제. Start()에서 목적지를 전사의 위치로 초기화해줘서 해결.
2. 마우스 커서 위치를 실시간으로 받는 스크립트(MouseTransform)를 만들고 그 스크립트에 목적지 좌표 값을 받음. 그리고 마우스 커서위치에 콜라이더를 설정하고, 바닥 콜라이더와 충돌 시 바닥의 태그가 주황색 타일일 경우에만 전사이 이동하도록 설정.
3. 전사와 목적지 사이의 방향을 벡터값(정규화 시켜서 방향만 가지는 값)으로 받아 그 벡터값의 X값과 Y값의 범위에 따라서 애니메이션을 방향별로 지정하여 적용시킴.
 
다음 개발 계획
 
1. 전사 기본공격 구현 - 여러 충돌체 감지/가까운 거리 몬스터 감지/ 자동 공격 구현 / 상대 hp 깎도록
2. 전사 움직이고나면 기본 방향 바뀌게 구현
3. 전사 기본공격 애니메이션 구현
 

 

3-4일차  (4월 20일, 21일)
구현 내용
 
1. 전사 기본공격 구현 - 여러 충돌체 감지/가까운 거리 몬스터 감지/ 자동 공격 구현 / 상대 hp 깎도록
2. 전사 움직이고나면 기본 방향 바뀌게 구현
3. 전사 기본공격 애니메이션 구현
 
발생한 문제점
 
1. 여러 충돌체 감지
2. 타겟몬스터에 다가가서 공격하고 이를 반복하는 것을 구현 중에 실행하면 계속 유니티가 멈춰서 터짐
3. NullReferenceException 오류 발생
 
해결 방법
 
1. overlapCircle을 사용하려고 해서 생긴 문제 - collider를 사거리만큼 설치하고 (이때 바닥 콜라이더와는 프로젝트 세팅에서 충돌 설정꺼둠) 몬스터가 사거리 내에 들어오면 충돌 돼서 리스트에 넣도록 설정.
2. 무한루프문을 잘못 설정함. 공격함수를 코루틴에 넣고 스타트 코루틴을 타겟몬스터에게 다가가는 함수에 넣음. 또한 isAttack이라는 bool 변수를 적절히 사용해 구현
3. 몬스터함수에 몬스터 스크립트를 안넣어서 생긴 문제
 
다음 개발 계획
 
1. 이동 구현 시 생기는 문제 수정
2. 스킬2 구현
 

 

5일차  (4월 22일)
구현 내용
 
1. 전사 기본공격 구현하는데 생기는 문제점 수정
2. 전사 공격 중 이동 가능하게 구현
 
 
발생한 문제점
 
1. 몬스터 잡고나서 바로 걷는거 안되고 코루틴 때문에 1분 딜레이 발생
2. 공격중 우클릭으로 이동하면 딜레이 발생
3. 시점이 몬스터에 고정된 상태로 움직임
4. 애니메이션 walk->attack으로 모션 변경시 idle 상태를 거쳐서 감
5. 몬스터쪽으로 갈 때 모션방향 이상해짐
 
해결 방법
 
1. 몬스터가 콜라이더에서 나갈때만 리스트에서 제거해서 생긴 문제(죽을 경우에는 리스트에서 사라지지 않아 MissingReferenceException오류 발생)
몬스터 죽으면 리스트에서 제거해주는 코드 추가해서 해결
2. 코루틴 때문이어서 업데이트에 우클릭 시 스탑 코루틴을 넣어줘서 해결. (이 스크립트에 코루틴이 하나라서 가능)
3. 어택 애니메이션에서 방향 설정을 attacktrue일때만 설정하게 하니 고쳐짐
4. isAttack 트랜지션을 불 파라미터가 아닌 트리거 파라미터로 설정
5. 상속문제. bool 변수를 자식 변수에 넣고 다른스크립트에서는 참조하는 식으로 수정
 
다음 개발 계획
 
 

 

6-7일차  (4월 23, 24일)
구현 내용
 
1. 스킬 2 구현
2. 스킬 쿨타임 시스템 구현
3. 스킬 3 병사 구현 - 생성/자동타겟팅/자동공격/destroy/애니메이션
3-1. 병사 활성화 및 비활성화 오브젝트 풀링으로 구현
4. 스킬 1 구현
 
발생한 문제점
 
1. 몬스터 부모 클래스에서 hp를 가져다가 쓰는데 값을 복사해서 써져서 부모클래스의 HP는 바뀌지 않는 현상
2. 트리거 충돌이 일어나지 않는다.
3. 다른 스크립트에서 병사프로퍼티 접근이 안된다.
 
해결 방법
 
1. 프로퍼티를 적용시켜서 해결
2. 반드시 콜라이더에 체크(활성화) 돼있는지 확인해볼 것..
3. 세터가 protected로 돼있었음..
 
다음 개발 계획
 
1. 스킬 4 구현
2. 스킬 업그레이드 구현 - 수정 및 테스트
3. 부활 구현
 
<논의 할 것>
1. 병사 - 병사끼리 거리유지/ 병사걷기모션 꼭?/ 병사 생성 위치 방향 꼭?ㅜㅜ
2. 게임매니져를 어디에 두고 참조해야지? create empty에?
3. 영웅 부활 코드를 어디에..?게임매니져? /영웅 죽었을 때 라이프 차감 되는지
4. 레벨업이나 스킬업그레이드 유아이랑 연결 어떤식으로 진행
 

 

8일차-9일차  (4월 25, 26일)
구현 내용
 
1. 스킬 4 구현
2. 스킬 업그레이드 구현
3. 레벨 업그레이드 구현
4. 스킬4 이펙트
5. 병사 소환 이펙트
6. 데미지 랜덤화
 
발생한 문제점
 
1. 스킬 4를 코루틴 함수로 만들었는데 어떻게 해야 광역/지속딜을 제대로 구현할 것인지.
2. 전사스킬 클래스가 전사 클래스의 hp를 받아오지 않음
 
해결 방법
 
1. bool변수를 적절히 배치해 사용. update문에서 bool= false일때만 함수작동하도록/ 코루틴 안에 while 시작하면 bool = true로 바꿔주고 끝나고 다시 false로 바꿔준다. 이때 onEnable 함수에 bool변수의 값을 초기화 시켜줘야한다.
2. 전사스킬 클래스가 전사 클래스를 상속하고있었는데 이는 상속의 개념에 맞지 않음.
상속하게 되면 각각의 hp만 가질 뿐 같은 hp는 아님 - 상속 풀고 참조로 해결
 
다음 개발 계획
 
1. 영웅부활
 

 

10일차  (4월 27)
구현 내용
 
1. fade in/out (게임 시작시/죽을 때/부활시)
2. UI랑 연결하기  - 경험치, hp, 슬라이더, 텍스트 & 레벨업시 - 최대체력, 최대 경험치, 체력 충전
3. 스킬 1~4 쿨타임 ui연결
4. 스킬4  ui 스킬 업그레이드 했을 때 쿨타임 감소 적용
 
발생한 문제점
 
1. 영웅 죽을 때 fade out 효과 적용이 안됨
2. 게임 시작시 영웅 fade in 효과 넣기
3. 스킬 쿨타임 ui에 적용하는 부분 스킬 3,4와 달리 스킬1,2는 발동 조건이 달라서 구현에 어려움
 
해결 방법
 
1. 죽고 fade out 코루틴은 서서히 적용되는데 이전에 비활성화 코루틴이 먼저 실행되어 생긴 문제. 비활성화 코루틴에 딜레이를 더 많이 준다.
1-2. fade out 속도 조절 문제 5에서 0.01로 줄이니 서서히 사라진다.
2. 게임 시작 시 영웅 알파 값이 1이라서 start()에서 알파값 0으로 주고 fade in 코루틴 넣어주기
3. 스킬 2 ui는 발동 조건을 hp50 이하가 됐을 때 isSkill2on이라는 bool 변수 값을 변화 시켜 작동시켰고, 스킬 1은 쿨타임과 상관 없이 병사들이 가까이 있어 버프를 받을 때만 ui를 활성화 시키기 위해서 병사들이 충돌 범위안에 들어오면 리스트에 병사를 넣어주고, 리스트에 값이 있을 때만 ui 이펙트를 켜주는 식으로 구현
 
다음 개발 계획
 
1. 레벨업이펙트
2. 스킬 레벨업 ui 연결
 

 

11-12일차  (4월 28일-29일)
구현 내용
 
1. 스킬 업그레이드 UI랑 연결
2. 스테이지 씬 과 인게임 씬을 연결하기 - 게임매니저 관리(싱글톤)
3. 스킬 2 변경 쿨타임 부분.
4. 레벨업 이펙트 추가
 
발생한 문제점
 
1. 게임매니저 관리
2. 게임매니저가 씬이 넘어가면서 가지고 있는 오브젝트가 파괴돼서 오류 발생
2-1.비활성화 돼있는 오브젝트에는 FindObject로 접근 불가
2-2. 게임매니저와 똑같이 스킬매니저 작성했는데 실행 안됨(참조 없음 오류 뜸)
3. 체력이 50이하가 돼서 쿨타임이 적용되고, 체력이 50이상이 되면 쿨타임 창을 비활성화 해주어야하는데 활성화 돼있음
 
해결 방법
 
1. 게임매니저 스크립트를 instance화 해서(싱글톤 기법 사용) 다른 스크립트에서 그냥 접근할 수 있게 함 (public static으로 선언하고 Awake()에서 중복되면 삭제하는 코드 작성 & DontDestroyOnLoad ). 그렇게 해서 씬이 넘어가도 게임매니저가 존재하고 다시 스테이지 씬으로 넘어와도 하나의 게임매니저만 존재하게 만듬
2. 코드에 해당 오브젝트가 없으면 FindObjet로 할당해주는 코드 작성
2-1. 오브젝트를 활성화 시켜주고 씬이 넘어갈때마다 오브젝트를 할당 해주고 null이 아니면 비활성화 해주는 코드 작성
2-2. 스킬매니저 instance 화 해주는 코드가 awake에 있고, 스킬매니저 오브젝트를 할당해주는 함수도 다른 스크립트의 awake에 있어서 생긴 문제. 오브젝트 할당 함수를 start에 넣어 순서를 명확하게 처리해준다.
3. End_CoolTime()의 Set_FillAmount(0);에 큰 숫자 대입해주면 쿨타임 끝나고 회색 화면이 활성화됨
다음 개발 계획
 
마지막 점검 및 오류 수정

 

11-12일차  (4월 28일-29일)
구현 내용
1. 밸런스 조정
2. 스킬2 쿨타임 수정
3. 스킬3, 4 오류 수정
4. 스타/ 다이아 인게임 - 스테이지화면 연결
5. 승리 화면 활성화 할 때 남은 라이프에 따라 별 주기
6. 스테이지 1 클리어 시 스테이지 2 열리게 구현
7. 영웅 죽었을 때 쿨타임 UI로 표시
발생한 문제점
 
1. 스킬2 쿨타임 작동 오류 수정
2. 스킬3, 4 오류 수정 - 스킬 사용 중에 죽으면 그 뒤로 스킬 사용이 안되는 문제
 
 
해결 방법
 
1. 50퍼 이하이고 게임오브젝트가 활성화 돼있을 때만 발동하도록
2. 불값 조정/ 데미지 구현 / 스킬이 구현되는 구조 조정
->쿨타임 불값도 문제였었음
 
다음 개발 계획