본문 바로가기

분류 전체보기

(14)
[Ue4] TArray 정리 정의 TArray IntArray; 배열 만들고 채우기 1. Init IntArray.Init(10, 5); // IntArray == [10,10,10,10,10] 2. Add, Emplace TArray StrArr; StrArr.Add (TEXT("Hello")); StrArr.Emplace(TEXT("World")); Add , Emplace 차이 Add는 앨리먼트 유형의 인스턴스를 배열에 복사 Emplace는 지정한 인수를 사용하여 엘리먼트 유형의 인스턴스를 새로 생성 성능: Emplace > Add Emplace는 호출되는 곳에 임시 생성 후 컨테이너에 복사 내지 이동하는 불필요한 절차를 피할수 있다. 3. Append FString Arr[] = { TEXT("of"), TEXT("Tomor..
[Ue4] 리플리케이션 그래프 및 CPU 최적화 기법 https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Networking/ReplicationGraph/ 리플리케이션 그래프 리플리케이션 그래프 기능과 리플리케이션 그래프 노드 개요입니다. docs.unrealengine.com https://www.unrealengine.com/ko/tech-blog/replication-graph-overview-and-proper-replication-methods 리플리케이션 그래프 개요 및 올바른 리플리케이션 방법 사상 최대 수준의 최적화를 제공하는 리플리케이션 그래프 시스템을 활용해 온라인에서 부드럽게 운영되는 대규모 멀티플레이어 게임을 제작하는 방법에 대해 알아보세요. www.unrealengine.co..
[Ue4] 엔진 실행파일 렌더링 없이 실행시키는 방법 엔진 실행파일을 조작하기위해 먼저 명령줄인수를 사용한다. 먼저 명령줄 인수란 실행파일로의 바로가기나 명령줄을 통해 실행파일을 실행시킬 때 전달할 수 있는 키워드 문자열을 말한다. 개발자나 사용자의 입맛에 따라 엔진이 실행되는 방식을 맞추고자 할때 쓰인다. 참고자료: https://docs.unrealengine.com/4.27/ko/ProductionPipelines/CommandLineArguments/ 렌더링 없이 에디터를 실행시키는 방법은 두가지가 있다. 1. 명령줄 인수 값으로 -nullrhi 옵션 추가 2. 명령줄 인수 값으로 -renderoffscreen 옵션 추가 -nullrhi 옵션 엔진을 실행시킬때 gpu를 사용하지 않는 방식이다. 컴퓨터에 그래픽 카드가 없어도 엔진이 실행된다. -ren..
[Ue4] Garbage Collection, Smart Pointer 정리 Garbage Collection 언리얼에서는 더 이상 참조되지 않거나 명시적으로 소멸 예약시킨 UObject를 주기적으로 정리하는 가비지 컬렉션 스키마를 사용한다. 가비지 컬렉션이 수행하면, 엔진은 루트 세트로부터 시작해서 알려진 UObject 레퍼런스 트리를 검색하여 참조된 오브젝트를 전부 추적하여 참조되지 않은 오브젝트를 제거한다. 요약: 1. 언리얼에서는 주기적으로 메모리를 정리하는 가비지 컬렉션을 수행 2. 가비지 컬렉션이 수행하면 레퍼런스 트리를 검색하여 참조된 오브젝트를 검사하여 참조되지 않은 오브젝트를 제거 Raw Pointer, UPROPERTY pointer, TWeakObjectPtr로 참조된 오브젝트 비교 raw pointer로 참조되는 오브젝트가 삭제되었을 경우 - GC 수행 전 ..
[Ue4] 메모리 누수 체크 (Memory leak check) MemReport에서 메모리 누수에 대한 단서를 추척할 수 있다. 메모리 누수가 있는지 찾는 법 - 시간차를 두고 메모리 할당 스탭샷을 찍어서 비교 스냅샷 찍기 - `키로 콘솔을 열고 "memreport"를 치면 간단한 보고를 "memreport -full"를 치면 상세한 보고를 받을 수 있다. 스냅샷 파일 위치 찾기 - YourGame/Saved/Profiling/MemReports 폴더에 들어가서 맵 이름과 시간표 태그가 찍힌 .memreport 파일을 찾을수 있다. 스냅샷 파일 비교 - 스냅샷으로 찍은 2개의 파일을 diff로 비교 합니다. 이 방법으로 메모리가 얼마나 더 할당 되었는지 오브젝트 카운트는 얼마나 늘었는지 비교하여 어디서 메모리 누수가 되는지 확인할 수 있다. 참고: https://w..
[Ue4] 스트링 변환 정리 FName -> FString 예) exString = exName.ToString(); FName -> FText 예) exText = FText::FromName(exName); *FName의 내용이 FText의 "자동 현지화" 혜택을 받지 못할수 있음 FString -> FName 예) exName = FName(*exString); *FString -> FName은 손실성 변환이라 위험 (FName은 대소문자를 구분하지 않기 때문) FString -> FText 예) exText = FText::FromString(exString); *FString 의 내용이 FText의 "자동 현지화" 혜택을 받지 못할수 있음 FText -> FString 예) exString = exText.ToString(..
c++ error: misleading indentation; 해결 방법 error: misleading indentation; statement is not part of the previous 'if' [-Werror,-Wmisleading-indentation] c++ 코드를 리눅스 빌드를 하다가 위와 같은 에러 발생 uint8 x; if (x == 5) return; 원인은 if문 안에 있는 return; 코드를 인식을 못함 이런 방식의 if문 코드였는데 알고보니 return;을 스페이스바로 자리를 맞춘 케이스 스페이스바로 자리 맞춰진 return;을 삭제하고 다시 제대로 줄 맞춤 후 빌드하니 에러 해결
[UE4] UMG 뷰포트 사이즈, 위치, 상대 위치 구하는법 정리 뷰포트 사이즈 구하기 GameViewportClient.h void GetViewportSize( FVector2D& ViewportSize ) const; 사용하여 뷰포트 사이즈의 FVector2D 값을 얻어올수있다. 예) FVector2D ScreenSize; if (GEngine && GEngine->GameViewport) { GEngine->GameViewport->GetViewportSize(ScreenSize); } 뷰포트 상의 로컬 좌표 구하기 SlateBlueprintLibrary.h static void LocalToViewport(UObject* WorldContextObject, const FGeometry& Geometry, FVector2D LocalCoordinate, FVec..