본문 바로가기

전체 글

(48)
[Unreal] BehaviorTree BehaviorTree 는 언리얼에서 인공지능을 좀더 효율적으로 다루기 위해 여러 간선으로 이루어진 AI시스템입니다 애니매이션을 다룰때 사용했던 상태머신과 비슷한 개념으로 이해하시고 글을 읽으면 도움이 되실거라 생각됩니다 BehaviorTree는 데이터를 저장하는 BlackBoard와 저장된 BlackBoard 의 값을 이용, 수정하며 AI에 명령을 내리는 BehaviorTree 이렇게 두가지를 활용합니다 BehaviorTree노드 종류 Root(루트) BehaviorTree의 시작점입니다 아래로 향하는 노드는 하나만 연결 할 수 있으며 데코레이트나 서비스 노드를 부착할 수 없습니다 셀렉터(Selector) 왼쪽 자손노드에서 오른쪽 자손노드 순서로 실행되며, 자손노드중 하나가 성공한다면 나머지 자손노드는..
[C++]람다식이란 언리얼 엔진 공부를 하다 AddLambda라는 함수를 사용하게 되었습니다 C#에서 얼핏 공부했던 기억이 남아 다시 공부하고자 글을 써봅니다(C++기반으로 공부했습니다 C#과는 개념이 다를수 있습니다) 람다식이란 정식적으로 함수를 선언하고 사용하는 방식이 아닌 필요한 지점에서 함수를 만들어 사용하는 방식입니다 이과정중 접근제한자, 반환형, 식별자들이 생략되는 익명함수이며, 일회용 함수입니다 이렇다면 이러한 람다식은 왜쓰이는건가 단 한번만쓰이는 함수는 굳이 정의하지않고 필요한 부분에서 람다로 사용함으로써 재활용을 못하게 하고, 코드를 쭉쭉읽일수 있게 한다는 장점이있습니다 이러한 장점들이있지만 사용이 편리하게 하다보면 그 편리함이 오히려 단점이 되는데요 람다 같은경우는 익명 함수이기때문에 디버깅시 어떤 람다에..
[Error]쓰기용으로 열 수 없습니다 오류 Visual Studio로 작업을 하다 보면 간혹 가다가 생겨나는 오류이다 지금까지 해당 오류가 발생하면 눈물을 머금고 새로운 프로젝트를 만들어 코드를 붙여 넣기 하는 방식으로 작업을 이어나갔었다 하지만 알고 보면 그리 어렵지 않게 해결 가능한 문제였다 exe 파일이 이미 쓰기 전용으로 실행 중이라 다시 실행하는 것이 불가능해서 발생하는 오류이다 이때 exe 파일을 종료시켜주면 되는데 방법은 간단하다 cmd 창을 틀고 tasklist를 입력 Ctrl + f로 작업 중인 프로젝트 이름 검색 해당 프로젝트의 PID번호(id)를 확인 taskkill /pid 프로젝트의 PID번호(id) 위 명령어로 종료되지 않는다면 taskkill /f /pid 프로젝트의 PID번호(id)를 통해 강제 종료 위 작업을 진행한..
[C++]Struct 와 Class Struct와 Class는 매우 유사한 형태를 띠고 있습니다 Struct는 C에서부터 존재해왔던 사용자 정의 자료구조로 여러 데이터를 하나로 묶어 새로운 자료형을 만들 때 사용하는 키워드입니다 Class는 객체지향 언어에서 생겨난 개념으로 C의 Struct의 기능들 이외에 함수를 정의하는 기능 등이 추가되어있습니다 하지만 Struct도 C++로 넘어오며 함수를 정의하는 기능이나 접근 지정자 등이 추가되며 사용자들로 하여금 Struct와 Class의 사용처의 혼동을 야기합니다 또한 내부적으로 가도 Struct와 Class는 매우 비슷한 형태를 된다고 합니다 때문에 Struct와 Class의 사용처에 대한 문제는 코딩 스탠더드로 해결해야 합니다 간단하게 Struct는 데이터만 가지고 있다고 생각하면 편합니다..
[WinAPI]WinAPI프로젝트 생성 WinAPI(Application Programming interface)는 윈도우에서 사용되는 기능들의 집합을 WinAPI라고합니다 프로젝트 를 생성하는 방법부터 보여드리겠습니다(Visual Studio2019기준) [C++] -> [Windows] ->[데스크톱] ->[Windows 데스크톱 마법사] 데스크톱 애플리케이션 선택후 확인 // Win32apiFirstProject.cpp : 애플리케이션에 대한 진입점을 정의합니다. // #include "framework.h" #include "Win32apiFirstProject.h" #define MAX_LOADSTRING 100 // 전역 변수: HINSTANCE hInst; // 현재 인스턴스입니다. WCHAR szTitle[MAX_LOADSTRI..
[C++]typedef typedef는 type와 define을 합친 예약어로 말 그대로 자료형을 재정의 하는 예약어입니다 #include"iostream" using namespace std; int main() { typedef int newint; newint a; a = 1; cout
[C++]키워드(Keyward) 식별자 그리고 예약어 키워드(Keyward) C++은 자체적인 사용을 위한 미리 몇 가지 단어(int, float, this, void, namespace, while...)들을 사전에 예약해두었습니다 이러한 단어를 키워드라고 부르고 각각의 키워드들은 용도에 맞게 사용됩니다 식별자(identifier) 식별자는 여러 대상들을 구분하기 위해 만든 이름으로 변수, 함수, 클래스 등의 이름을 식별자라고 합니다 C++의 식별자는 몇 가지 규칙이 따릅니다 키워드는 식별자가 될 수 없습니다(ex: int int;불가능) 식별자는 대소문자, 숫자 및 문자로만 구성될 수 있습니다(특수기호, 공백 포함 불가능) 식별자는 대소문자 _문자로 시작해야 함(ex: int _1a; 불가능 int 1a불가능) 대문자와 소문자를 구별함(int abc; ..
메모리의 구조 Code, Data, Heap, Stack 프로그램이 실행되면 OS는 메모리에 프로그램이 돌아갈수있는 공간을 할당해주게됩니다 할당되어지는 공간은 Code,Data,Heap,Stack 이렇게 총 4가지 공간으로 나뉘어지게됩니다 Code 영역 프로세스가 실행할 코드와 매크로 상수가 컴파일 타임에 기계어의 형태로 저장되는 공간입니다 텍스트 영역이라고 부리기도합니다 프로그램이 시작하고 종료될때까지 메모리에 남아있습니다 Data영역 전역변수, static 변수, 배열, 구조체등이 저장되는 영역입니다 이영역또한 프로그램이 시작하고 종료될때까지 메모리에 남아있습니다 Stack 영역 함수의 호출과 관려있는 영역입니다 지역변수와 매개변수, 리턴값과같은 임시 메모리를 관리하는 영역입니다 우리가 흔히 알고있는 스택오버플로우 오류는 이 스택영역이 힙영역을 침범할때 발..