일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- C++최적화
- dataasset
- 자료구조
- 애셋로드
- stl
- 프로그래머스
- 강참조
- 선택정렬
- unorder_map
- 정렬알고리즘
- 람다사용정렬
- 데이터애셋
- 약참조
- map
- 언리얼엔진구조체
- 정렬
- 스마트포인터
- 언리얼가비지컬렉터
- 델리게이트
- UELOG
- 크리티컬섹션
- UE_LOG
- 람다
- C++
- moreeffectiveC++
- UML관련
- 알고리즘
- UE4 커스텀로그
- BFS
- enumasByue
- Today
- Total
목록UnrealEngine (81)
기억을 위한 기록들
using FStringFormatArgs = TMap; int itemnumber = 2; FStringFormatArgs args; args.Emplace( TEXT("0"), itemnumber); FString result = FString::Format(TEXT("item number is : {0}."), args); 나중에 사용할때 헷갈릴까 적어놓기... 근데 결국엔 FString::Format 함수 안을 보면 금방 확인할수 있다.
어떤 플러그인을 뒤져보다가 발견하게 되서 나중에 써먹기 위해 까먹을까봐 적음. ex)(언리얼엔진 클래라는 베이스 자세한건 생략) Parent 클래스에서 AvailableItem이라는 함수가 있다. 해당 함수안에 unimplemented(); 매크로가 선언되어 있다. 만약이 함수를 상속받는 클래스에서 해당 함수를 호출하지 않게되면 unimplemented(); 에서 check가 걸리게 된다. class Parent { UFUNCTION(BlueprintNativeEvent, Category = "Item") bool AvailableItem(); }; //.cpp bool Parent::AvailableItem__Implementation() { unimplemented(); //자식클래스에서 해당 함수 ..
enum 선언 예 UENUM(Meta = (Bitflags, UseEnumValuesAsMaskValuesInEditor = "true")) enum class EItemGradeInfo { // 일반 아이템 Common , // 레어 아이템 Rare , // 레전드 라이템 Legend, }; ENUM_CLASS_FLAGS(EItemGradeInfo); 사용 할 곳 예 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Meta = (Bitmask, BitmaskEnum = "EItemGradeInfo")) uint8ItemGradeInfo = 0; void DoSomething(const EItemGradeInfo info) { if(EItemGradeInfo::Comm..
엔진 구조에서의 모듈 모듈 타입 1. 개발자 타입 : 개발과정에서 필요한 모듈들의 종합 ( 디버깅 툴 등 ) 2. 에디터 타입 : 개발과정에서 에디터에서의 필요한 기능들의 조합 ( 에디터에서 새로운 버튼을 추가해 유용한 기능들을 위해) 3. 런타임 타입 : 프로젝트 실행 과정에서 필요한 기능들의 조합 (로딩관련 기능, 애셋 바이너리 콘텐츠 파일 등) (에디터와 관련될수도 있기도 하다.) 4. Third Party 타입 : 언리얼엔진에서 개발하지 않은 외부의 툴 프로젝트에 둘 수 있는 모듈의 한계는 없다고 한다. 언리얼엔진 내부에도 수백개의 모듈이 있고, 그중에서 필요한 모듈을 제작하고 있는 프로젝트에서 불러와 사용한다. 언리얼 빌드 툴(UBT)이 컴파일 할때마다 Build.cs에 있는 파일들을 컴파일 하..
UE4 에서 플러그인이란 에디터 안에서 프로젝트 단위로 개발자가 쉽게 켜고 끌 수 있는 코드 및 데이터 모음입니다. 플러그인은 런타임 게임플레이 기능을 추가하고, 내장된 엔진 기능을 수정( 또는 새 기능을 추가)하거나, 새 파일 유형을 만들고, 에디터 기존 기능에 새 메뉴, 툴바 명령, 하위 모드를 확장할 수도 있습니다. 여러 기존 UE4 서브시스템은 플러그인을 사용해서 확장 가능하도록 설계되었습니다. - 출처 : 언리얼엔진 공식 문서 중 일부 ( https://docs.unrealengine.com/5.0/ko/plugins-in-unreal-engine/) 플러그인은 게임플레이 기능을 추가하고, 내장된 엔진 기능을 수정, 추가하거나, 새 파일 포맷을 만들수도있고, 에디터 기존 기능에 새로운 메뉴 같은..
...캐릭터가 방에 진입하려할 때 어느 방에 들어가야하는지에 대한 정보의 표현이 없다면 BT를 구성할 때 레벨 상에 존재하는 모든 방을 별도의 분기로 처리해야 할 것입니다. 이건 정말 말도 안되는 비효율적인 낭비겠죠? 아시다시피 BT의 Task들은 프로그래밍 언어로 치자면 서브루틴 또는 함수로 간주할 수 있습니다. 프로그래밍 언어에서 함수에 파라미터를 집어넣어 처리하듯 BT도 이런 식으로 접근한다면 분명 효율적일 겁니다. 함수의 효율성은 단지 파라미터를 사용할 수 있다는 것 뿐 아니라, 한번 만들어 놓으면 재사용이 가능하다는 큰 장점을 지닙니다. 우리가 BT를 만들때도 마찬가지로 이러한 재사용성의 고려가 분명히 필요합니다. 잘못된 Data의 사용은 직관적이고 단순하게 표현할 수 있는 BT의 큰 장점을..
서비스는 연결된 컴포짓이 활성화돼있는 한 계속해서 구동된다. 속성에서 설정한 간격에 따라 Tick이 일어난다. 서비스는 항상 호출되기 때문에 AI 상태를 변경하는데에 주로 사용 된다고 한다. - Action RPG 샘플 참고 주로 서비스에서는 특정 이벤트를 실행시켜 주기적으로 블랙보드 변수를 업데이트한다. 후에 하위 노드들에 그 변수에 따라 다양한 액션으로 실행시킨다.
데코레이터는 객체지향설계에서 자주 언급되는 디자인 패턴 중 하나인 Decorator Design pattern과 같은 의미의 단어입니다. 즉 기존에 존재하는 class를 수정하지 않고 기능을 변경하기 위해 기존 class를 감싸서(wrap한다고 하죠) 이 목적을 달성하는 패턴입니다. 사용자는 기존 class의 변경없이 부가적인 기능을 덧붙일 수 있는 장점을 지닙니다(이때 인터페이스는 동일해야 합니다.). BT에서 데코레이터가 하는 역할도 똑같습니다. 데코레이터는 오직 하나의 자식 노드(즉 Task)를 가지는데(즉 바로 아래의 자식노드를 감싸는 역할을 한다는 의미겠지요..), 이 노드의 행위에 데코레이터가 영향을 줍니다. 데코레이터는 정말 다양하게 쓰일 수 있는데 본 글에서는 대표적으로 쓸만한 간단한 데코..
보통 글을 잘쓰는것보다 잘쓰여져 있는글을 가져오는게 낫다고 생각 할 때가 있다. 인터넷은 너무나도 많은 정보들을 담고 있 해당 비헤이비어 트리에 관련되서, 2014년도에 글을 작성해주신 분이 계신데 내가 엉성하게 쓰는것보다 해당 글을 가져오는게 낫다고 생각했다. 컴포짓(Composites)이란? - 컴포짓은 상태들의 시작점이다. 상태가 복귀와 실행 플로우에서 어떻게 행동해야하는지 정의한다. 여기에는 Selector/Sequence/Simple Parallel 이렇게 세가지 종류가 있다. 1. Background BT는 AI 캐릭터를 만들기 위한 매우 유명한 도구 중 하나입니다. Halo2[Bungie Software, 2004]가 BT를 사용한 최초의 게임으로 알려져 있고, 그 후 많은 게임에서 BT를 ..
* 언리얼 엔진 4 공식문서 참고하여 정리했습니다. https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/Assets/ReferencingAssets/ 애셋 참조 docs.unrealengine.com 언리얼 엔진 4에서는 애셋이 참조되는 방법과 메모리에 로드되는 방법을 제어하는 수많은 메커니즘을 제어한다. 레퍼런스는 2가지 방식으로 Strong Reference(강 참조)와 Weak Reference(약 참조)가 있다. - 강 참조는 A오브젝트가 B오브젝트를 참조하여 A로드시 B가 로드되게 하는 방식이다. - 약 참조는 경로(Path)같은 문자열 형태의 간점 메커니즘을 통해 A오브젝트가 B오브젝트를 참조하게 만들..
Csv - 훨씬 더 가볍고, 용량이 작다. - 단순한 데이터에 대해 더 나은 가독성 제공 - 복잡도는 낮지만, 많은 정보를 포함하는 매우 큰 데이터는 잘작동 - 추가/삭제/수정이 엑셀로 할 수 있어서 쉬움 Json - 반대로 더 나은 다용성과 확장성 제공 - 중첩된 정보, 계층적 데이터를 사용하는 복잡한 데이터에서는 읽기 쉬움 ( 퀘스트 시스템/다이얼로그 시스템 같은) - 쉼표 하나 잘못해도 데이터가 제대로 읽히지 않을 수 있음.
해당 문법이 뭔가 싶어서 찾아보니 C++의 std::function으로 생각하면 될것같다. 언리얼에서 람다를 다루면서 std::function대신 사용가능한게 TFunctionRef이다. https://hyo-ue4study.tistory.com/439 [CPP]std::function에 관하여 헤더 파일에 정의된 std::function 템플릿을 이용하면 1. 함수를 가리키는 타입(함수 포인터) 2. 함수 객체 3. 람다 표현식 세개를 비롯하여 호출 가능한 모든 대상을 가리키는 타입을 생성할 수 있다. hyo-ue4study.tistory.com https://benui.ca/unreal/tfunctionref/ Lambdas with TFunctionRef Unreal-style lambda func..