일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 크리티컬섹션
- UE4 커스텀로그
- 람다
- 스마트포인터
- map
- unorder_map
- 언리얼엔진구조체
- 델리게이트
- BFS
- C++최적화
- UE_LOG
- moreeffectiveC++
- 자료구조
- 람다사용정렬
- UML관련
- 정렬알고리즘
- 강참조
- stl
- 데이터애셋
- C++
- UELOG
- 정렬
- 언리얼가비지컬렉터
- 선택정렬
- 애셋로드
- 프로그래머스
- 약참조
- dataasset
- enumasByue
- 알고리즘
- Today
- Total
목록UnrealEngine (81)
기억을 위한 기록들
https://en.cppreference.com/w/cpp/utility/tuple/tie std::tie - cppreference.com template std::tuple tie( Types&... args ) noexcept; (since C++11) (until C++14) template constexpr std::tuple tie( Types&... args ) noexcept; (since C++14) Creates a tuple of lvalue references to its arguments or instanc en.cppreference.com 언리얼엔진 C++에서의 tie 함수 사용예) TTuple AMyActor:..
// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Components/ActorComponent.h" #include "HealthManageComponent.generated.h" DECLARE_MULTICAST_DELEGATE_OneParam(FUpdateHealthPoint, int); DECLARE_MULTICAST_DELEGATE_OneParam(FAddtiveHealthPoint, int); DECLARE_MULTICAST_DELEGATE_OneParam(FMinusHealthPoint, int); DECLARE_MUL..
TMap이나 TSet등에 다양한 데이터 값을 저장하려고 할때, Key로 사용되는 값을 넣는다. 그 중에서 Key로 FStruct 로 하고싶다면 추가해야할 함수가 있다. MyStruct라는 구조체가 있다고 치자. struct FMyStruct { private: int SomeIntData=0; public: FMyStruct(); ~FMyStruct(); }; 이 구조체를 Key로 사용하려고 한 다면 2개의 함수를 추가 해주면 된다. 바로 비교(==) 연산자와 GetTypeHash 함수라는 전역 함수의 파라미터 FMyStruct 이다. struct FMyStruct { private: int SomeIntData=0; public: FMyStruct(); ~FMyStruct(); //Override th..
코드를 작성하다보면 flaot 소숫점 비교를 자주 하게 되는데, 습관적으로 == 연산자를 사용하게 된다. 대부분~~(정말?) 괜찮을 수 도 있긴하지만, 정밀도가 떨어진다. 같은 변수 2개의 각각 1.0이 있다고 해서 같은수라는 보장이 없다. (ex 변수 2개가 각각 내부에서 1.0000004 / 1.0000006 이렇게 되어있다면 같은 값이 아니다.) float a = 3.0f; float b = 3.0f; if( a == b ) //이렇게 하지말고 { //Do Something } 그래서 단순 == 연산자로 비교하지 말고, 언리얼에서 제공 하는 함수를 이용한다고 하면 float a = 3.0f; float b = 3.0f; if(true == FMath::IsNearlyEqual(a, b)) //이렇게..
// 헤더 파일에 다음을 추가합니다. #include "Engine/BlueprintGeneratedClass.h" // 액터 포인터를 받아들이는 함수를 만듭니다. bool IsActorBlueprint(AActor* Actor) { if (!Actor) return false; // UClass 개체를 가져옵니다. UClass* ActorClass = Actor->GetClass(); // UClass 개체가 BlueprintGeneratedClass인지 검사합니다. // BlueprintGeneratedClass는 블루프린트 클래스를 나타냅니다. if (ActorClass->IsChildOf(UBlueprintGeneratedClass::StaticClass())) { return true; // 블..
언리얼엔진 Game Ability System이란? 게임 내에서 캐릭터나 오브젝트의 능력을 정의하고 관리하는 시스템입니다. 이 시스템은 게임의 캐릭터나 아이템 등의 능력을 모델링하고 관리하며, 이들 능력을 조작하고 적용하는 방법을 제공합니다. Game Ability System은 일반적으로 세 가지 구성 요소로 구성됩니다. 첫째, 능력은 능력 구성 요소와 실행 구성 요소로 구성됩니다. 능력 구성 요소는 능력의 속성, 발동 조건, 지속 시간 등을 정의하고, 실행 구성 요소는 능력이 실행될 때 수행할 작업을 정의합니다. 둘째, 능력 시스템은 능력을 트리거하는 행위자와 대상을 식별하는 능력 시스템 트리거 구성 요소를 포함합니다. 마지막으로 능력 시스템은 능력이 적용될 때 발생하는 이벤트를 처리하는 능력 시스템..
A 라는 이름의 c++ 클래스를 사용하고 있을때, 이름을 B로 바꾸는건 코드에서는 크게 어렵지 않습니다…그런데 문제는 A 라는 클래스를 블루프린트에서 BP_A 라는 애셋이 상속받는 경우가 있는데, 코드에서 클래스 이름을 B로 바꿀 경우 BP_A가 깨져서 안열릴수도 있습니다. 그럴경우 Config/DefaultEngine.ini 파일에서 1[/Script/Engine.Engine] ActiveClassRedirects=(OldClassName="/Script/.",NewClassName="/Script/.") 위와 같은 양식으로 추가해주면되는데, 예를 들어 World 프로젝트에서 A클래스 이름을 B로 바꿀 경우, [/Script/Engine.Engine] ActiveClassRedirects=(OldCla..
// assert 는 DO_CHECK = 1 일때만 실행 // check 는 false 값이면 실행을 중지 check(Mesh != nullptr); checkf(MyPtr, TEXT("MyPtr is nullptr")); // false 이면 로그 출력 checkcodeMyPtr, TEXT("MyPtr is nullptr")); // checkf 와 비슷 checkNoEntry(); // 절대 실행될 리 없는 경로 표시 checkNoReentry(); // 호출 완료 전까지 다시 호출되면 안되는 경우 체크 checkNoRecursion(); // checkNoReentry() 와 동일 unimplemented(); // 반드시 재정의해야 하는 가상 함수를 표시하기 위해 사용 // verify 는 DO_..
https://forums.unrealengine.com/t/arecapslocked-not-exposed-to-blueprints/414107
https://docs.unrealengine.com/4.26/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Delegates/ 먼저 Delegate의 사전적 의미로는 "대리자 혹은 위임자" 라는 뜻이 있다. 델리게이트설명 : Delegate (델리게이트)로 C++ 오브젝트 상의 멤버 함수 호출을 일반적이고 유형적으로 안전한 방식으로 할 수 있습니다. 델리게이트를 사용하여 임의 오브젝트의 멤버 함수에 동적으로 바인딩시킬 수 있으며, 그런 다음 그 오브젝트에서 함수를 호출할 수 있습니다. 호출하는 곳에서 오브젝트의 유형을 몰라도 말이지요.델리게이트 오브젝트는 복사해도 완벽히 안전하다.델리게이트는 값으로 전달 가능하나 보통 추천할 만 ..
UE에서는 전체 렌더러는 게임 스레드에 한 두 프레임 뒤쳐지는 별도의 스레드에서 작동 (렌더 스레드가 N 프레임일때 게임 스레드 N+1 일수 있음.) 렌더링 처리를 할 때 모든 메모리 읽기 쓰기의 스레드 안전성뿐만 아니라 그 행위의 결정론적 특성을 세심히 고려해야함. 함수적 행위가 두 스레드간의 실행 속도 차이에 따라 달라지는 경우를 경쟁(race) 조건이라 함. 경쟁 조건은 보통 재현하기가 매우 어렵기 때문에 피하는 것이 중요한데, 속도차이 때문에 기계, 플랫폼, 디버거, 환경설정에 따라 달라질 수 있기 때문입니다. 이러한 유형의 버그는 거의 디버깅이 불가능하여, 일반적으로 재현 가능한 버그에 비해 고치는 데 10 배 정도의 시간이 걸립니다. 경쟁 조건 / 스레딩 버그의 간단한 예제는 이렇습니다. /*..
"F:\UnrealEngine-5.0\Engine\Build\BatchFiles\RunUAT.bat" BuildCookRun -project="F:\Project.uproject" -noP4 -platform=Win64 -clientconfig=Development -cook -allmaps -build -stage -pak -distribution -archive -archivedirectory="F:\ResultPath" -ubtargs="-DEV"