플러그인을 사용해서 메시를 저장하고 불러오는 것을 구현해보자 먼저 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..
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로 잘..
Normal Impuse block 되었을 때의 입사각 어디에서 쐈는지 알아낼 때 사용한다 Collision Preset Query Only 겹침 연산 Physics Only 물리 연산 Collision Enabled 겹침 연산 + 물리 연산 Simulation Generate Overlap은 충돌되는 것 모두(양쪽 다) 켜져있어야한다 Delegate dynamic delegate는 파라미터 개수, 자료형, 변수명 까지 일치시켜줘야한다 언리얼 내부적으로 쓰는 델리게이트는 거의 다 SPARSE - dynamic만 쓸 수 있 dynamic일땐 직렬화 꼭 해줘야한다 SingleCast 가장 기본적인 Delegate로 함수 1개를 바인드하여 사용, 함수 포인터 MultiCast 싱글 캐스트와 동일, 여러 함수를..
UPROPERTY(VisibleAnywhere) 이 나오면 컴포넌트구나 ~ 생각하면 된다 roll : x축 회전 pitch : y축 회전 yaw : z축 회전 FRotator (pitch, yaw, roll); 순서 주의하기 ! FRotator, FQuat(쿼터니언), RotationMatrix(3x3) 는 1:1:1 매칭된다 FRotator : 360분법으로 사용하기 편하다 GetSafeNormal : 크기가 0인거 막아준다 ( 나누기 0 하면 안될 때 사용한다) GetUnSafeNormal CGameMode : 기본 캐릭터를 CPlayer 클래스로 지정한다 (GameModeBase) DefaultPawnClass ConstructorHelpers::FClassFinder pawn(L"Blueprint..
UObject 는 최상위 자료형 UClass 클래스 타입을 다루겠다 UStruct UProperty 멤버 변수 UClass는 클래스의 제한 없이 모든 클래스가 나오기 때문에 TSubClassOf ( 템플릿이다 )로 제한시켜줘야 한다 TSubClassOf랑 UClass랑 1:1 매핑된다 TSubClassOf 이름 ; SpawnActor같은건 다 GetWorld()에 있다 GetWorld()는 현재 월드를 가져온다 C++클래스 추가 할 때 직렬화 안할 땐 부모클래스 없음 선택 ! VA_ARGS : 가변 파라미터 easing.net
컴포넌트를 C에서 만들 때 컴포넌트도 결국 변수기 때문에 직렬화 시켜줘야하고, VisibleAnywhere로 만든다 (4.26부터 defaultsOnly, instanceOnly와의 차이가 없어졌다) UObject로부터 직접 상속받을 경우 클래스명 앞에 U를 붙여준다 (Actor에서 상속받을 경우 A를 붙인다) 에디터에서 동적할당 하는 법 CreateDefaultSubObject("할당된 이름") RootComponent에 할당 (블루프린트에서는 가상 루트에 자동으로 할당되지만 C++에서는 꼭 할당 해줘야한다) CHelpers - 템플릿화 해서 사용할 클래스 템플릿은 헤더파일에 정의 CoreMinimal.h - 진짜 꼭 필요한 거만 모여있는 헤더파일 문자열(FString)을 text로 바꿀때 *(포인터)..
비주얼 스튜디오에서 #include 하는 기준은 소스폴더가 기준 ! Module : 하나하나의 라이브러리를 의미한다 게임 프로젝트도 라이브러리로 친다 모듈 세팅 + 빌드 세팅 _API 앞부분이 하나의 모듈로 묶여있는 것 직렬화 Serialization 언리얼 엔진은 멀티플랫폼으로 여러가지 운영체제가 있다 ( 플스용, 스위치용, 안드로이드용 ,, ) 공통 포맷으로 잡아주기 위한 개념 구조체나 클래스를 공통 byte stream 에 보내지도록 변환시켜주는것 byte형의 배열로 순차적으로 보낸다 C++에서 언리얼 에디터로 내보내지는 것도 직렬화 되어있는 애들만 보여진다 역직렬화 ( Deserialization) : 직렬화 후에 byte 배열로 바뀐것을 다시 복원하는 과정 int32 : 32bit형 int를 사..