전체 글 77

스파르타 코딩클럽 5주차 KPT 회고록

이번 프로젝트는 선택 구현 사항을 많이 구현 못해서 아쉬움이 많이 남는 거 같다. Keep 필수 구현 과제의 경우 역할 분배가 잘 되었다 생각한다. Problem 강의를 꼼꼼하게 듣는 편이라 많이 늦어져 프로젝트랑 같이하려니 힘들었다.필수 구현 과제 구현에 너무 많은 시간이 소요되었다. Try 강의를 보다 모르는 부분이 있으면 튜터님께 빠르게 물어보는 것이 중요할 것 같다. 프로젝트에 집중할 수 있는 시간 확보를 위해 최대한 강의는 빠르게 들어야할 것 같다.기본 지식(이번의 경우 싱글톤)에 대한 부족한 이해가 구현에 발목을 잡았기 때문에 최대한 역시나 공부를 통해 기본 지식을 잡아두는 것이 중요할 것으로 보여진다.

KPT 회고록 2024.05.23

5.22 - TIL 싱글톤

금일은 프로젝트로 인해 오늘 알게된 사실을 짧게 서술한다. 프로젝트를 만들면서 싱글톤을 쓸 때 문제가 있었는데 게임 매니저를 싱글톤으로 만들고 게임매니저가 있는 씬을 다시 로드 했을 때 연결해둔 오브젝트들이 다 해재되어 none으로 변하는 현상이다. 이를 방지하기 위해서 좋은 것은 일단 게임 매니저가 있는 씬을 다시 시작하지 않도록 인트로 씬에 넣는 것이다. 이렇게되면 테스트시에 인트로부터 해야한다는 귀찮음은 늘 수 있지만 보다 안전하게 관리할 수 있다. 만일 게임매니저를 싱글톤으로 구현해뒀고 게임매니저가 있는 씬을 재로드한다면 싱글톤은 하나만 존재해야하기에 새로 만들어지는 애가 파괴가 되고 씬에 있던 애들도 파괴가 되기 때문에 연결을 해둔 게임 오브젝트가 파괴되어 의도대로 동작하지 않을 수 있다. 또한..

카테고리 없음 2024.05.22

5-21 TIL - 투사체 생성 관련 연구

