2025/06 13

생성자에 의한 템플릿 인자 유추 과정

CTAD란?컴파일러는 CTAD( class Template Arguement Deduction = 템플릿 클래스 인수 추론 )을 이용하여 템플릿 생성자에 전달된 인수를 보고 매개변수를 유추한다.함수 템플릿은 항상 전달된 인수를 보고 템플릿 매개변수를 알아서 결정한다.그런데 클래스 템플릿 인수 추론(=CTAD)를 이용하면 핼퍼 함수 템플릿이 필요 없다.생성자에 전달된 인수를 보고 템플릿 매개변수를 알아내기 때문이다.추론 기능 사용 요건물론 이런 추론 기능은 다음과 같은 사용 요건을 필요로 한다.1. 클래스 템플릿에 매개변수 디폴트 값을 모두 지정 했거나2. 생성자에서 모든 매개변수를 사용하도록 작성된 경우위의 두 가지 경우에만 적용된딘.번외 : 사용자 정의 유추 방식템플릿 매개변수를 사용자가 직접 지정할 ..

어빌리티 태스크 (AT)의 활용

Unreal GAS: 어빌리티 태스크(AT) 활용 패턴 정리Gameplay Ability System(GAS)에서 어빌리티는 한 프레임 내에서 시작되며,EndAbility 혹은 CancelAbility가 호출되기 전까지는 계속 실행 상태를 유지합니다.즉, GA가 시작되면 명시적으로 끝내기 전까지는 유효합니다. 시간이 걸리는 GA는 어떻게 설계할까?어빌리티 중에는 애니메이션 재생, 캐스팅 타임, 딜레이 후 효과 적용 등 시간이 필요한 작업들이 있습니다.이런 작업을 동기적으로 처리하면 복잡해지고 GA가 차단될 수 있기 때문에,비동기 방식으로 처리하는 것이 좋습니다.이를 위해 GAS는 Ability Task(AT, 혹은 Task Ability로 TA)를 제공합니다. 어빌리티 태스크(AT) 활용 패턴기본 사용 ..

UE5/GAS 2025.06.10

D3D11 Resize Viewport

뷰 포트를 윈도우 전체가 아니라,원하는 영역만 뷰포트를 사용하도록 하는 예제를 짜볼 것이다. 그 전에 RTV에 대한 정의를 해보자.RTV(Render Target View)란?RTV(Render Target View)는 GPU가 픽셀을 출력할 수 있는 대상(Render Target)을 가리키는 Direct3D 11의 뷰(View) 객체이다. 흔히 백 버퍼(back buffer)나 오프스크린 텍스처와 연결된다.RTV를 OMSetRenderTargets()를 통해 파이프라인에 바인딩하면, 렌더링 결과가 해당 리소스에 출력된다.뷰포트 설정 시, 이 RTV가 참조하는 텍스처의 크기를 기준으로 자동 조절 가능하다. 전체 코드: RTV 기준 자동 뷰포트 설정#include #include // Microsof..

그래픽스/DX11 2025.06.10

T{} 영초기화 구문과 템플릿화

// 예시 코드template void Grid::veryfyCoordinate(size_t x, size_t y){ if(x >= m_width) { throw std::out_of_range { std::format("{} must br less than {}", x, m_width); } } if(y >= m_height) { throw std::out_of_range { std::format("{} must br less than {}", y, m_height); } }}클래스 템플릿 메서드 구현 코드를 작성할 때특정한 템플릿 타입 매개변수를 T에 대하여 디폴트 값을 지정하려면,T{}와 같은 문법에 ..

게임플레이 어빌리티 스펙

1. 스펙(Spec)이란?스펙(Spec)은 게임플레이 어빌리티(Ability)에 대한 정보를 담고 있는 구조체입니다.ASC(Ability System Component)는 어빌리티 인스턴스를 직접 참조하지 않고, 스펙 정보만을 가지고 관리합니다.스펙은 어빌리티의 현재 상태 등 다양한 정보를 포함합니다.ASC에서 어빌리티를 제어할 때는, 스펙에 포함된 Handle 값을 사용해 컨트롤합니다.핸들 값은 전역으로 관리되며, 스펙이 생성될 때마다 1씩 증가합니다. 기본값은 -1이며, 이는 잘못된 핸들인지 여부를 판별하는 데 사용됩니다.요약어빌리티 정보: 스펙(Spec)어빌리티 인스턴스 레퍼런스: 스펙 핸들(Handle)2. 어빌리티 시스템 컴포넌트의 입력 처리게임 어빌리티 스펙에는 입력 값을 지정할 수 있는 필드..

UE5/GAS 2025.06.09

StringBuilder

