
지난 번 까지는 언리얼 엔진 뷰포트 상에 있는 액터를 선택하고, 선택된 엑터를 균일한 간격으로 복제하는 기능을 구현했다. 이번 포스팅에서는 선택된 엑터의 회전, 크기, 위치 등을 랜덤하게 바꿔주는 기능을 추가한다. 회전 구현은 어렵지 않다. 선택된 엑터들에 대한 rotation 값을 받아오고 Math::RandRange(val1, val2)를 사용하여 랜덤 값을 얻어내어 회전 값에 추가하면 된다. 처음으로 작성한 코드에서는 //FRotator ActorRotation = SelectedActor->GetActorRotation(); //ActorRotation.Yaw += randRange; //SelectedActor->SetActorRotation(ActorRotation); 위와 같은 방식으로 Ro..

에셋의 복제가 아닌 에디터 상에 있는 물체의 복제를 진행한다. 언리얼에는 4가지 서브시스템이 있음. UEngineSubsystem, UEditorSubsystem, UGameInstanceSubsystem, ULocalPlayerSubsystem 우리가 사용하는 건 UEditorSubsystem이 된다. 이 서브시스템 하위의 UEditorActorSubsystem을 사용한다. 이 서브시스템에서는 우리는 GetSelectedLevelActors() 와 GetAllLevelActors() 함수를 사용하게 된다. 이 함수들은 static이 아니기 때문에 액세스 하기 위해서는 서브 시스템을 확보해야한다. #include "Subsystems/EditorActorSubsystem.h" bool UQuickActo..

지난 포스팅까지는 새로운 에셋 유형인 머티리얼을 만들었다. 오늘 포스팅은 텍스처를 선택한 상태에서 머티리얼 생성 버튼을 누르면 텍스처 이름에 따라 내부적으로 노드를 연결해주는 과정이다. 머티리얼 에셋 안에서 노드와 핀을 올바른 소켓에 연결하고자 한다. 예를들어 선택된 텍스처의 RGB를 Base Color 에 연결하게한다. 그 외에도 노멀은 노멀 소켓에 연결, 러프니스는 러프니스 소켓에 연결하게 하고 싶다. 달성목표 사용자의 선택에 따라 어떤 텍스처가 어떤 종류인지 알아야 한다. 다음 노드를 생성하고 올바른 핀에 연결해야 한다. 텍스처의 종류는 이름에 따라 텍스처를 선택하도록 한다. 고정된 이름 규칙이 있는 경우 작업이 수월해진다. 사용자식의 명명규칙으로 선택된 머티리얼들에 대한 새로운 배열을 만들어 머티..

커스텀 에디터에서 머티리얼을 생성하는 기능을 추가하기로 한다. 목표하는 바는 텍스처를 선택하고 머티리얼을 생성하는 버튼을 누르면 해당 텍스처가 적용된 머티리얼을 알아서 제작해 주는 기능이다. 자산을 생성하기 위해서는 다음의 정보들이 필요하다. 자산의 이름. (머티리얼의 이름) 어떤 폴더에 넣을 것인지? 노드를 만들고 핀을 연결 에디터 유틸리티 위젯이 이를 해결하기 적합하다. 유틸리티 위젯은 단순화된 슬레이브 위젯이지만 언리얼 모션 그래픽 UMG를 기반으로 한다. 따라서 EditorUtilityWidget 을 상속받은 C++ 클래스를 생성하여 사용하기로 한다. 먼저 에디터 상에서 유틸리티 위젯을 제작해준다. 원하는 모양으로 위젯을 작성한 뒤 에디터 유틸리티 위젯을 실행한다. 머티리얼 제작 위젯과 에디터 유..

커스텀 에디터에 커스텀 아이콘을 넣는 작업을 했다. 다음의 과정이 필요하다. 리소스 폴더에 아이콘을 넣는다. 아이콘을 등록하고 모듈을 시작. 아이콘을 사용자 메뉴에 적용. 먼저 아무것도 상속받지 않는 클래스를 제작한다. 클래스의 내부는 static으로 이루어진 함수와 변수들로 static에 대한 이해도 높일 수 있다. #include "Styling/SlateStyle.h" class FSuperManagerStyle { public: static void InitializeIcons(); static void ShutDown(); private: static FName StyleSetName; static TSharedRef CreateSlateStyleSet(); static TSharedPtr Cr..

