2024/12 13

내일배움캠프 69일차 TIL 최종 프로젝트 - Context Menu

20241219 / Unity_6차  15주차 목요일  Context Menu는 스크립트 컴포넌트의 특정 메서드를Unity Editor에서 쉽게 실행할 수 있도록 해주는 기능이다. 사용법은 메서드에 [ContextMenu] 속성을 붙이면 Unity Editor에서 해당 메서드를마우스 오른쪽 버튼이나 더보기 버튼을 눌러 나오는 메뉴에서 실행할 수 있다. [ContextMenu("DebugFunc/Die")] private void DebugFunc1() { TakeDamage(1000, false); }  참고로 Context Menu 속성을 사용할 메서드는 반환값은 있어도 되는데매개변수가 있으면 메뉴에 나타나지 않는다. 그리고 private 한정자에서도 동작하니 은닉성은 걱정 없겠다.

카테고리 없음 2024.12.19

내일배움캠프 68일차 TIL 최종 프로젝트 - LinkedList

20241218 / Unity_6차  15주차 수요일  이전에 Build Event Controller를 만들었을 때 LinkedList를 사용했었다. LinkedList특징노드 기반으로 요소를 연결하는 제네릭 리스트.System.Collections.Generic 네임스페이스에 포함.장점빠른 삽입/삭제: 중간 삽입/삭제가 리스트 끝에서도 빠름 (O(1)).크기 제한 없음: 메모리가 허용하는 한 무제한으로 요소 추가 가능.단점느린 접근 속도: 특정 인덱스에 접근하려면 순차적으로 탐색해야 하므로 느림 (O(n)).추가 메모리 사용: 각 노드에 대한 포인터 저장 때문에 메모리 오버헤드가 있음. 급하게 짰던 코드라 문제가 좀 많아서 코드를 손보면서기존에 List로 선언한 freeWorkers도 LinkedLi..

카테고리 없음 2024.12.19

내일배움캠프 67일차 TIL 최종 프로젝트 - 읽기 전용 인터페이스

20241217 / Unity_6차  15주차 화요일  현재 프로젝트의 NPC AI는 영역 좌표를 기반으로 동작한다. 부랑자는 캠프 영역 내를 배회하고, 궁수는 최외곽 벽을 기준으로 일정 거리 내의 영역을 순찰하며,아군 NPC들의 이동 범위를 제한할 기지 영역은 벽이 지어지거나 파괴되면 크기가 바뀔 수 있다. 그렇기 때문에 맵의 모든 영역을 관리하는 컨트롤러가 따로 필요하다.  영역 컨트롤러 안에는 위에서 설명한 여러 영역에 대한 정보가 들어가야 하므로각 영역을 나타낼 클래스를 내부에 따로 정의해야 한다. 이런 영역에 대한 편집은 무조건 컨트롤러 안에서만 가능해야 하는데,영역 클래스 인스턴스의 필드를 읽는 것은 컨트롤러 바깥에서도 가능해야 한다. 쉽게 말해 컨트롤러 클래스는 다음과 같이 구현해야 한다.p..

카테고리 없음 2024.12.17

내일배움캠프 66일차 TIL 최종 프로젝트 - SOLID 원칙

20241216 / Unity_6차  15주차 월요일  SOLID 원칙은 객체지향 설계에서 코드의 유지보수성과 확장성을 높이기 위한 다섯 가지 설계 원칙이다.단일 책임 원칙(SRP): 클래스는 하나의 책임만 가져야 한다.개방-폐쇄 원칙(OCP): 클래스는 확장에 열려 있고, 수정에는 닫혀 있어야 한다.리스코프 치환 원칙(LSP): 자식 클래스는 부모 클래스를 대체할 수 있어야 한다.인터페이스 분리 원칙(ISP): 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 한다.의존성 역전 원칙(DIP): 고수준 모듈이 저수준 모듈에 의존해서는 안 된다. 이제 와서 이런 기초적인 이론에 대해 왜 상기하는가 하면내가 설계한 코드가 위 원칙을 위배하여 실시간으로 문제를 겪었기 때문이다. public abstr..

카테고리 없음 2024.12.17

내일배움캠프 65일차 TIL 최종 프로젝트 - 게임 플레이 경험

20241213 / Unity_6차  14주차 금요일  Kingdom : New Lands를 계속 플레이 해 보니 AI에 추가해야 할 동작들이 더 많이 있는 것을 발견했다. 궁수는 중간중한 한 명씩 본진 내부를 횡단하는 것이 보였고(무작위 이동으로 인한 결과는 아닌 것 같음), 작업자도 일이 없을 때 그러했다. 물론 지금은 그대로 두고 먼저 플레이 사이클에 필요한 다른 것(인트로, 패배, 클리어 등)들을먼저 개발한 후에 다시 고민해 봐야 할 것 같다.

카테고리 없음 2024.12.16

