프로그래밍 480

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

HLSL 개요

옛날 버전의 DX에서는 기본적인 쉐이더를 제공해주었지만, 이제는 그렇지 않다.따라서 DX를 난생 처음 본다 하더라도 VertexShader와 PixelShader는 짤 줄 알아야 DX를 쓸 수 있다. VertexShader와 PixelShader는 다른 프로그램이다.VS가 쫙 실행이 되고, PS가 실행이 된다.따라서 각각의 main이 있어야 한다. HLSL은 얼핏보면 C++과 비슷하지만 분명한 차이가 있다.근래에는 Shader Programming이 점점 복잡해지기 때문에 쉐이더를 파일로 넣어준다. AppBase::CreateVertexShaderAndInputLayout( L"ColorVertexShader.hlsl", inputElements, m_colorVertexShader,..

그래픽스/DX11 2025.06.03

Cocos Creator Canvas 최적화 고안

Cocos Creator Canvas 개념 Cocos Creator 2D에서는 Canvas라는 개념이 있다.이 개념은 유니티의 Canvas와 매우 비슷한 개념이다. 1. Canvas게임 내에서 UI 요소(버튼, 텍스트, 이미지 등)를 배치하는 "UI의 루트(root)" 역할Unity의 Canvas처럼,그 안에 다양한 UI 오브젝트(예: 버튼, 텍스트 등)를 자식 오브젝트로 넣어서 관리 2. MainCamera게임 화면을 보여주는 카메라 역할Unity에서 Main Camera와 동일하게, 씬(Scene)을 렌더링하는 뷰(View)를 담당 요약구조, 역할 모두 Unity의 Canvas와 매우 유사UI 시스템의 뿌리(루트)가 Canvas그 아래에 다양한 UI 오브젝트를 배치 추가 TIP대부분의 게임 엔진이 ..

CocosCreator 2025.06.02

코코스 크리에이터의 생명주기

코코스 크리에이터(Cocos Creator) 타입스크립트 컴포넌트의 생명주기는 게임 오브젝트(노드)가 생성, 활성화, 업데이트, 비활성화, 삭제되는 동안 자동으로 호출되는 콜백 함수들로 구성되어 있습니다. 생명주기 콜백(Life Cycle Callbacks)Cocos Creator는 컴포넌트 스크립트를 위한 생명주기 콜백 함수를 제공합니다. 사용자가 특정 콜백 함수를 정의하기만 하면, Cocos Creator가 해당 시점에 자동으로 실행해주며, 사용자가 직접 호출할 필요는 없습니다.현재 제공되는 주요 생명주기 콜백 함수(호출 순서대로)는 다음과 같습니다:onLoad()onEnable()start()update()lateUpdate()onDisable()onDestroy()onLoad()컴포넌트 스크립트의..

CocosCreator 2025.06.01