1. 오늘의 알고리즘 코드카타 - 최소직사각형
답안:
//이번엔 지금 수준에서 풀기 어려운 내용이다.
//Math기능은 거의 다뤄본 적이 없어 인터넷을 찾아봐야 했으며
//풀이를 보고 공부한 내용을 정리하겠다.
using System;
public class Solution {
public int solution(int[,] sizes) {
int answer = 0;
//가로와 세로 길이 중 최대값을 저장하는 함수
int max1 = 0;
int max2 = 0;
//배열 sizes를 순회하면서 가로와 세로 길이를 비교, 최댓값을 구함
for(int i = 0; i < sizes.GetLength(0); i++)
{
//명함 가로와 세로 길이 둘 중 더 큰 값을 Math.Max를 사용 비교, 큰 값이 max1
max1 = Math.Max(max1, Math.Max(sizes[i,0], sizes[i,1]));
//명함 가로와 세로 길이 둘 중 더 작은 값을 Math.Min으로 비교, "더 큰"값이 max2
max2 = Math.Max(max2, Math.Min(sizes[i,0], sizes[i,1]));
}
//위 과정 후에는 명함 가로 길이 중 가장 큰 값 max1과 가장 작아질 수 있는 세로 max2
//지갑 크기 계산
answer = max1 * max2;
return answer;
}
}
2. 오늘의 작업물
오늘은 공격 기능을 구현하려고 했다.
그런데 많은 트러블 슈팅이 발생 했는데,
우선 첫째로 공격 방향.
여태 만들어 본 것은 마우스 포인터를 향해 공격하는 방식.
그런데 이번에는 8방으로 이동하며 4방을 바라보는 플레이어가 바라보는 방향으로 발사해야 하는데,
처음에는 단순히 플레이어를 움직이는 인풋을 받으면 되겠다고 준비했는데,
인풋은 플레이어가 이동하기 위해 W+A 등의 대각 이동이 가능하기 때문에 원하는 대로 가능하지 않았다.
그래서 이를 어떻게 할까 고민하다가, 애초에 방향을 바라보는 애니메이션을 위해 캐릭터 애니메이터로 보내는 direction값을 공격 컨트롤러에서도 받아서 이를 방향으로 전달하기로 했다.
그런데 이러면 또 발사하면서 생성된 프리팹이 바라보는 방향으로 나아가는 모습처럼 회전하지 않는다.
그래서 방향을 전달하면서 동시에 쿼터니언 값까지 전달해주는 좀 비효율적인 모습이 되었다.
public void SetAttackDirection()
{
//애니메이터의 파라미터 값을 받음
float direction = animator.GetFloat("Direction");
//기본 스프라이트가 아래를 바라보므로
attackDirection = Vector2.down;
if (direction == 0f)
{
attackDirection = Vector2.up;
rotation = Quaternion.Euler(0, 0, 90);
}
else if (direction == 1f)
{
attackDirection = Vector2.down;
rotation = Quaternion.Euler(0, 0, 270);
}
else if (direction == 2f)
{
attackDirection = Vector2.right;
rotation = Quaternion.Euler(0, 0, 0);
}
else if (direction == 3f)
{
attackDirection = Vector2.left;
rotation = Quaternion.Euler(0, 180, 0);
}
}
그래서 결국 어거지로 원하던 조건에 맞는 공격 방향 설정 메서드는 만들었다.
하지만 진작 작업물을 합치며 게임플레이를 연결해보니, 이렇게 싸우는 것이 많이 불편해 보인다.
실제 아이작의 번제는 방향키로 사격방향을 조절하는데, 아예 이렇게 바꾸는 것을 논의해봐야 할 것 같다.
사실 처음부터 이렇게 하는 게 편했을 것 같기는 하다. 괜히 공격 방향과 캐릭터의 시선 방향을 맞추려고 했다.
만약 방향키 조작으로 바뀌게 된다면 공격 방향에 맞춰 캐릭터 머리도 회전하도록 하는 것을 준비할 생각도 해보고 있다.
실제적인 공격 로직에 경우에는, 처음에는 혼자 만들어 보았는데.
요구하는 기능이 아이템을 주워서 이를 통해 공격 로직을 변경해야 하고, 이에 별개의 플레이어 + 아이템 스탯이 적용되야 한다. 이는 생각보다 많이 어려웠다.
구현하는 과정에서 완전 스파게티 코드가 되어갔고, 결국 구현한 것은 상당히 불편하게 작동해야 했다.
이를 보고 비슷한 기능을 준비하던 다른 팀원님의 도움으로 매니저와 같은 기능들에 대해 설명을 듣고 해당 팀원님의 코드를 기반으로 재작업을 시작해 결국 더 나은 방법으로 구현되기는 했다.
하지만 여전히 코딩 방법 자체를 몰라 제대로 구현 못하는 문제들이 많다.
씬을 넘어가면서 가진 스탯의 정보와 무기의 정보를 얻기 위해 모든 정보는 매니저에서 관리하며,
그래서 구현된 공격 구조는 어택 컨트롤러에서 공격 시도를 하면 매니저에 지정된 공격 메서드가 작동하고 이를 받는 무기 매니저에서 현재 해당된 무기 정보에 맞는 투사체가 오브젝트 풀 매니저를 통해 소환되고 이 투사체가 가지고 있는 코드를 통해 개별의 공격 로직으로 작동하는 방법? 이라고 이해하고 있다.
그렇게 구현된 기본 공격의 모습.
이런 매니저와 같은 코딩은 처음 해보는 나머지 굉장히 해매고 있지만, 배우는 것도 많다.
처음으로 실력있는 팀원들과 하는 만큼 한계를 인지하되 많이 배우고 가는 것이 내게도 좋을 것이다.
'TIL' 카테고리의 다른 글
[TIL]2024-2-16 / 38일차 - 팀 과제 마무리 (0) | 2024.02.16 |
---|---|
[TIL]2024-2-15 / 37일차 - 팀 과제 4일차 (1) | 2024.02.16 |
[TIL]2024-2-13 / 35일차 - 팀 과제 2일차 (1) | 2024.02.13 |
[TIL]2024-2-08 / 34일차 - 숙련 주차 팀 과제 시작 (0) | 2024.02.08 |
[TIL]2024-2-07 / 33일차 - 개인 공부 복습 날 (1) | 2024.02.07 |