분류 전체보기

    C++ auto 타입 추론

    auto 키워드는 선언된 변수의 초기화 식을 사용하여 해당 형식을 추론하도록 컴파일러에 지시한다. 즉, auto 키워드를 사용하면 초깃값의 형식에 맟춰 선언하는 인스턴스(변수)의 형식이 '자동'으로 결정된다 (타입 추론(type inference)). 이 기능은 생성 시 변수를 초기화할 때만 작동한다. 아래는 int형 변수 a와 float형 변수 b의 합을 auto키워드를 통해 sum변수에 저장하고 출력한 것이다. #include using namespace std; int main() { int a = 5; float b = 3.5; auto sum = a + b; cout

    [Unity] Sprite (UI, SpriteRenderer) 색상 관련

    유니티에선 아래와 같이 RGB가 각각 255로 설정되있는 모습인데 코드상으론 전혀 다르다 public readonly Color orange = new Color(255, 165, 0); GetComponent().color = orange; 따라서 이와같이 바꿔줘야 정상적으로 바뀐다. public readonly Color orange = new Color(1f, 0.6f, 0f); GetComponent().color = orange;

    BSP(Binary Space Partitioning)알고리즘을 응용해 로그라이크류 게임 방만들기

    이진 공간 분할법(Binary Space Partitioning, BSP) 은 재귀적으로 유클리드 공간을 초평면 상의 볼록 집합으로 분할하는 기법이다. 분할 과정으로 BSP 트리라 불리는 트리 구조가 만들어진다. doom은 3차원처럼 보이지만 실제로는 2차원이고 그 2차원을 나타내기 위해 사용됐다. BSP알고리즘을 통한 로그라이크류 방만들기 0: 빈 공간 1 : 방, 3: 가로분할 길, 4: 세로분할 길 로그라이크 게임을 하다보면 일정한 맵을 돌려쓰는 게임도 있긴하지만 매번 새로운 맵을 생성하는 게임들이 존재한다. 매번 새로 맵을 생성할때 BSP알고리즘을 응용하여 새로 맵을 만들수 있다. 위에서 설명한 BSP알고리즘에서 둔각을 찾아 반복하여 나누는 방법이 아니라 2차원상에서 직사각형 모양으로만 방을 나눠..

    C++ mutable

    원래대로라면 const로 멤버 함수가 상수화되면 이 함수는 멤버 변수를 변경시키지 못한다. 그러나 멤버 변수가 mutable로 선언되어 있다면 상수화된 멤버 함수라도 멤버 변수 변경이 가능해진다. class AAA { mutable int val; public: void setValue(int _val) const { val = _val; } }; setValue는 상수화된 멤버 함수이므로 원래대로라면 멤버 변수 val을 변경할 수 없지만 val 이 mutable로 선언되었으므로 값 수정이 가능하다. 출처 : https://cpp11.tistory.com/35

    C++ static (정적 변수 / 함수)

    정적 변수는 선언 후 외부에서도 선언을 한 번 더 해줘야한다. Test.h #pragma once class Test { public: static int Val; }; cpp 파일에서 재선언 해주면 된다. 그리고 접근하기 위해선 클래스::변수 또는 함수로 해주면 된다. #include #include "Test.h" using namespace std; int Test::Val = 0; int main() { cout

    [Unreal] UI 마우스 관한 동작 이벤트 설정방법

    UI내 버튼이다. 총 5개의 이벤트가 존재하는데 On Clicked : 클릭할 시 On Pressed : 클릭한 후 지속적으로 누르고 있을 시 On Released : 클릭 후 뗐을 시 On Hovered : 마우스가 UI 범위 안에 들어왔을 시 On Unhovered : 마우스가 UI 범위 안에 들어온 후 벗어날 시 이벤트 그래프에서 각각의 함수들의 원형을 봤더니 리턴형 void에 파라미터 void이다. 즉 void 함수이름() C++로 구현하고자 하는데 각각 해당되는 동작 클래스 변수로 되어있다. 각 클래스 원형들을 봤더니 아예 빈 껍데기이다 그래서 동적으로 바인딩하면 어떨까해서 해봤다. 클릭 이벤트 클래스 변수에 할당 해줬다. void UInventoryListUI::InitButtons() { B..

    [Unreal] 화면 정중앙 값 구하기

    뷰포트 통해 구할 수가 있다. GetGameViewport 함수는 UGameViewportClient형 클래스를 반환한다, 이는 뷰포트의 UI, 오디오 그리고 입력 시스템이다. 이걸 바탕으로 뷰포트 클래스(FViewport )를 가져온다. auto gameViewport = GetWorld()->GetGameViewport(); FVector2D viewportSize; gameViewport->GetViewportSize(viewportSize); viewportSize /= 2; // 최종 중앙값 참고 : https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/Engine/UGameViewportClient/ https://docs.unrealeng..

    프로젝트의 총 코드 라인 수를 확인하는 방법 (SourceMonitor)

    우선 SourceMonitor을 다운로드 한다. 맨 하단 굴림으로 되어있는게 최신 버전이다. 다운로드가 다 끝났다면 File > New Project를 클릭한 후 프로젝트에 맞는 언어를 설정한다. 그 다음 프로젝트 파일 명칭이랑 경로를 설정한다. 여기서 All Subdirectories를 선택한다 즉 하위 폴더까지 다 추가한다는 뜻. 3개 다 체크한다 공백 문자, 중복된 헤더파일 등을 미포함 시킨다. New SourceMonitor project format을 선택한 후 Use this format when saving all projects를 체크한다. 한글이 있을 수도 있으니 UTF-8 파싱을 허용한다. 결과는 아래와 같다. Baseline 우클릭 또는 Views 탭 통해서 띄울 수가 있다.

    그래픽스 API 정의와 비교 분석

    로우 레벨 그래픽스 API들(Vulkan, DirectX, Metal, WebGPU)은 GPU와 구조 모델이 비슷하다. GPU는 원래 고정적인 코드들을 가졌었으며 수정 또한 불가능에 가까워서 성능이 떨어졌다. 이를 극대화 시키기 위해서 드라이버라는걸 새로 개발했다. 호출 순서 API 초기화 : GPU와 통신하기 위해 틀대를 만듬. 에셋 로딩 : 렌더링에 필요한 데이터 (셰이더) 또는 GPU와 통신하기 위한 명령들. 에셋 업데이트 프레젠테이션 : 커맨드 버퍼를 커맨드 큐에 보낸 후 스왑체인을 활용해서 렌더링. 2 3 4 반복 (프로그램 종료할 때 까지) GPU가 작업이 끝날 때까지 대기하고 사용한 모든 포인터들을 해제하고 데이터를 초기화한다. 비교 분석 라이브러리 파일을 가져올 시 API를 사용하기 위해선..

    [Unreal] 플레이 누른 직후 또는 인벤토리 열 때 인게임 모드 설정

    플레이를 누르면 마우스 커서가 보이고 입력을 받질 않는다 따라서 입력을 받으려면 한번 클릭해줘야 한다, 언리얼 엔진의 기본 세팅은 GameAndUIEx이다 이건 UWidgetBlueprintLibrary 클래스 내에 static 함수를 사용하여 설정할 수가 있다. 각각 함수들의 용도는 다음과 같다. GameAndUIEx : UI만 사용자의 입력을 받게끔 한다 만약에 못받는다면 플레이어 컨트롤러가 받게 된다. GameOnly : 게임 컨트롤러만 입력받게끔 한다 (플레이 직후 마우스가 인게임으로 들어가며 커서 또한 사라진다). UIOnlyEx : UI만 입력받게끔 한다 (인벤토리 열고 닫을 때 플레이어 회전이라던지 막는 용도). 시작 직후 인게임 모드를 입력만 받게끔 사용한다. if (auto p_World..