1. 오늘의 알고리즘 코드카타 - 문자열 내림차순으로 배치하기
답변 :
using System;
//정수 내림차순으로 배치하기 때 사용한 방법이 그대로 가능 할 것
public class Solution {
public string solution(string s) {
string answer = "";
char[] temp = s.ToCharArray();
Array.Sort(temp);
Array.Reverse(temp);
answer = new string(temp);
return answer;
}
}
2. 오늘의 작업 진행
사실 Feature에다 뭉뚱그려진 BugFix 항목들이 좀 많다.
머지 이후 몬스터 구현 머지에서 맵을 상정 못한 탓일까, 몬스터 구현 방법에 대한 계획이 잘못 된 탓일까
그 이후부터 많은 버그가 나고 있다.
우선 처음 몬스터 구현 머지를 시도할 때 처음보는 문제가 발생했다.
깃에서 없는 폴더의 주소를 계속 접근 시도를 하여 컨플릭트가 발생하고 meta파일들이 자꾸 이상이 생기며 49개의 컨플릭트가 발생했다.
다 이미지 주소 접근이 제대로 안되는 문제로 튜터님과 머리를 맞대어 고민해 보았지만 결국 원인은 제대로 못 찾고
물리적으로 컨플릭트 나는 요소들을 다 Discard 한 후 이미지 파일들만 다시 받아 지정해 주어야 했다.
카메라 코드 수정
원래 있던 카메라 코드도 큰 문제는 없었지만 플레이 테스트를 하며 카메라가 좀 더 Y축으로 위를 바라보았으면 좋겠다는 생각이 들었다.
그래서 기존의 코드를 좀 수정하기로 했다.
Vector3 dir = player.transform.position - this.transform.position;
Vector3 moveVector = new Vector3(dir.x * cameraSpeed * Time.deltaTime, dir.y * cameraSpeed * Time.deltaTime, 0.0f);
this.transform.Translate(moveVector);
기존에 이런 식으로 플레이어를 추적하던 카메라를
TargetPos = new Vector3(
player.transform.position.x + offsetX,
player.transform.position.y + offsetY,
player.transform.position.z + offsetZ
);
transform.position = Vector3.Lerp(transform.position, TargetPos, Time.deltaTime * cameraSpeed);
이런 식으로 offset을 넣어주어 카메라 위치를 조정할 수 있도록 하였다.
맵 제작
챌린지 / 스텐다드 / 베이직 난이도 별로 5개 맵 씩 총 15개 + 스타팅 존 + 보스방(미구현) 맵이 필요했는데
이 15개의 던전의 기믹과 레이아웃을 마무리 하였다.
맵마다 사진과 간단 설명만 달고 넘기겠다.
스타팅 존
베이직 맵들 <기믹 : 단순한 전투와 적의 탄막을 막는 벽들>
베이직 1 - 조작감 익히기
베이직 2 - 탄막을 막는 기둥
베이직 3 - 언덕 전투 개념 (언덕 시스템 구현 마저 해야함)
베이직 4 - 위 아래로 나뉠 수 있는 전장과 위치 선정
베이직 5 - 빠른 무빙 필요
스텐다드 맵들 <기믹 : 충돌 판정을 이용한 장애물을 몸으로 이동>
스텐다드 1 - 장애물 성의 입구 - 베이직 보다는 어려운 조작 테스트
스텐다드 2 - 장애물로 막힌 길
스텐다드 3 - 높낮이 차이로 사격각 제한 / 장애물의 무게에 따른 밀기 속도 차이로 경로 선택
스텐다드 4 - 장애물 뒤에 엄폐하며 이동
스텐다드 5 - 장애물 코스
챌린지 맵들 <기믹 : 큰 장애물 없이 탄막 피지컬 싸움>
챌린지 1 - 넓은 공터 / 막히지 않는 적의 사격각
챌린지 2 - 작은 이동 범위
챌린지 3 - 난간 위의 적과 벽 사이의 적
챌린지 4 - 탭 댄스 혹은 장애물 강행 돌파
챌린지 5 - 피지컬 테스트 존
버그 수정 간략 설명
해결 했던 버그들 중 기억에 남는 몇 가지만 적어두고 가려 한다.
다음 씬에서부터 무기가 고장나던 버그
로드 씬으로 다음 맵을 불러오는 특성상 심각한 버그
알고보니 오브젝트 풀을 가진 게임 매니저는 DontDestroyOnLoad가 되어있지만,
오브젝트 풀이 소환하는 클론 오브젝트들이 같이 따라가지 않았던 것
그래서
public static ObjectPool Instance;
생략...
DontDestroyOnLoad(obj);
}
poolDictionary.Add(pool.tag, objectPool);
if (objectPool == null)
{
Instance = this;
}
}
오브젝트 풀이 만들어내는 코드 내에도 DontDestroyOnLoad를 사용하고 만약 오브젝트 풀이 null 상태라면 인스턴스를 하도록 코드를 추가해 주었더니 해결되었다.
하지만 단순한 이슈로 발사된 탄막들이 다음 맵으로 빠르게 넘어가면 다음 맵에도 유지되고 있다는 문제가 있다.
이 부분은 다음 맵으로 넘어가는 문에서 로드 씬 이전에 해결하는 방법을 생각해 봐야겠다.
적이 플레이어를 인식 못하는 문제
이 부분은 적의 코드를 내가 쓴 것이 아니라 해당 팀원이 튜터에게 물어보고 와서 명쾌하게 해답을 얻었다.
나는 플레이어 테그를 추적하는 것이라고 알아들었었는데 알고보니 레이케스트로 플레이어라는 명칭의 레이어를 추적하고 있던 것이고,
계단과 문에서 층수가 바뀔 때 레이어를 변경시켜서 히트 판정을 바꿔보려던 코드와 충돌하게 된 것.
우선은 그 코드 줄을 지움으로써 사격은 다시 멀쩡하게 진행 되었다.
하지만 이를 바꿀 수 없다는 것을 알게 되었으니 높이 차이를 이용하려던 맵들에서 어떻게 이를 해결해야할 지는 생각해 보아야 한다.
...메모리 리크 문제?
처음보는 이슈가 나타났다. 적들과 맵이 충돌이 이제 나지 않아 머지를 했는데
그 다음부터 맵에 적을 배치하면
해당 내용의 경고문들이 지속적으로 알 수 없는 상황 조건에 튀어나온 다는 것이었다.
게임 플레이 테스트 중에는 나타나지 않았으며 나오는 조건도 정확히 알 수 없었기에
인터넷 검색을 열심히 하던 중 corrupt된 프리팹이 문제 일 수도 있다는 말에 일부 잘못된 프리팹들을 찾아 해결했으나 문제는 해결되지 않았고
적 종류 중 하나가 생성될 때 스탯을 override 형식으로 받는 것이 아닌 Add로 계속하여 추가하는 것을 발견하여 이를 해결하니 더 이상 경고문이 뜨지 않아 해결된 것이라고 생각했다.
그렇지만 다른 종류의 적들을 배치하기 시작하자 또 다시 문제가 나타나기 시작했고
사실 살펴보니 적 하나하나 플레이어 급으로 많은 코드들이 들어가 있어 실제로는 전혀 사용되지 않는 다양한 더미 코드 파일들을 많이 가지고 있었기 때문에 (정지된 적이며 무기 스프라이트가 없으나 이를 움직이거나 이동하는 코드들)
이를 삭제한 영향으로 어딘가 코드에 루프가 생긴 것인지 그 원인을 쉽게 알 수 없었다.
이 때문에 대부분의 시간을 버그 해결과 해당 문제를 알아보는데 허비해 버렸고,
진작 중요한 기능 구현에 너무 소홀해져버렸다.
안그래도 팀원이 한명 줄어 3명. 그 중 코딩을 할만한 인원은 2명. 그 중 버그 테스팅을 할만한 건 나 1명. 맵 작업이 가능한 인원이 나 1명이란 걸 생각했을 때 수요일 오전 제출시간이 너무나 촉박해져 버렸다.
시간에 쫓기는걸 싫어하는데 이렇게까지 되어버리니 또 머리가 아파오기 시작한다...
'TIL' 카테고리의 다른 글
[TIL]2024-1-31 / 28일차 - Unity 팀 과제 발표, 회고 (1) | 2024.01.31 |
---|---|
[TIL]2024-1-30 / 27일차 - Unity 팀 과제 마지막 마무리 단계 (1) | 2024.01.30 |
[TIL]2024-1-26 / 25일차 - 팀 과제 맵 이동 구현 (2) | 2024.01.26 |
[TIL]2024-1-25 / 24일차 - 레벨 그리드 맵 / 그래픽 세팅 (1) | 2024.01.26 |
[TIL]2024-1-24 / 23일차 - Unity 입문 팀 과제 시작 (2) | 2024.01.24 |