본문 바로가기

개발이야기/언리얼 c++12

언리얼 C++: Lambda와 mutable Lambda의 차이 람다 함수는 기본적으로 상수로 캡처한 변수를 수정할 수 없습니다. 이를 해결하기 위해 mutable 키워드를 사용하여 람다 함수를 변경할 수 있게 만듭니다.람다와 mutable 람다의 차이기본 람다기본적으로 람다 함수는 캡처된 변수를 상수로 취급합니다. 즉, 람다 함수 내에서 캡처된 변수를 수정할 수 없습니다.int x = 0;auto lambda = [x]() { // x++; // 오류: x는 상수로 캡처되었기 때문에 수정할 수 없습니다. std::cout mutable 람다mutable 키워드를 사용하면, 람다 함수 내에서 캡처된 변수를 수정할 수 있습니다. mutable 키워드를 사용하면 캡처된 변수는 상수가 아닌 일반 변수로 취급됩니다.int x = 0;auto lambda = [x].. 2024. 8. 6.
언리얼 C++ to BP: BlueprintNativeEvent 매크로로 C++함수 오버라이드 하기 Unreal Engine에서 C++로 선언된 함수를 블루프린트에서 오버라이드하려면, 함수 선언에 BlueprintNativeEvent 매크로를 사용해야 합니다. 또한, 해당 함수를 virtual로 선언하여 C++에서도 오버라이드할 수 있도록 해야 합니다. BlueprintNativeEvent 매크로는 C++에서 기본 구현을 제공하고, 블루프린트에서 오버라이드할 수 있게 합니다.이렇게 하면 함수의 기본 동작을 C++에서 정의하고, 블루프린트에서 이를 재정의할 수 있습니다. 1. "BlueprintNativeEvent": C++에서 기본 구현을 제공하고, 블루프린트에서 오버라이드할 수 있는 함수 선언에 사용됩니다.2. "_Implementation" 접미사: 함수의 기본 구현을 제공하는 C++ 함수 이름.. 2024. 6. 18.
언리얼 C++: EnhancedInput 시스템이란? 언리얼 엔진 5의 Enhanced Input 시스템은 기존의 입력 시스템(Input System)을 대체하여 보다 유연하고 강력한 입력 처리를 제공합니다. 이 시스템은 다양한 입력 디바이스를 통합 관리하고, 더 복잡한 입력 매핑과 처리 로직을 지원합니다. Enhanced Input의  주요 개념Input Mapping Contexts:입력 맵핑 컨텍스트는 여러 입력 액션(Input Actions)을 그룹화하는 역할을 합니다.특정 상황이나 상태에서 활성화될 수 있으며, 여러 컨텍스트를 겹쳐 사용할 수 있습니다.예를 들어, 걷기 상태와 운전 상태에 따라 다른 입력 맵핑 컨텍스트를 사용할 수 있습니다.Input Actions:입력 액션은 단일 입력 이벤트(키 누르기, 마우스 클릭 등)를 나타냅니다.디지털 입력.. 2024. 6. 18.
언리얼C++: ConstructorHelpers를 사용해 에셋을 로딩해보자 서론 :  컨텐츠 폴더의 에셋을 c++에서 사용하고 싶어언리얼 엔진에서 c++로 클래스를 제작할때 컨텐츠 폴더의 에셋을 지정하는 것이다.블루프린트에서는 스테틱메쉬나 스켈레탈 메쉬와 같은 컴포넌트들을 붙이고 드래그 앤 드롭 하거나 선택해주면 쉽게 에셋을 지정해줄 수 있었다. 하지만 c++은 어떻게 할 수 있을까?? ConstructorHelpers란?언리얼 엔진 5.4에서 ConstructorHelpers 클래스는 주로 C++ 코드에서 객체를 생성할 때 리소스를 찾고 로드하는 데 사용됩니다. ConstructorHelpers는 주로 생성자에서 특정 자산(Asset)을 쉽게 로드할 수 있도록 도와줍니다. 공식 문서를 기반으로 ConstructorHelpers에 대해 자세히 설명하겠습니다.1. FObjectF.. 2024. 6. 18.
unreal VR 패키징 Pico와 Oculus Oculus SDK Platform세팅오큘러스 AndroidStudio Setting은 아래와 같다요큘러스 2의 API레벨은 32였다    pico SDK Platform세팅pico neo 3는 API level이 29였다.거기에 맞는 sdk를 준비해야한다.   오큘러스 NDK 설정 Pico NDK 설정pico의 경우는 공식문서에서 아래와 같이 나와있었다. 지금은  5.3 버전을 사용하고 있기 때문에 25.1.837393 버전을 사용하도록 한다. 오큘러스와 동일한 NDK 이기때문에 크게 문제될 것 같지 않다.  SDK  Command-line Tools도 오큘러스와 같이 11.0버전을 사용한다 따로 만져줄 것 없다. Oculust Unreal Android SDK설정 Pico Unreal 설정  참고문서.. 2024. 6. 5.
언리얼 C++: TScriptInterface TScriptInterface란?TScriptInterface는 Unreal Engine에서 인터페이스 기반 프로그래밍을 지원하기 위해 사용되는 템플릿 클래스입니다.이 클래스는 UObject 기반 클래스에서 인터페이스를 구현하고 해당 인터페이스를 참조할 수 있는 기능을 제공합니다. 이를 통해 객체 지향 프로그래밍의 다형성 기능을 활용하고, 블루프린트와 C++ 코드 간의 상호 운용성을 높일 수 있습니다. TScriptInterface를 사용하여 인터페이스를 안전하게 참조하고 호출할 수 있으며, 이는 코드의 유연성과 재사용성을 크게 향상시킵니다.   https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/CoreUObject/UObje.. 2024. 5. 28.
언리얼 C++ : Ensure와 EnsureMsgf란? ensure와 ensureMsgf는 Unreal Engine에서 사용되는 두 가지 중요한 디버깅 매크로입니다. 이 두 매크로는 특정 조건이 false일 때 개발자에게 경고를 보내고 추가 정보를 제공하도록 설계되었습니다. ensure는 기본적인 경고를 제공하며, ensureMsgf는 조건이 충족되지 않을 경우 사용자 정의 메시지를 출력할 수 있습니다.ensureensure 매크로는 조건이 false일 때 경고를 출력하지만, 프로그램 실행을 중단하지 않고 계속해서 실행합니다. 이는 개발자가 코드 실행 중에 발생할 수 있는 잠재적인 문제를 인식하는 데 유용합니다. ensure는 다음과 같이 사용됩니다: 이 경우, Value가 0 이하일 때 ensure는 경고 메시지를 출력하지만, 프로그램은 계속 실행됩니다. .. 2024. 5. 27.
언리얼 엔진의 델리게이트 기초와 심층분석 1.델리게이트(Delegate)란?델리게이트는 특정 이벤트가 발생했을 때 호출될 함수를 지정하는 방식입니다. 이는 C++의 함수 포인터와 유사하지만 더 안전하고 유연합니다 델리게이트와 이벤트 시스템의 차이점델리게이트는 함수 포인터의 역할을 하며, 특정 시점에 함수를 호출할 수 있게 합니다.이벤트는 델리게이트를 기반으로 하며, 여러 개의 델리게이트를 바인딩하여 특정 이벤트 발생 시 여러 함수를 호출할 수 있습니다.델리게이트의 활용 예제UI 버튼 클릭 이벤트 처리: UI 버튼이 클릭되었을 때 특정 함수를 호출하도록 설정.캐릭터 상태 변경: 캐릭터의 상태가 변경될 때마다 해당 상태에 맞는 함수를 호출.델리게이트의 메모리 관리델리게이트는 자동으로 메모리를 관리하지만, 바인딩된 객체가 소멸될 때 바인딩을 해제하는.. 2024. 5. 27.
언리얼 C++: #define #define은 C와 C++에서 매크로를 정의하는 데 사용하는 전처리기 지시문입니다. 매크로는 코드에서 반복적으로 사용되는 텍스트를 치환하는데 사용되며, 주로 상수나 간단한 함수처럼 사용됩니다. 매크로는 컴파일러가 소스 코드를 컴파일하기 전에 텍스트 치환을 수행하므로 코드의 가독성과 유지보수성을 높이는 데 도움을 줍니다. #define의 역할과 사용 방법#define은 주로 다음과 같은 용도로 사용됩니다:상수 정의:상수를 정의하여 코드에서 직접 숫자나 문자열을 사용하지 않도록 합니다.매크로 함수 정의:반복되는 코드 블록을 매크로로 정의하여 코드 중복을 줄이고 가독성을 높입니다.조건부 컴파일:특정 조건에 따라 코드를 컴파일할지 여부를 결정할 수 있습니다.  예제상수정의#define PI 3.14159PI라.. 2024. 5. 24.
언리얼 C++ : typedef와 typedef struct는 왜 사용하는 걸까? typedef는 C와 C++에서 데이터 타입에 새로운 이름을 부여하는 키워드입니다. typedef는 코드의 가독성을 높이고, 복잡한 데이터 타입을 간단하게 표현하는 데 유용합니다. 특히 구조체(struct)를 사용할 때 자주 사용되는데, 그 이유와 함께 자세히 설명하겠습니다.왜 typedef를 사용하는가?가독성 향상:복잡한 타입을 간단한 이름으로 바꿔서 코드가 더 읽기 쉽고 이해하기 쉽게 만듭니다.유지보수 용이성:데이터 타입이 변경되었을 때, typedef를 사용하면 변경된 타입을 정의한 한 곳만 수정하면 되므로 유지보수가 쉬워집니다.코드 일관성:같은 타입을 여러 곳에서 사용할 때, typedef를 통해 일관된 이름을 사용할 수 있습니다.왜 typedef struct를 자주 사용하는가?C에서는 구조체를 .. 2024. 5. 24.
언리얼C++: MINIMAL_WINDOWS_API란? MINIMAL_WINDOWS_API는 Windows 플랫폼에서 최소한의 Windows API를 사용하도록 지정하는 매크로입니다. Unreal Engine 5와 같은 게임 엔진에서 이 매크로를 사용하는 이유와 사용 시점을 설명드리겠습니다.왜 MINIMAL_WINDOWS_API를 사용하는가?Windows 플랫폼에서 코드를 작성할 때, Windows API는 매우 방대하고 다양한 기능을 제공합니다. 하지만 모든 기능을 사용하지 않는 경우가 많고, 필요 없는 기능까지 포함하면 컴파일 시간 증가, 메모리 사용량 증가, 충돌 가능성 증가 등의 문제를 일으킬 수 있습니다. MINIMAL_WINDOWS_API는 이러한 문제를 피하고, 필요한 최소한의 Windows API만 포함하도록 하기 위해 사용됩니다.MINIMAL.. 2024. 5. 24.
언리얼 C++: 인라인 함수 (FORCEINLINE) 인라인 함수란?인라인 함수는 함수 호출을 하는 대신, 그 함수를 호출하는 코드에 함수의 본문을 직접 삽입하는 것을 의미합니다. 이렇게 하면 함수 호출에 따른 오버헤드(추가적인 비용)가 줄어들어 프로그램이 더 빠르게 실행될 수 있습니다.레고 블록을 조립하는과정에 비유해보자일반 함수: 마치 레고 블록을 조립할 때 매번 설명서를 꺼내서 다음 블록이 무엇인지 확인하고 조립하는 과정입니다. 설명서를 보는 데 시간이 걸립니다.인라인 함수: 설명서의 내용을 머릿속에 외워서 매번 설명서를 보지 않고 바로 레고 블록을 조립하는 것과 같습니다. 설명서를 보는 시간이 없기 때문에 더 빨리 조립할 수 있습니다.코드 예시로 이해하기인라인 함수는 특히 게임 개발처럼 성능이 중요한 분야에서 많이 사용되며, FORCEINLINE은 .. 2024. 5. 24.
반응형