Vector접근성이 좋다임의 접근이 가능하다중간 삽입/삭제는 리소스의 낭비가 발생한다 임의 접근이 가능하다는 뜻은 vector v; 가 있을 때 v[3]으로 접근이 가능하다는 뜻이다 List주소값으로 연결되어있다중간 삽입/삭제가 용이하다순차 접근만 가능하다 (임의 접근 불가능) -> Sort()로 정렬 불가능 Map레드 블랙 트리로 되어있고, 시간복잡도는 logN자료들이 자동으로 정렬되어 저장된다검색이 용이하다Key-Value로 이루어져있다빈번한 삽입/삭제는 부적합하다중복키 사용 불가능하다 Unordered_map / Hash map 자동으로 정렬되지 않는다Map보다 검색 속도가 빠르다Key값이 길고 복잡하거나 유사한 값이 많은 경우 해시 충돌이 발생할 수 있다 SetKey만 저장한다중복키..
분류 전체보기
2022 KAKAO BLIND RECRUITMENT 문제가 길다간단히 하면fees라는 배열에 기본시간, 기본요금, 단위시간, 단위요금이 int로 주어지고records라는 배열에 입력된 시간, 차량 번호, 입차/출차 가 string으로 주어진다 이를 통해서 차량의 총 누적 시간에 따른 주차요금을 계산하여 배열로 반환하면 되는 문제 #include #include #include #include #include using namespace std;int Calculate(int bT, int bF, int pT, int pTF, int tT){ int fee = 0; //요금계산 if (tT bT) //기본시간 초과 { fee += bF; tT -= bT; fee += tT / pT * pTF; ..
플러그인을 사용해서 메시를 저장하고 불러오는 것을 구현해보자 먼저 Static Mesh를 클릭했을 때 등장하는 디테일창에Mesh에 관련된 버튼을 만들어본다 월드에 카메라가 있다C++클래스로 Actor 하나를 생성해주고 블루프린트를 생성하여 카메라 메시를 입혀주었다 액터를 클릭하면 디테일창이 뜬다이 디테일창에 나만의 카테고리를 추가하고필요한 기능들을 프로퍼티에 추가해보는 작업을 할 예정이다 먼저 플러그인 모듈 쪽에 Property Editor를 등록해준다 IDetailCustomization을 상속받는 클래스 FStaticMesh_Detail에IDetailCategoryBuilder& mesh = DetailBuilder.EditCategory("Mesh"); Mesh라..
언리얼에는 3가지 코멘드창 있다에디터에서 작동하는 명령창, 런타임에 작동하는 명령창, 두가지 모두 사용 가능한 명령창이 있다 기본적으로 써왔던 코멘드는 런타임 중에 라이팅을 다시 빌드해야합니다 글자를 안보이게 만드는DisableAllScreenMessages가 있다 이처럼 내가 필요한 기능을 명령으로 만들 수 있다 맵에서 이곳저곳 돌아다니며 테스트할 때 플레이어를 일일이 옮기기 귀찮으니좌표 입력 시 그 곳으로 자동으로 이동하도록 명령을 만들었다 콘솔창을 등록하는 함수들은 IConsoleManager안에 있다(저번에 디버깅 메뉴에 등록하는거는 IGameplayDebugger에 있었다)IConsoleManager는 싱글톤으로 만들어져 있어서 Get()으로 함수를 불러온다 저번과 동일하게 파라미터에 델리게..
언리얼을 사용하면서 내가 원하는 기능이 없을 때 플러그인을 제작하여 편리하게 사용할 수 있다 언리얼에서 모듈의 개념은 라이브러리와 같다 플러그인은 모듈을 제작하는 것이다 라이브러리에는 dll파일과 lib파일이 있다 dll (dynamic linked library) 프로그램과 다른 메모리 공간을 사용한다 -> 필요할 때 부르고 필요없을 때 해제할 수 있다 lib (static library) 프로그램과 같은 메모리 공간을 사용한다 -> 해당 프로그램이 로드될 때 함께 로드된다 -> 퍼포먼스를 위해서 또는 프로그램이 완전히 붙어있어야 하는 경우에 사용한다 플러그인은 언리얼 상단 탭에 편집 -> 플러그인에서 볼 수 있다 새 플러그인을 누르면 다양한 플러그인을 제작할 수 있다 시작점이 있는 클래스의 경우 IM..
Strafing이란? https://www.youtube.com/watch?v=opTRLl9yU8g 위 영상을 보면 strafing이 잘 나타나있다 적 AI가 공격을 하지 않고 대기중일 때 가만히 서서 대기하는 것이 아니라 일정 조건에 따라서 옆걸음질을 하며 대기하는 것이다 여기서 옆걸음질을 Strafing이라고 한다 이 영상을 보면 enemy가 공격을 하고 잠시 대기상태에 있을 때 가만히 서있기만 한다 그게 되게 어색하게 느껴지기 떄문에 Strafing을 구현해보았다 처음에는 먼저 어떤 조건에 따라 Strafe를 진행해야할지 감이 안잡혀서 Strafing을 구현 완료한 유튜브를 많이 봤다 AI가 일정 거리에서 타겟을 인식하면 다가와서 근처에서 Strafing을 하다가 AI가 타겟의 뒤쪽으로 가게 되면 ..
EQS 란? 언리얼 엔진의 EQS는 Environment Query System의 약자로 Behavior Tree내에서 다양한 테스트를 통해 환경을 조사하고 테스트 결과를 바탕으로 어떻게 진행할 것인지 결정하는 시스템을 말한다 Querier는 질의자로, 해당 EQS를 실행하게 될 객체를 의미한다 주로 적 AI에게 Behavior Tree를 주고 그 안에서 Run EQS 를 하게 되니 Querier는 적AI가 되게 된다 Debug EQS가 잘 돌아가고 있는지 디버깅 하려면 실행 후 플레이어에 빙의한 뒤 ' (단따옴표) 키를 눌러 디버깅 모드로 들어가고 키패드에 3번을 누르면 EQS디버깅 모드가 된다 디버깅 모드 우측 상단에 Debug Actor가 뜨는데 내가 확인하고 싶은 AI가 Deubg Actor로 잘..
객체 지향 프로그래밍 객체 지향 프로그래밍은 4가지 특징이 있다 상속, 다형성, 추상화, 캡슐화이다 이 특징들에서 공부하다보니 가상함수에 대해서 자세히 공부해야겠다는 생각을 했다 가상 함수 가상함수란? 부모 클래스를 상속받을 클래스에서 재정의할 것으로 기대하고 정의해놓은 함수다 virtual 키워드로 함수 앞에 붙여서 가상함수를 나타내고 재정의는 override키워드를 사용하여 할 수 있다 class Parent { public: virtual void Func1(); } class Child :public Parent { public: virtual void Func1() override; } 바인딩이란 함수나 변수의 주소가 결정되는 것을 말한다 Early binding( = static binding..
디자인 패턴이란, 개발자들이 어떠한 상황에서 어떠한 방식으로 설계를 하면 좋은지를 정리해놓은 것이다 디자인패턴은 크게 생성 / 구조 / 행위 로 나누어진다 Coupling 양쪽 코드 중에서 한 쪽이 없으면 코드를 이해할 수 없을 때 둘이 커플링되어있다고 본다 양쪽 코드 중에서 한쪽을 삭제했을 때 다른 한쪽에 문제가 발생한다면 둘이 커플링 되어있다고 본다 DeCoupling 커플링을 해제하는 것 커플링이 적은 코드일수록 변경이 나머지 게임 코드에 미치는 영향이 적다 생성 Builder Prototype Factory Method Abstract Factory Singleton 구조 Bridge Decorator Facade Flyweight Proxy Composite Adapter 행위 Mediator ..