분류 전체보기 74

내일배움캠프 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

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

20241205 / Unity_6차  13주차 목요일  개발에 앞서 데이터 시트부터 작성하라는 말을 들었을 땐데이터 시트에 어떤 값이 들어가야 하는 지 감이 오지 않았는데 이제는 알 것 같다. NPC를 만든다고 하면 기본적인 스텟부터 행동양식까지 수치화할 수 있는 부분이 있을 것이다. 근데 NPC마다 필요한 스텟이나 행동양식이 많이 다를 텐데어떻게 일관성을 가지게끔 데이터를 짤 것인가가 고민이었다. 답은 간단했다. 그냥 전부 포함하면 된다.  NPC에 따라서 쓸모 없는 데이터가 많아진다고 해도기껏해야 float형 변수 몇백 개쯤 나오는 건 성능에 전혀 문제가 되지 않기 때문이다. 데이터로 조절할 수 없는 부분을 최소화하기만 하면 된다.

카테고리 없음 2024.12.05

내일배움캠프 58일차 TIL 최종 프로젝트 - Kingdom:NewLand 의 NPC AI

20241204 / Unity_6차  13주차 수요일  프로젝트 시작부터 갈팡질팡하던 NPC AI의 윤곽이 드디어 좀 잡힌 것 같다. 핵심은 NPC 직업(혹은 클래스)별 AI 스크립트인데,아군의 경우 부랑자, 시민, 궁수 등의 AI, 그리고 몬스터의 경우 아직까지는 기본 몬스터의 AI 밖에 없다. 코드를 재활용하고는 싶은데(특히 State Machine), 직업마다 미묘한 차이 때문에 공통 부분을 만들기 쉽지 않다. 예를 들어 아군은 벽을 통과하는데 몬스터는 통과하지 못한다거나,똑같이 달리는 상태더라도 목표 지점에 도착할 때까지 멈추지 말아야 하거나중간에 타겟을 발견하면 멈춰야 한다거나 하는 상황 차이 등이 있다. 결국 직업 별 AI에 많은 기능이 집중되게 되었다. 그래도 시간은 많지 않으니 고급스럽게 ..

카테고리 없음 2024.12.04