내일배움캠프 64일차 TIL 최종 프로젝트 - Build Event Controller

20241212 / Unity_6차  14주차 목요일   에서는 플레이어가 건물을 지을 때 돈을 지불하여 건설 예약을 걸어 두면일을 하지 않는 작업자가 알아서 와서 건물을 짓는다. 하나의 건물에는 최대 2명의 작업자가 와서 건설할 수 있으며,한번에 2명을 부르는 것이 아니라 한명을 먼저 부르고 일정 시간이 지나면 한 명을 더 부른다. 당연하게도 1명이라도 작업자가 붙은 건물은1명도 붙지 않은 건물보다 작업자 호출의 우선순위가 밀린다. 이상을 종합해 봤을 때, 작업자의 건설 명령을 컨트롤하는 스케쥴러가 필요하다는 결론을 내렸다. 설계 핵심BuildingController의 건설 요청 관리:BuildingController에서 발생한 건설 요청 이벤트를 처리.요청된 Building을 리스트에 추가.건설 작업..

카테고리 없음 2024.12.12

내일배움캠프 63일차 TIL 최종 프로젝트 - Gizmo

20241211 / Unity_6차  14주차 수요일  유니티에서 Gizmo란,Scene View에서 오브젝트의 상태나 위치를 시각적으로 표현하기 위한 도구다. Gizmo는 게임플레이에는 영향을 미치지 않으며, 오직 Scene View에서만 표시된다. NPC AI를 디버깅하기 위해 MonoBehaviour에 정의된 OnDrawGizmos 함수를 사용했다.private void OnDrawGizmos(){ Handles.Label(NPC.transform.position + Vector3.up * 1, currentCommandText, NPCTest.guiStyle);} 참고로 guiStyle은 다음과 같이 따로 설정했다.public class NPCTest : MonoBehaviour{ pu..

카테고리 없음 2024.12.11

내일배움캠프 62일차 TIL 최종 프로젝트 - 사소한 리팩터링

20241210 / Unity_6차  14주차 화요일  지금까지는 ObjectPool을 사용하면서 같은 유형의 Object는 하나의 Pool을 공유하게 만들었었다. 몬스터를 예로 들자면 모든 몬스터의 공통 부분을 하나의 프리팹으로 만들어 Pooling하고모델링이나 애니메이션같이 서로 다른 부분은 공통 부분의 자식 오브젝트로 그때그때 할당하는 방식이다. 몬스터가 활성화/비활성화 될 때마다 오브젝트를 생성/소멸시키는 과정이 들어갔으니사실 ObjectPool의 장점을 반만 사용하고 있었다고 볼 수도 있다. 그럼에도 불구하고 이런 방식을 쓴 이유는 이전 프로젝트에서의 좋은 경험 때문이었다. 비슷한 프리팹들을 위해 ObjectPool을 따로따로 만든 다는 것이 비효율적으로 느껴졌었고그 때는 부모 오브젝트와 자식 ..

카테고리 없음 2024.12.10

내일배움캠프 61일차 TIL 최종 프로젝트 - DOTween

20241209 / Unity_6차  14주차 월요일  최종프로젝트는 지원비를 받았기 때문에 DOTween Pro를 사용할 수 있게 되었다. Pro버전은 컴포넌트를 지원하며, Play  버튼을 눌러 에디터 편집창에서 미리 볼 수 있다. Active/Inactive 전환시에만 애니매이션이 들어가는 UI같은 경우에는DO Tween Visual Manager를 사용하여 코드를 작성하지 않고도 애니메이션을 사용할 수 있다. 하지만 애니메이션 효과를 함수로 호출해야 하는 경우가 많다면무료버전과 같이 코드로 작성해야 한다. private void DOBlown(){ int resolution = 20; // 포물선의 세밀도 Vector3 startPos = NPC.transform.position; ..

카테고리 없음 2024.12.09

내일배움캠프 60일차 TIL 최종 프로젝트 - Projectile Data 작성

20241206 / Unity_6차  13주차 금요일  NPC에 이어서 투사체 관련하여 DataSheet를 작성하게 되었다. 이번에는 AI랑 달리 기능적인 부분을 오로지 Data로만 구분 가능하도록 만들고자 했다.(대신에 Collider나 RigidBody는 개별 프리팹에 달아 두고 값을 조절한다.) 그러려다 보니 모든 종류의 투사체에 대해 Data에서 대응이 가능해야 했다. 일단 Kingdom : New Lands에서 몇가지 예를 들자면화살 - 단일 적에게 적중 시 피해를 입히고 사라짐 or 땅에 떨어지면 사라짐투석기 - 경로 상의 모든 적에게 피해, 땅에 떨어져도 사라지지 않고 일정 시간 후 사라짐근접공격 - 범위 내의 모든 적에게 피해, 잠깐 생겼다 사라짐 현 프로젝트 컨셉인 SF에 맞게 예를 들자..

카테고리 없음 2024.12.07