2024/09 23

디버깅에 도움되는 메소드 ensure 사용법

c++용법에서 Assert 매크로가 있는데ue5에도 이와 비슷하게 응용할 수 있다. 1. Check(표현식) assert결과가 false면 실행을 중지시킨다. 2. Ensure (표현식) ensure을 사용하여 오류를 디버깅 하는 방법에는 3가지가 있다. 1. ensure( 표현식 )표현식을 검증하여 실패하는 그 지점까지 이르는 콜스택을 생성한다. 2.ensureMsgf(표현식, TEXT("")) 해당 표현식 검증이 실패되면 TEXT에 써져있는 구문으로 오류를 체크할 수 있다. 3. if문을 사용하는 표현식 위 3가지 방식을 코드화하면 다음과 같다.

UE5 2024.09.22

AVL

AVL은 균형 잡힌 이진트리 종류 중 하나 입니다.이진트리의 종류는 대략적으로 다음과 같습니다- AVL- 2-3 트리- 2-3-4 트리- Red-Black 트리- B 트리  자동으로 균형을 잡는 AVL 트리와 균형 인수(Balance Factor) 균형 인수 = 왼쪽 서브 트리의 높이 - 오른쪽 서브 트리의 높이 균형 인수를 통해서 해당 트리의 균형을 잡기 위한 척도를 잡을 수 있다.AVL트리는 균형 인수의 절대값이 2 이상인 경우에 균형을 잡기 위한 트리의 재조정을 진행한다.  이 그림과 반대로 오른쪽 트리의 깊이가 3이고 왼쪽 트리의 깊이가 1라면균형 인수는 -2일것이다.  AVL 트리의 균형이 무너지는 상태(= 이를 리밸런싱이 필요한 상황이라한다. )를바로잡는 회전은 4가지로 정리가 된다.  LL회..

1. GameplayAbilitySystem 플러그인 소개

게임 플레이 시스템은 MOBA 타이틀 또는 RPG에서 찾을 수 있는유형의 능력과 속성을 구축하기 위한 매우 유연한 프레임워크입니다. 게임 속 캐릭터가 사용할 수 있는 액션이나 패시브 능력,이러한 액션으로 인해 다양한 속성이 쌓이거나 닳아 없어질 수 있는 상태 효과인'쿨타운' 타이머 또는 리소스 비용을 구현하여위와 같은 방법으로 액션의 사용을 규제하고, 각 레벨에서 해당 기능의 수준과 효과를 변경할 수 있습니다.또한 입자 또는 음향 효과 등 역시 게임플레이 어빌리티 시스템으로 활성화 할 수 있습니다. 간단히 말해, 이 시스템은 현대 RPG 또는 MOBA 타이틀에 설정된캐릭터의 능력에 대해서 복잡한 게임 내 능력을 설계하고 구현할 때 효율적으로 네트워크화 하는데 도움이 될 수 있도록 만들어진 것입니다. 게임..

UE5/GAS 2024.09.19

[DevLog] Lucy 240917

추가 기능 1- idle 상태, relax 상태 , jog 상태 분리relax는 idle상태에서 실행되고 2초 지나면 랜덤으로 팔 휘적거리거나 좀 편안해 보이는 애니메이션 재생함.애니메이션이 3개면 실행 확률을 다음과 같이 조정함1 애님 - 30%2 애님 - 40%3 애님 - 30%이 정도로 나누어 랜덤 실행되도록 함 기본적은 Anim Instance는 c++에서 값을 받아옴.해당 값을 ABP에서 관리하고 수정 가능하도록 함. 추가 기능 2향상된 인풋 시스템에 맞는 게임 플래이 태그 제작 및 인풋 시스템 cpp 제작  오늘 적용한 것MIXAMO에서 애니메이션을 받아와 파라곤 캐릭터에 맞게리타겟팅함- 언리얼 기본 마네킹 스켈레톤을 이용해서 리타겟팅 하였다.캐릭터 애니메이션 - Idle, Relax, Jog..

Enhanced Input System Input Binding Process (향상된 인풋 시스템 인풋 바인딩 과정)

1. Native Gameplay Tags- Define input tags(입력 태그 정의) 입력 태그를 정의해줍니다. 입력 태그는 점프, 이동, 발사 등 다양한 입력 동작을 나타내는 식별자입니다. 이러한 입력 태그는 소스 파일에서 다음과 같은 형태로 정의해줄 수 있습니다.// 해더 파일 class UInputAction; class UInputMappingContext; USTRUCT(BlueprintType) struct FLucyInputActionConfig { GENERATED_BODY() public: UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, meta = (Categories = "InputTag")) FGameplayTag InputTag; UPR..

UE5 2024.09.16

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