전체 글 282

C++ 람다 식

람다 식이란? C++ 11 이상에서는 람다 식(종종 람다라고도 함)은 함수에 인수로 호출되거나 전달되는 윛에서 익명 함수 개체(클로저)를 정의하는 편리한 방법입니다. 일반적으로 람다는 알고리즘 또는 비동기 함수에 전달되는 몇 줄의 코드를 캡슐화하는 데 사용됩니다. 이 문서에서는 람다를 정의하고 다른 프로그래밍 기술과 비교합니다. 해당 장점을 설명하고 몇 가지 기본 예제를 제공합니다. 람다 식의 일부 다음 함수에 서 번째 인수 std::sort()로 전달되는 간단한 람다입니다.#include #include void abssort(float* x, unsigned n) { std::sort(x, x + n, //람다 표현식 시작 [](float a, float b) { return (std::abs(a) ..

TObjectPtr 은 뭐고 왜 쓸까?

TObjectPtr 이란? TObjectPtr은 원시 포인터를 대체하기 위한 UObject용 포인터입니다.언리얼에서는 공식적으로C++ 라이선스 사용자의 프로젝트에 원시 오브젝트 포인터를 사용하거나,TObjectPtr을 선택적으로 사용할 수 있도록 합니다. UE5에서는템플릿 기반 64비트 포인터 시스템인 TObjectPtr를 도입하여 에디터 빌드를 지원합니다. TObjectPtr의 기능 1. 에디터 빌드에 다이나믹 해상도와 액세스 트래킹을 추가하면서( = 에디터 빌드에서 수행하는 기능이 있으며,)비에디터 빌드의 원시 포인터와 동일한 역할을 수행합니다.( = 비에디터 빌드에서 장애가 되지 아니함) 2. TObjectPtr 변수는 함수로 전달되가나 로컬 변수에 저장될 때자동으로 원시 포인터로 변환됩니다.(기능..

UE5 2024.09.14

D3D11 HongLap - 벡터와 레스터화

벡터 동차 계산 보통 1이면 포인터이다(0이 아니면 포인터), 0이면 벡터이다.가장 마지막이 동차좌표계이다. 레스터화가 빠른 이유 레스터화가 빠른 이유를 설명하기 전에,비교군인 레이트레이싱을 설명하겠습니다. 레이트레이싱 우리가 가장 많이 사용하는 알고리즘은 레이트레이싱 (역방향 알고리듬) 이다.이 알고리듬은 시점에서 ray를 쏘고, 이 ray가 hit하게되면, 색을 결정한 다음에hit point의 픽셀을 계산하여 렌더링하는 기술이다. 근데 모든 픽셀을 계산하려면 모든 픽셀에 광선을 쏘개된다.만약 픽셀이 10만개면 최소 광선을 10만개는 쏴줘야한다.레이트레이싱에서 가장 부담이 되는 것은 광선하고 물체가 충돌하는 부분을 계산해야 된다는 것입니다. 이러한 이론적인 것을 코드화하면레이트레이싱은 다음과 같은 코드..

그래픽스/DX11 2024.09.13

Experience

Experience 가 뭔가? - 게임 모드가 변경되는 것 처럼 쓰는 것 Experience 를 왜 쓰는가? - 게임 모드가 무거워서 게임 모드 하나만 두고 쓴다. -> 해당 이유 : 게임 모드가 무겁다는 뜻은 내부적으로 세팅하고 있는 값이 많기 때문이다. 4에서 5로 넘어올 때 언리얼에서 백워드 컴포터블을 위해 게임모드에다가 이것 저것 넣었다. 그래서 게임모드 말고 게임모드 베이스라고 하나 있는데, 게임 모드가 무거우니까 적당히 덜어내서 가볍게 쓰라 라고하는 것이 게임모드 베이스이다. 하지만 이 게임모드 베이스도 교체하는 단계에서 굉장히 무거워진다. 모든 월드에서 동일한 게임모드를 쓰지만, Experience에서 새로운 개념을 사용하여 게임모드의 변경은 일어나지 않지만, 하나의 게임모드를 대체하는 작은..

UE5 2024.09.07

UE Fundamentals core elements (언리얼 엔진의 기본 핵심 구성요소)

언리얼 엔진 기본 핵심 구성 요소 GameInstanceHUD & WidgetsPlayer ControllerPlayer StatePawnGame StateGameMode Any object we can see in the level is an actor.레벨에서 볼 수 있는 모든 객체는 엑터입니다.It can be anything like a rock or a simple cube or even the player charcter itself.그건 바위나 단순한 큐브, 심지어 플레이어 캐릭터 그 자체일 수도 있습니다. The character is an advanced version of a pawn with a lot of inbuilt features provided by Unreal Engine...

UE5/Lyra 2024.09.06

StaticClass, TSubClassOf, FSoftObjectPath, FScopeLock

StaticClassA라는 클래스를 만들면 A::StaticClass(); 이런 문법이 가능한데C#에는 리플렉션이 가능하다.리플렉션이라면 자기스스로 참조할 수 있도록 하는 것인데,C++에는 없는 문법이다.얘를 들어 C#에서는 해당 이름을 가진 변수가 필드에 있다면 값을 넣어주는 함수가 가능하다.이처럼 필드에 있다면 특정 이름을 통해 리플렉션해서 해당 변수를 찾을 수 있다는 것이다. StaticClass는 결국 UClass라는 것인데,이는 즉 메타데이터를 뜻한다.즉 클래스들은 해당 메타데이터를 이용하여 필드에서 리플렉션 할 수 있다. 변수 이름이 뭔지, 함수 이름이 뭔지, id는 뭔지 등등을 알 수 있다.실제로 C++에서 이를 추적하면 필드가 나오고, 그 필드를 타고 들어가면 이름이 뭔지, ID가 뭔지 정..

UE5 2024.09.06

9월 첫 주 목표 및 한 주간 기록

0904플랫폼 게임에 사용될 월드 오브젝트 만들었다.BP로 만든 월드 오브젝트를 이용해 플랫폼 게임을 간단하게 만들 생각이었는데, C++로 바꾸고, 기능도 좀 추가할 계획이다. 0905 라이라 보다보면 확실히 내 시선에선 알기 힘들었던 것을 알게된다.아 진짜 라이라만 파도 힘들긴 한데, 지금 실력이 라이라를 이해하기는 부족한듯 싶다.때문에 라이라는 슥슥 봐가며 이런 게 있군! 하고 넘어가려고 한다.자료구조 알고리즘이나 코테 신경 쓰기 Lucy 작업하기 총 학습일

All about Soft and Weak pointers (소프트 포인터와 약한 포인터의 모든 것)

다음 포인터 유형을 사용하세요 TSoftObjectPtr :경로를 통해 로드되거나 로드되지 않을 수 있는 객체를 참조하는 데 사용합니다.로드되지 않았더라도 다른 레벨의 액터를 가리킬 수 있습니다.에셋(메쉬 등)을 pointing하며 애셋을 임시로 로드할 때 비동기 로드 기능과 함께 사용할 수 있습니다.블루프린트 변수 유형인 "Soft Object Reference"과 동일합니다. TSoftClassPtr :로드되거나 로드되지 않을 수 있는 클래스 또는 Blueprint 유형을 참조하는 데 사용됩니다.로드되면 인스턴스를 만들 수 있는 클래스 유형이 제공됩니다.비동기 로딩 함수와 함게 사용하여 로드할 수 있습니다."Soft Class Reference" 청사진 변수 유형과 동일합니다.TWeakObjectPt..

UE5 2024.08.27

UBlueprintFunctionLibrary

BP로 된 애셋을 뜯을 때 마다,함수 라이브러리는 어떻게 제작해야 할지 막막했었다.막막했던 이유는 블루프린트에서만 쓸 수 있는 줄 알았기 때문이었다. 언리얼에서 제공해주는 Lyra 프로젝트를 뜯어보려고 뒤적거리다가플러그인 쪽을 뒤적거리기 시작했고 금방 발견하게 되었다. UBPFunctionLibrary class를 보고C++로 블루프린트 함수 라이브러리를 만들 수 있음을 알았다. UBlueprintFunctionLibrary UBlueprintFunctionLibrary는 프로젝트를 개발하는 동안,프로젝트의 여러 부분에 필요한 몇 가지 함수를 C++와 Blueprints에서 모두 만들어야 한다.이런 경우, C++에서 Blueprint 함수 라이브러리를 만들어서 이런 함수를 한 곳에 모을 수 있다. C++..

UE5 2024.08.21