문자열의 리스트가 주어졌을 때 이 문자열들을 하나로 이어붙이려고 한다.이떄의 수행 시간은 어떻게 되는가?문제를 간단히 하기 위해 모든 문자열의 길이를 x라 하자.같은 n개의 문자열이 주어졌다고 가정해보자. 문자열을 이어붙일 때마다 두 개의 문자열을 읽어 들인 뒤 문자를 하나하나 새로운 문자열에 복사해야 한다.처음에는 x개, 두 번쨰는 2x개, 세 번째는 3x개 n번 쨰는 nx개의 문자열을 복사해야 한다. 따라서 총 수행 시간은 O(x + 2x + 3x + ... + nx)즉, O(xn^2)이 된다. StringBuilder는 이 문제를 해결해 줄 수 있다.StringBuilder는 단순하게 가변 크기 배열을 사용하여 필요한 경우에만 문자열을 복사하게끔 해준다. 문자열, 배열, 일반적인 자료구조를 연습해 ..

DT 기능 에디터 만들기 GoogleSheetURLParser Class 설명

1. GoogleSheetURLParser Class 에디터 만들기 위해선 일단, 정규 표현식이란 개념을 숙지해야 한다.웬 뜬금없이 정규 표현식? 이라는 의문을 가지기 쉬운데,정규 표현식 사용을 통해 문자열에서 특정 패턴을 찾거나 검증하거나 추출하는 데 사용되는 개념이기 때문이다. 구글 스프레드 시트 URL 주소를 통해 특정 패턴을 찾아서, 변수 값을 추출한 뒤 그 변수 값으로 시트를 분별하여 DT를 가져올 것이기 때문이다. 정규 표현식이란,특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 이러한 정규 표현식을 활용하기 위한 네임 스페이스는using System.Text.RegularExpressions 이다. 정규 표현식을 통해,Google Sheet URL에서 spreadShe..

문자셋(Character Sets)의 종류와 특성

가장 대표적인 문자셋에 해당하는아스키코드(ASCII CODE)와 유니코드(UNICODE)에 대해서 간단히 언급하고자 한다.이미 알고 있듯이 아스키코드는 미국에서 정의하고 있는 표준이다.알파벳의 개수는 26개이다.여기다가 몇몇 확장 문자(그림문자를 비롯하여 흔히 사용되는 수학 기호나 악센트 기호들)를 포함해도 총 256개 넘지 않는다.그래서 1바이트를 가지고도 충분히 표현할 수 있다.다시 말해서 아스키코드는 1바이트로 표현이 된다. 문제는 영어가 아닌 다른 국가에서 사용하는 문자들을 표현하는 일이다.우리나라를 예로 들어 보자.컴퓨터에 한글을 인식시키기 위해서는 글자 하나하나마다 값(숫자)을 지정해줘야만 한다.아스키코드처럼 말이다.그렇다고 해서 미국에서 영어를 표현하기 위해정의해 놓은 아스키코드값을 한글을 ..

ArrayList와 가변 배열

특정 언어에선 배열(이 경우엔 종종 리스트라 불리지만)의 크기를 자동으로 조절할 수 있습니다.즉, 데이터를 덧붙일 때마다 배열 혹은 리스트의 크기가 증가한다.하지만 자바 같은 언어에서는 배열의 길이가 고정되어 있다.이런 경우에는 배열을 만들 때 배열의 크기를 함께 지정해야 한다. 동적 가변 크기 기능이 내재되어특정 언어에선 배열(이 경우엔 종종 리스트라 불리지만)의 크기를 자동으로 조절할 수 있습니다. 즉, 데이터를 덧붙일 때마다 배열 혹은 리스트의 크기가 증가한다.하지만 자바 같은 언어에서는 배열의 길이가 고정되어 있다.이런 경우에는 배열을 만들 때 배열의 크기를 함께 지정해야 한다. 동적 가변 크기 기능이 내재되어 있는 배열과 비슷한 자료구조를 원할 때는 보통 ArrayList를 사용한다.Arra..

GAS 캐릭터 입력 처리

플레이어 캐릭터 기획기존 플레이어 캐릭터 클래스를 상속입력에 따라 정해진 게임플레이 어빌리티가 발동되도록 설정점프 GA : 스페이스 바를 누르면 점프 어빌리티가 발동공격 GA : 마우스 왼쪽 클릭시 공격 어빌리티가 발동 기본적으로 ASC 를 사용하고,어빌리티 태스트를 사용해서 보다 게임플레이 어빌리티를 풍부하게 구현할 것이다. 또한 게임플레이 태그를 사용하여 현재 캐릭터의 상태를 표현하고디버깅 기능을 확인하는 것이 중요하다. 게임플레이 어빌리티 시스템의 기본 흐름으로게임플레이 어빌리티 구현시 어빌리티 태스크를 보조적으로 활용하는 방법을 학습할 것이다. 플레이어의 ASC 설정 지난 번 구현한 분수대 액터처럼 구현하려면 싱글 플레이까지 가능하다.하지만 네트워크 멀티플레이까지 감안한다면 몇 가지 추가로 고민..

UE5/GAS 2025.06.07