커스텀 위젯을 활용한 고급 지우기 기능을 완성했다. 영상 https://www.youtube.com/watch?v=4skFjXZPJfE 위젯 리스트 갱신 시켜주는 문제가 곳곳에 있어서 그것 좀 함. 이름이 같은 자산을 나열하는 기능을 만들었다. 동일한 에셋인지는 알 수 없으나 파일을 순회해서 파일 내에 이름이 같은 에셋이 있다면 그것들을 모아서 보여주는 기능이다. TMultiMap을 사용했다. TMultiMap의 MultiFind 함수를 사용하여 동일한 이름의 에셋을 찾을 수 있다. MultiFind함수는 2가지 인자를 받는데 1. 은 키 값, 2. 는 에셋을 저장해서 반환할 TArray 배열을 넣어주어야 한다. TArray OutAssetsData; AssetsInfoMap.MultiFind(DataS..

지난 포스팅 마지막 화면 이번에 추가할 기능은 "선택된 에셋 삭제 / 에셋 일괄 선택 / 에셋 일괄 선택 해제" 버튼이다. 기존 창 아래에 추가하고 싶으므로 스크롤 박스인 3번째 슬롯 아래에 추가해준다. // 4번째 슬롯 + SVerticalBox::Slot() .AutoHeight() [ SNew(SHorizontalBox) // Button 01 +SHorizontalBox::Slot() .FillWidth(10.f) .Padding(5.f) [ ConstructDeleteAllButton() ] // Button 02 + SHorizontalBox::Slot() .FillWidth(10.f) .Padding(5.f) [ ConstructSelectAllButton() ] // Button 03 + ..

슬레이트 위젯을 본격적으로 커스텀하는 포스팅이다. 이 전까지는 빈 슬레이트 위젯을 띄웠었다. 원하는 위젯의 모습은 에셋의 체크박스 에셋의 클래스 이름 에셋의 이름 삭제 버튼 의 모습이다. 최종적인 코드는 아래와 같다. TSharedRef ListViewRowWidget = SNew(STableRow, OwnerTable).Padding(FMargin(5.f)) [ // 여러 슬롯 추가 SNew(SHorizontalBox) // 1. 체크박스 + SHorizontalBox::Slot() .HAlign(HAlign_Left) .VAlign(VAlign_Center) .FillWidth(0.05f) [ ConstructCheckBox(AssetDataToDisplay) ] // 2. 자산 클래스 이름 + SH..

Slate 란 무엇인가? 언리얼은 슬레이트를 사용하여 구축되어있다. 에디터 상의 모든 버튼/창 들이 전부 슬레이트 위젯이다. 슬레이트 위젯을 사용하면 원하는 편집기 인터페이스를 새롭게 만들 수 있다. 슬레이트 사용이 복잡한 이유는 3가지가 있다. 슬레이트는 고유한 구문이 존재함.. 일반 코드와는 많이 다르다. 슬레이트는 시각화 하기가 어렵기 때문에 어렵게 느껴진다. 글자 사이의 간격이나 이런것들을 코드로 쳐야하기 때문. 다른 모듈과의 의사소통. 월드 아웃라이너의 오브젝트를 클릭했을 때 레벨에서도 선택되는 행동이 모듈과의 의사소통. 가장 어려운 부분이다. 모듈과의 의사소통이 슬레이트의 가장 어려운 부분이라고 볼 수 있는데 모듈과의 의사소통을 위해서는 언리얼의 스마트 포인터에 의존해야 한다. 언리얼의 스마트..
Asset Delete 를 구현했으므로 Folder Delete 또한 구현했다. Asset Delete에 대해서 따로 포스팅한 적이 없어서 과정을 간단하게 설명하겠다. 한 폴더를 선택하고 내부의 사용하지 않는 에셋을 몽땅 지우는 과정은 다음과 같다. 한 폴더만 선택했는지 내부에 지울 에셋이 있는지 확인 Developers 와 Collections 을 포함하고 있는 에셋이 있는지 확인 경로에 올바른 에셋이 있는지 확인 사용하지 않는 에셋이 1개 이상인지 확인 의 과정을 거친다. void FSuperManagerModule::OnDeleteUnusedAssetButtonClicked() { // 1. 한 폴더만 선택했는지 if (FolderPathsSelected.Num() > 1) { DebugHeader..
- Total
- Today
- Yesterday
- LV2
- 데디케이티드
- 누적합
- BFS
- 개인공부
- 고득점 Kit
- IMGUI
- 정렬
- C++
- 해시
- UE5
- 탐욕법
- DFS
- 스택/큐
- 디자인 패턴
- 완전탐색
- 고득점kit
- sort
- 프로그래머스
- greedy
- Ue
- 너비우선탐색
- 재귀
- Unreal 5.1
- FPS
- 힙
- Heap
- 채팅서버
- level3
- LV3
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |