일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- BFS
- map
- moreeffectiveC++
- 언리얼엔진구조체
- stl
- 약참조
- 프로그래머스
- dataasset
- 자료구조
- 언리얼가비지컬렉터
- unorder_map
- UE_LOG
- C++
- 델리게이트
- 크리티컬섹션
- 데이터애셋
- 스마트포인터
- 정렬
- UELOG
- 람다사용정렬
- 정렬알고리즘
- UE4 커스텀로그
- 강참조
- UML관련
- enumasByue
- 알고리즘
- C++최적화
- 애셋로드
- 람다
- 선택정렬
- Today
- Total
목록UnrealEngine/UE4 - CPP (28)
기억을 위한 기록들
FString myStr="10.0"; float myStrValue = FCString::Atof( *myStr.TrimQuotes() ); TrimQuotes() 함수는 문자열 앞뒤에 있는 " " 를 제거해주는 함수이다. 반대로 float을 FString으로 변환하기 float myValue=10.0f; FString myValueStr = FString::SanitizeFloat(myValue);
헤더파일 UPROPERTY() USphereComponent* Trigger; UFUNCTION() void OnOverlapBegin( class UPrimitiveComponent* selfComp, class AActor* otherActor, UPrimitiveComponent* otherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult); cpp파일 - 생성자 Trigger->OnComponentBeginOverlap.AddDynamic( this, &해당클래스::OnOverlapBegin ); void 해당클래스::OnOverlapBegin( class UPrimitiveComponent* selfComp, c..
언리얼에서 C++로 작성하다가 디버깅용 로그 관련 설정 정리용 글이다. (자세한 설명보다는 개인기록용입니다.) 우선 블로그 작성을 위한 기본 템플릿 3인칭 C++를 만들어주었다. 프로젝트 이름은 blogCPP이다. 언리얼에서 기본으로 제공하는 로그 출력 방법의 기본 형식은 다음과 같다. UE_LOG(LogTemp, Log, TEXT("Hi")); 게임을 실행하고 해당 로그가 있는 함수를 실행하면 출력 로그에 찍히게 된다. UE_LOG('로그 카테고리', '로그 상세 수준', '로그 내용'); 로그 카테고리는 우선 재쳐두고, 로그 상세 수준을 먼저 보면 로그 상세 수준 로그는 출력되는 로그의 종류를 분류해주고 있다. 사용할 수 있는 종류를 보면 Log 로그 파일 출력 O / 게임 내의 콘솔 출력 X / 에..
프로젝트명.h과 프로젝트명.CPP 에 커스텀 로그 카테고리를 설정 #pragma once #include "CoreMinimal.h" DECLARE_LOG_CATEGORY_EXTERN(BLOG_LOG, Log, All); //추가 #include "blogCPP.h" #include "Modules/ModuleManager.h" IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, blogCPP, "blogCPP" ); DEFINE_LOG_CATEGORY(BLOG_LOG); //추가 프로젝트명.h 에 한개씩 추가. 1. 호출된 함수의 이름과 라인 매크로를 String화(Call Info) 시켜주는 매크로 #define LOG_CALLINFO (FString(_..
1. visual studio(이하 vs) 프로젝트에서 헤더 파일을 추가해준다. 2. vs를 끄고 프로젝트 경로로 가서 새로생긴 구조체 헤더파일이 프로젝트 폴더 - Intermediate - ProjectFiles 에 생긴다. 헤더파일을 프로젝트 소스 폴더로 옮겨준다. 3. 프로젝트.uproject 의 오른쪽 마우스를 누르고 Generate Visual Studio project files를 다시 해준다. 4. 다시 vs를 열어보면 구조제 헤더파일이 생겨 있고 비어 있는 상태 이다. 아래와 같은 기본 구성 코드를 작성 해준다. (필수포함) 1. CoreMinimal.h 헤더파일. (필수X) 2. 구조체.generated.h 헤더파일 (필수) 3. USTRUCT(BlueprintType) (필수X Blue..
자체 제착한 Pooling 플러그인이 있다. 해당 플러그인에 있는 클래스를 프로젝트 소스에서 사용하려고 했는데, UPROPERTY를 붙이니 컴파일 에러가 났다. 이래저래 찾아 본 결과. 해당 플러그인을 사용하려면 프로젝트명.Build.cs 에서 해당 플러그인명 이름을 추가해줘야한다. PrivateDependencyModuleNames.AddRange(new string[] { "플러그인폴더명" }); 을 넣어주면 UPROPERTY()를 붙여서 에디터에서 확인 가능하다. 만약, 위 설정을 해주지 않으면 UPROPERTY사용이 불가능하다.
블루프린트에 있는 몽타주재생을 C++에서 사용할때 해당 노드 뒤에 있는 On Blend Out 과 On Completed를 C++에서 호출해야한다. 이럴 때 사용한 애님 인스턴스 클래스에 선언되어있는 델리게이트를 사용하면 된다. 언리얼 엔진 AnimInstance.h 47번줄부터 선언되어있는걸 확인할 수있다. 해당 델리게이트를 몽타주 재생한 함수에서 선언과 동시에 바인딩 해주었다. BindUObject로 바인딩 해주고 Montage_SetBlendingOutDelegate 함수와 Montage_SetEndDelegate 함수로 해당 델리게이트와 몽타주를 지정해주면 된다. 그리고 해당 몽타주를 재생하면 지정해준 함수두개에서 몽타주 애니메이션 재생 후 로그가 알맞게 출력된다. BlendOut이 Complet..
델리게이트(delegate)라는 단어를 사전에서 검색해보면 집단의 의사를 대표하는 대표자라고 나온다. 하지만 컴퓨터 프로그래밍에서 델리게이트는 함수를 안전하게 호출할 수 있는 기능을 의미한다. (먹는 사과도 애플이고 아이폰 만드는 회사도 애플인 그런 느낌...?) 사실 C++ 언어에서는 델리게이트라는 개념이 존재하지 않는다. 델리게이트는 C++ 의 다음 세대 언어인 C#에서 ( 정확히는 CLI 플랫폼 기반 ) 선보인 개념으로, 콜백 함수를 등록하기 위해 C 혹은 C++에서 사용한 함수 포인터가 문법이 복잡하고, 위험한 방식이었다면, 델리게이트는 간편한 문법과 안전성을 갖춰 콜백 함수를 호출하기 위해 고안. 델리게이트의 간편함과 안정성 외에도 이전 방식과 다른 큰 특징은 사전적 의미대로 집단의 의사를 대표..
이전에 일반 C++에서의 스마트포인터에 대해 다뤄보았다. hyo-ue4study.tistory.com/247?category=862971 [CPP]스마트(Smart) 포인터에 관하여(1) - unique_ptr 스마트 포인터는 3가지가 있다. - unique_ptr (유니크) - shared_ptr (쉐어드) - weak_ptr (위크) 우선 일반 포인터를 보면 //... int main() { Vector* myVector = new Vector(10.f, 30.f); //... delete myVecto.. hyo-ue4study.tistory.com 이번엔 언리얼엔진에서 스마트포인터를 다뤄보자. 우선 간단하게 게임 인스턴스 클래스를 만들고, 임의의 클래스(House)(언리얼엔진에서 일반클래스 접두사..
언리얼 스마트 포인터 라이브러리(Unreal Smart Pointer Library) 는 메모리 할당과 추적의 부담을 해소해주도록 설계된 C++11 스마트 포인터들의 커스텀 구현입니다. 이 구현에는 업계 표준인 쉐어드 포인터(Shared Pointers), 위크 포인터(Weak Pointers) 그리고 유니크 포인터(Unique Pointers) 가 포함되어 있습니다. 또한, null이 불가능한(non-nullable) 쉐어드 포인터와 같은 역할을 하는 쉐어드 레퍼런스(Shared References) 도 추가되었습니다. 단, 언리얼 오브젝트는 게임 코드에 더 최적화된 별도의 메모리 추적 시스템을 사용하기 때문에 이러한 클래스들은 ‘UObject' 시스템과 사용할 수 없습니다. -언리얼 엔진 공식 문서 ..
UPROPERTY는 멤버 변수 앞에 기술 되며, UPROPERTY내에 프로퍼티 지정자를 나열함으로, 해당 프로퍼티가 엔진과 에디터의 다양한 부분과 상호작용 할 수 있습니다. 빌드 시 UHD(Unreal Header Tool)이 해당 매크로를 감지하고 리플렉션 유형에 추가함. 이렇게 언리얼 리플렉션 시슽메에 추가된 UPROPERTY는 가비지 콜렉션(GC)에 의해 생명주기가 관리되며, 리플렉션을 통해 이 멤버 변수의 이름, 유형 등을 런타임 중에 확인할 수 있게 됩니다. 반대로, UPROPERTY()매크로가 있지 않는 멤버 변수는 언리얼 리플렉션에 노출되지 않으며, 리플렉션 시스템이 제공하는 GC, 런타임 정보 확인등을 사용할수 없게 된다. 언리얼 리플렉션에 관하여 www.unrealengine.com/ko..
BlueprintImplementableEvent - C++ 바디 구현이 불가능(모든것이 블루프린트에서 발생)(헤더파일에만 작성 된 함수) - 일반적으로 블루프린트에서 오버라이드 - 블루프린트 이벤트 그래프에서 커스텀 이벤트에 가깝다. - 사용 예 : 캐릭터가 아이템을 획득 시 어떤 효과가 발동되는가에 관한 이벤트를 다양하게 만들어줌. BlueprintNativeEvent - BlueprintImplementableEvent와 달리 C++로 함수 바디 구현이 가능 - 블루프린트에서 오버라이드(c++ 그대로 호출 or 새롭게 변경) 가능 - 기본 구현이 C++에 있으므로 블루프린트에서 반드시 구현 하지 않아도 됨. - 선언부 부분에는 상관없지만, 구현부 부분 함수명 뒤에 _Implementation 무조건..