오늘은 아래의 코드에 대한 분석을 적을 것이다. 아래의 코드는 투사체 생성을 주관하는 코드이다.  private void OnShoot(AttackSO attackSO) { RangedAttackSO rangedAttackSO = attackSO as RangedAttackSO; if((rangedAttackSO == null)) return; float projectileAngleSpace = rangedAttackSO.multipleProjectilesAngle; int numberOfProjectilesPerShot = rangedAttackSO.numberOfProjectilesPerShot; float minAngle = -..

카테고리 없음 2024.05.21

5-20 TIL 스크립터블 오브젝트

스크립터블 오브젝트 (ScriptableObject)  스테이지 별로 나오는 몬스터 프리펩을 등록해두면 편하지 않을까? 아니면 오브젝트나 컴포넌트들을 등록해두고 바로바로 쓸 수 있는 읽기 용도의 컨테이너가 있으면 어떨까 데이터를 저장하고 관리를 유연하게 해주는 데이터 컨테이너의 역할을 하는 것이 스크립터블 오브젝트이다. 또한 A 몬스터가 100마리가 있는데 전부 같은 정보를 가지고 있다면 메모리 낭비가 심해진다. 공통의 정보라면 참조를 통해 메모리 절약을 할 수 있지 않을까? 이또한 스크립터블 오브젝트서 가능하다. 하나의 스크립터블 오브젝트를 여러 게임 오브젝트에서 참조하여 재사용 가능하다. 다만 스크립터블 오브젝트를 사용하기 위해서는 ScriptableObject 클래스를 상속받아 사용해야한다. 사용 ..

카테고리 없음 2024.05.20

5.17 - TIL - Input System

Input System을 활용한 코드들에 대한 이해 Input System은 코드를 기능 단위로 분리하고 입력과 입력에 대한 처리를 분리하고자 사용한다. 코드의 흐름을 조금 되짚어봐야할 필요가 있는데 TopDown 컨트롤러와 PlayerInput 컨트롤러와 TopDownMovement 클래스가 있다. 먼저 TopDown 컨트롤러는 이름대로 컨트롤러, X박스나 플스의 컨트롤러를 생각해보자 일단 컨트롤러의 키매핑은 하지 않고 그 컨트롤러의 껍데기 만을 만드는 과정으로 이해하면 좋다. 만일 뭐 이동을 해야한다. 그러면 이동을 위한 버튼을 만들어줘야한다. 그 버튼을 event Action을 이용하여 만드는 것이다. 그리고 껍데기면 누를 수 있도록 Action을 Invoke 해주는 것이다. 그리고 엉뚱하게 누르면..

카테고리 없음 2024.05.17

5.16 - TIL UI

UI에 대한 고찰 이전에 UI에 대해서는 이미 이전 포스팅에 적어뒀다 추가적으로 알아두어야할 것을 기술하면 피봇은 UI 요소의 왼쪽 하단을 (0, 0) 오른쪽 상단을 (1, 1)로 하여 피봇의 위치를 정할 수 있고 피봇은 UI 위치의 기준이 된다. 캔버스 내에서의 UI는 앵커까지의 거리가 고정이 된다는 사실을 잘 이용하면 좋다. UI Scale Mode를 Scale With Screen Size로 하여 1920 x 1080으로 하면 FHD, QHD, 4K에 대응하여 UI 요소가 알맞게 위치를 잡고 있다 허나 위에 서 말했듯이 기본 적으론 앵커가 중앙에 있기 때문에 폰과 같은 해상도에선 UI위치가 달라질 수가 있어 각 UI마다 앵커를 다루게 두어 어떠한 해상도에서도 나름의 형태를 유지할 수 있도록 조치를 ..

카테고리 없음 2024.05.16

5.14 TIL - 벡터

오늘은 벡터부분을 아주 핵심적으로 요약하여 서술한다. 벡터는 화살표를 생각하면 좋고 방향과 크기(화살표 길이)를 가짐 시작점을 원점인 (0, 0)으로 고정하자는 약속을 하니 X, Y 좌표로 벡터를 나타낼 수 있게 됨 좌표로 나타낼 수 있게 되면서 벡터는 유니티서 위치를 나타내는데도 사용됨 벡터의 덧셈이나 뺄셈은 x는 x끼리 y는 y끼리 계산을 하면 된다. 뺄셈에서 중요하게 기억해야할 점은 B좌표에서 A좌표를 빼면 A에서 B로 향하는 벡터가 구해지고 이를 정규화를 거치면 크기가 1인 방향벡터를 구할 수 있게 된다. 이를 통해 뭐 몬스터가 플레이어를 따라갈 수 있게 할 수 있다. 곱하기의 경우에도 기억해야할 포인트가 있다. 곱하기를 하게되면 방향은 유지되고 크기만 바뀐다 이 곱하기 성질을 이용하면 벡터를 이..

카테고리 없음 2024.05.14

유니티 아크탄젠트(Atan2)에 대하여

*해당 포스팅은 스파르타코딩클럽의 강의를 기반으로 작성했습니다* 먼저 아크탄젠트에 대해 알아보기 전에 삼각함수에 대해 알아볼 필요성이 있다.우리가 흔히 알고 있는 공식이다. 삼각함수는 각도를 통해 삼각형들의 변들 간의 비율을 알아낼 수 있는 함수이다. 여기서 우리가 주목해야할 것은 탄젠트이다. 탄젠트의 경우엔 밑변 분의 높이의 값을 가지고 있는데 밑변을 X 값, 높이를 Y 값으로 볼 수도 있다. 그렇게 본다면 탄젠트는 비율이 아닌 좌표로 나타낼 수 있게 된다. 각도를 통해 좌표를 알아낼 수 있다는 것이고 이를 역으로 생각해보면 좌표를 통해 각도 역시 알 수가 있게 된다. 이는 거꾸로 했다하여 탄젠트의 역함수인 arctangent 가 된다. 다시 말하자면 각도를 통해 비율을 구하는 것이 삼각함수이며 이를 ..

유니티 2024.05.13

5-10 TIL (Quaternion)

인스팩터 창에선 회전 정보가 x, y, z의 값으로 나와있던데 왜 사원수(Quaternion)을 알아야할까? 왜냐면 x, y, z로만 이루어진 Vector3를 쓰면 짐벌락이라는 문제가 있기 때문이다. 자세히 알아보기엔 어려우니 간단하게 극단적인 각도로 회전할때 하나의 축이 사라져서 회전이 고장나게 되는 문제이다. 그렇기 때문에 Quaternion이라는 사원수의 개념을 사용한다는 것이다. 이는 빠르고 짐벌락 문제도 존재하지 않는다. (x, y, z, w) 의 값으로 표현한다. 다만 직접 x, y, z, w 의 값을 설정해서 사용하는 것이 아니라 내장 함수를 이용하는 것이다 좋다. 다만 직접적으로 값을 넣어주진 않지만 회전값이 없다는 의미의 Quaternion.Identity는 사용한다. 그러면 내장함수에 ..

카테고리 없음 2024.05.10

5.9 - TIL (옵저버 패턴)

옵저버 패턴 (PubSub 패턴) 이벤트에 함수를 등록(구독)을 해 사용하는 패턴이다.특정 이벤트가 발생하면 등록해둔 함수를 수행하게 된다. 델리게이트를 생각하면 좋다. 대리자에게 함수를 등록해두고 이벤트 발생시 해당 함수들을 Invoke를 통해 수행하는 것이다. 이번 프로젝트에선 OnMoveEvent라는 Action 델리게이트가 그 역할을 수행한다 저번에 글에 적었듯이 Action 델리게이트는 반환값을 가지지 않고 매개변수만 가지는 델리게이트이다. OnMoveEvent는 움직이 발생하는 이벤트이고 이 이벤트가 발생했을 때 어떠한 동작이 있었으면 좋을까 고심하고 필요한 동작을 함수로 만들어 이 델리게이트 함수에 함수들을 등록해주는 것이다. 그러면 만일 OnMoveEvent 이벤트가 발생하면 등록해둔 함수..

카테고리 없음 2024.05.09