분류 전체보기 67

[UE4] Timer Manager

[UE4] 타이머 매니저 (Timer Manager) 게임 플레이 타이머 설정된 주기마다 동작을 수행하는 타이머 구조체이다. 딜레이 이후 또는 일정 시간에 걸쳐 동작을 수행하도록 스케쥴을 잡아 수행할 수 있다. 타이머 관리 타이머는 글로벌 타이머 매니저(FTimerManager)에서 관리하며 게임 인스턴스 오브젝트와 각 월드에 존재한다. 타이머를 셋업하는 데 사용되는 함수는 'SetTimer'와 'SetTimerForNextTick'이 있다. 만약 타이머를 호출한 오브젝트가 타이머의 시간이 만료되기 전에 소멸할 경우 타이머는 자동으로 취소가 된다. 설정 및 해제 FTimerManager의 SetTimer 함수는 딜레이 후 함수나 델리게이트를 호출하는 타이머를 설정하며, 이 함수는 TimerHandle을 ..

[UE4] BindWidget

[UE4] BindWidget UMWidget https://docs.unrealengine.com/4.27/en-US/API/Runtime/UMG/Components/UMWidget_1/ UMWidget:: Valid metadata keywords for the UPROPERTY macro docs.unrealengine.com UPROPERY 매크로에 유효한 메타데이터 키워드이며, 종류는 DesignerRebuild, BindWidget, BindWidgetOptional, OptionalWidget, BindWidgetAnim, BindWidgetAnimOptional, IsBindableEvent가 있다. BindWidget 코드에서 UI로직을 만들어 블루프린트에서 제어하려 할때 사용하며, 이 ..

[UE4] Smart Pointer

[UE4] 스마트 포인터 (Smart Pointer) 스마트 포인터 메모리 할당과 추적의 부담을 해소해주도록 설계된 C++11 스마트 포인터들의 커스텀 구현인 언리얼 스마트 포인터 라이브러리이다. 단, 언리얼 오브젝트는 게임 코드에 더 최적화된 별도의 메모리 추적 시스템을 사용하기 때문에 이러한 클래스들은 ‘UObject' 시스템과 사용할 수 없다. 종류 공유 포인터(Shared Pointers), 약 포인터(Weak Pointers), 유니크 포인터(Unique Pointers) 가 포함되어 있으며, null이 불가능한(non-nullable) 쉐어드 포인터와 같은 역할을 하는 공유 레퍼런스(Shared References)가 있다. Shared Pointer (공유 포인터) TSharedPtr sha..

[SVN] 'Cleanup' Fail Error

[SVN] CleanUp Fail Error 증상 프로젝트 업데이트나 'Failed to run the WC DB work queue assiciated with ~ '라 뜨거나 커밋 시 클린업을 하라는 에러가 뜨나 막상 클린업을 시도 시 'Cleanup failed o process the following: ~ 액세스가 거부되었습니다.' 라는 에러 창이 뜨는 상황. 또는 'Error:Working copy '~' locked ~ already locked.'의 에러가 뜨는 상황 해결방법 위는 형상관리 이력이 꼬인 상황으로 SQLite를 이용하여 svn에서 사용하는 DB 내에 정보를 직접 지우는 방법으로 해결할 수 있다. 1. http://sqlitebrowser.org/ 접속하여 SQLite 파일을 ..

이것 저것 2023.10.14

[UE4] Delegate

[UE4] 델리게이트 (Delegate) 델리게이트 C++ 오브젝트 상의 멤버 함수를 가리키고 실행시키는 데이터 유형이다. 임의 오브젝트의 멤버 함수에 동적으로 바인딩시킬 수 있으며, 그런 다음 그 오브젝트에서 함수를 호출할 수 있다. 가급적이면 델리게이트는 항상 참조 전달을 해야하며, 종류는 이벤트, 다이나믹, 싱글-캐스트, 멀티-캐스트가 있다. 싱글 캐스트 : 가장 기본적인 델리게이트로 함수 1개를 바인드하여 사용. 멀티 캐스트 : 싱글 캐스트와 비슷하지만 여러 함수를 바인드 가능. 다이나믹 : 직렬화되어 블루프린트에서 사용 가능. 이 벤 트 : 멀티 캐스트와 비슷하지만 전역으로 설정할 수 없어 외부에서는 추가 델리게이트 선언이 불가능. 델리게이트 선언 //. 싱글 캐스트 DECLARE_DELEGAT..

[UE4] TMap

[UE4] TMap TMap 언리얼엔진에서 TArray 다음으로 많이 쓰이는 컨테이너이며, 키(Key) 해시 기반을 이용하는 TSet과는 비슷하지만 데이터를 키값을 짝으로 저장하며, 키는 저장 및 불러오기를 할 때만 사용한다. 'TMap'과 'TMultiMap' 두가지 유형이 있으며, 이 둘의 차이점은 TMap의 키는 고유한 반면, TMultiMap은 다수의 동일한 키를 지원한다. 즉, 기존 키값에 값을 추가하면 TMap은 기존 것에 대체가 되며, TMultiMap은 새로 저장한다. 생성 및 할당 //. 생성 TMap NumberMap;// 자료형 //. Add NumberMap.Add(1, TEXT("One")); NumberMap.Add(2, TEXT("Two")); NumberMap.Add(3, T..

[UE4] TArray

[UE4] TArray TArray TArray 는 UE4 에서 가장 자주 쓰이는 컨테이너 클래스로, 신속성, 메모리 효율성, 안전성을 염두에 두고 디자인되었습니다. TArray 유형은 두 가지 프로퍼티로 정의되는데, 주로 그 엘리먼트(element) 유형, 부로 할당자(allocator) 입니다. 더보기 엘리먼트 유형 배열에 저장되는 유형으로 동질성을 가지고 있어 다른 유형의 엘리먼트를 하나의 TArray에 저장할 수 없다. 할당자 유형 메모리에 오브젝트가 레이아웃되는 방식으로, 배열에 엘리먼트를 넣어 키우는 방식이다. 엘리먼트가 추가될 때마다 필요에따라 메모리를 제공한다. 생성 및 할당 //. 생성 TArray intArr; // 자료형 변수명 //. Init intArr.Init(3, 5);// {..

[C++] 람다 식

[C++] 람다(lamda) 식 람다(lamda)식 C++ 11에서 부터 추가된 식이며, 람다 식은 함수에 인수로 호출되거나 전달되는 위치에서 익명 함수 개체(클로저)를 정의하는 편리한 방법이다. 일반적으로 알고리즘 또는 비동기 함수에 전달되는 몇 줄의 코드를 캡슐화하는 데 사용된다. 1. []는 capture절로 변수 또는 함수를 가져올 수 있다. 람다 소개자 2. ()는 매개 변수를 넣는 부분. 선택적이다. 3. mutable는 변경이 가능한 사양을 넣는 부분. 선택적 4. throw()는 예외처리. 선택적 5. ->type 리턴 타입 설정. 선택적 6. {}는 람다의 본문이다. #include #include using namespace std; //일반 함수 void Sum(int a, int b..

SYN과 ACK는 무엇인가?

SYN과 ACK는 무엇인가? SYN와 ACK를 알기전에 TCP를 알아두는 것이 좋을 것 같다. TCP는 두 개의 호스트를 연결하고 데이터 스트림을 교환하게 해주는 중요한 네트워크 프로토콜이며, 서버와 클라이언트 사이간에 동기화하기 위하여 three-way handshake를 사용하는데 이곳에서 SYN와 ACK가 등장한다. Three-Way Handshake란 무엇인가? TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다. [과정] 1. Client에서 Server에 연결 요청을 하기 위해 SYN 데이터를 보낸다. 2. Server에서 해당 포트는 Listen 상태에서 SYN 데이터를 받..

[UE4] Log

[UE4] Log 개발을 하는 과정에서 Log를 남겨 확인해야하는 일이 굉장이 많은데 이것을 블루프린트와 C++ 두가지 방법으로 출력하는 방법을 알아보자! Blueprint 좌측 상단에서 실행이 된다. C++ 화면 출력 #include "Engine.h" //... GEngine->AddOnScreenDebugMessage(int32 Key, float TimeToDisplay, FColor DisplayColor, const FString& DebugMessage, bool bNewerOnTop, const FVector2D& TextScale); GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Yellow, TEXT("Hello World!")); 로그 출..