전체 글 35

[D2D 게임만들기 6] - 리소스매니저

생각과는 다르게 하나의 이미지를 여러군데에서 사용하기 위해서는 그리기만을 여러번 하는 것이 아니라, 불러오기도 그만큼 해줘야한다. 근데 "게임 리소스"라고 하는것은 이미지만 있는게 아니다..오디오, 이팩트용 이미지, 이미지, 애니메이션용 이미지, 글꼴 등...어느 한곳에서 모든종류의 리소스를 Load해둔뒤에 필요한 곳에서 "사용"할 수 있도록 하기위한 것이 Resource Manager이다. 먼저, 여러 종류의 리소스를 위해, 하나의 큰 개념의 Resource를 정의해준다.리소스의 종류구분을 위해서 enum class를 이용했다. 그리고 이 Resource 클래스는 오로지 위의 리소스 종류를 위해서만 존재하고, 이 클래스 자체가 어딘가에서 객체로써 생성되어 쓸것이 아니기에, "추상 클래스" 로 만들어주려..

카테고리 없음 2025.04.10

이득우의 언리얼 프로그래밍 2 - 언리얼 코딩표준

언리얼의 C++코딩 표준을 이해하기 1. 클래스에서 public: 을 제일 먼저 선언할 것.어려울 것 없이 위 코드처럼 순서를 지킬것을 규칙으로 삼았다. 2. 언리얼은 파스칼 케이싱(Pascal Case)만을 명명한다.즉, 각 단어의 첫 글자는 대문자, 단어사이는 언더스코어를 사용하지 않는다.템플릿 클래스엔 접두사 T를 붙인다.UObject를 상속한 클래스는 접두사 U를 붙인다.예외로, Object를 상속하긴 했으나, AActor를 상속한 클래스는 접두사 A를 붙인다.SWidget을 상속한 클래스는 접두사 W를 붙인다.추상 인터페이스는 접두사 I를 붙인다.열거형에는 접두사 E를 붙인다.부울 변수는 접두사 b를 붙인다. (예외적으로 소문자임)그 외의 클래스와 구조체는 접두사 F를 붙인다.추가 명명 팁.부울..

언리얼 2025.04.08

이득우의 언리얼 프로그래밍 1 - 기초 사용법

언리얼이 제공하는 언리얼 게임프레임을 배우는것을 아주 추천한다. 엔진을 잘 다룬다는것?C++은 기초체력이라고 할 수 있고, 엔진 프레임워크를 익히는 것이 기본기라고 할수있다. 일단 사용법부터 알아보도록 하자. 1. 컴파일하는 방법 헤더파일에 변경이 있을때. 에디터(언리얼창)를 끄고 비주얼 스튜디오에서 컴파일. 소스 파일에만 변경이 있을때. ctrl + alt + f11 즉. 라이브 코딩으로 컴파일. -> 언리얼 에디터가 켜져있는 경우에는 라이브 코딩으로만 진행해야한다. 2. 언리얼 클래스를 상속받았을 때의 유의점 Tools에서 new C++ class를 눌러서 게임인스턴스를 생성해보자. 클래스 이름은 대체로 기본으로 설정되어있는거에서 안바꿔도 된다.이를 비주얼스튜디오에서 c++ 코드로 보면 UGameI..

언리얼 2025.04.08

[D2D 게임만들기 5] - Scene에 관하여 2

Enter, Exit 함수의 필요성우리는 씬매니저를 통해서 씬을 생성하여 씬매니저 안에 등록시키고, 씬이 완료되었을때나 특정 입력값이 만족되면(예를들어, 다음으로 넘어가는 버튼을 누르기) 다음씬을 보여주게끔 했다.그런데 만약, 1) 이전으로 돌아가기 라던가, 2) 처음으로 돌아가서 재시작하려는 경우에 씬에서 움직이거나 조작했던 배치들은 어떤식으로 보이게 될까? 말로만 설명하면 어려우니 간단히 그림을 첨부해보겠다.이정도의 간단한 맵이 있다고 해보자. 지금 상태는 메인화면에서 게임스타트를 눌러서 현재 씬에 진입한 상태다.별모양이 우리가 움직일수있는 게임오브젝트일때, 오른쪽으로 화면의 절반만큼 움직여보겠다.이 상태에서 메인화면으로 갔다가, 다시 이 씬에 진입해보자. 그렇다면 저 별은 어디에 위치하고 있을까?...

D2D와 게임엔진 2025.04.02

[D2D 게임만들기 4] - Component 구조

상속과 컴포넌트그동안 우리가 C++을 배우면서 많이 이용한것은 바로 "상속" 일 것이다.아주 기본적인 게임로직을 구상할때에는 상속만으로도 충분하다.  처음 상속을 배울때 이정도로 시작했을 것이다.여기에 위치가 고정인 박스와 카메라를 추가해보자.오브젝트는 이정도로 설정해주고, 각자의 기능을 생각해보자.내가 생각하는 게임의 기본은 이동이라고 생각한다.그러면 이동이 필요한 오브젝트와 이동이 필요없는 오브젝트를 나눠서 상속을 받아보자.움직임도 설정했으니, 이제 이동과 동급으로 중요한 화면에 그리는걸 해보자.여기서 화면에 그리지 않는것은 카메라고, 나머지는 화면에 그려야한다.어라, 모형도가 이상해졌다 카메라는 그리면 안되는데.그러면 아래와 같이 하는건 어떨까?겨우 두가지 기능으로 거미줄마냥 됐는데, 공통적이지 못..

D2D와 게임엔진 2025.04.01

[D2D 게임만들기 3] - Scene에 관하여 1

Scene이라는 단위어떤 간단한 플래시 게임을 한다고 상상해보자. 게임을 켜면 보통 타이틀 로고와 Game Start 버튼이 보인다.Start 버튼을 누르면 튜토리얼 화면으로 넘어간다.튜토리얼이 끝나면 본격적으로 게임화면으로 넘어간다.게임이 끝나면, 플레이에 따른 결과 화면이 보이고, 엔딩 화면이 마지막으로 나온다.그리고 다시 초기화면인 타이틀로 돌아온다.  이 "화면"이라는 한 단위를 우리는 "Scene"이라고 할 것이다. 여기서 잠깐! "Scene" 내부를 생각하기전에 우리는 좀 더 큰 부분을 먼저 생각해보자.위에서 주구장창 말했듯이, 한 화면에서의 일이 끝나면 다음 화면으로 넘어가야한다.그럼 화면을 어떻게 "교체"해줘야할까? 실제로 유니티에서 사용되고 있는 개념이 있는데, 씬(Scene) 들을 다 ..

D2D와 게임엔진 2025.03.31

[D2D 게임만들기 2] - 라이브러리 (수정필요)

뜬금 없을 수 있지만, 우리는 엔진이라는 것을 위해 라이브러리를 알아야한다.우리는 이미 숨쉬듯 자연스럽게 라이브러리들을 사용하고 있다.예를들어, C++에서 cin이나 cout함수를 사용하려면, 입출력에 관한 함수들이 모여있는 "라이브러리"인 "iostream"을 include했었다.  지금 배우고자는 WinAPI에서도 윈도우를 위해 정의된 핸들이라던가 구조체 및 함수들은여기에 있다. 즉, 이미 정의 되어있는것을 참조하여, 우리가 사용하고 있는 것이 바로 라이브러리라고 할수있다. 이 라이브러리에는 두가지의 종류가 있다.1. 정적 라이브러리중복코드로 메모리 낭비됨.런타임시 외부를 참조하지 않아도 된다. 2. 동적 라이브러리외부 의존도가 높기에 이식성이 낮다.정적 라이브러리보다는 속도가 느리다. 일단 우리는 ..

D2D와 게임엔진 2025.03.27

[D2D 게임만들기 1] WinAPI 알아보기

API를 공부할 때의 마인드 = 일단 우리가 내부를 전부 다 볼수가 없기도 하고, 내부를 볼 수 있어도 어디까지 봐야하는지 처음 공부시엔 감이 안잡힌다. 그래서 사용을 해나가면서 이해하자! 라는 마인드로 공부해야한다. WinMain 부터 파헤쳐 보기처음 비주얼스튜디오에서 데스크톱 마법사로 솔루션을 생성하면 보이는것이 아래의 코드다.여기서 알아야할 것은 일단 하나다. 바로 핸들이라는 개념이다. 운영체제 Windows를 기준으로 생각했을 때, 우리는 이미 여러개의 윈도우들을 띄워두며 컴퓨터 사용을 한다.(예를들어, 카톡창 + 크롬창 + 비쥬얼 스튜디오창...) 화면에 띄워진 여러 개의 창을  구분하기 위한 것이 "Handle"이다.핸들은 프로그램이 차지하는 메모리의 시작주소값이라고 생각하면된다. 여기에서 만..

D2D와 게임엔진 2025.03.26

Assimp를 알아가기 (준비단계)

하나의 .cpp파일에다가 코드를 몰아넣었는데...이제 assimp라는 걸 이용해서 .fbx형태의 파일을 읽어와서 랜더를 해야한다...랜더링이 되기 위해 필요한 구성요소들을 어떻게 처리해야하는지 감이 오지 않아서이유를 고민해보니... Direct3D에서 쓰이는 객체들을 베껴오기만 했지어느 단계에서 어떻게 초기화를 해주고 어디서 업데이트를 해서 상태변경이 가능해지고어디서 묶어내서 쉐이더한테 어떤게 전달되고 이걸 설명할 수 있는 정도로는 모르겠던 것이다.그래서 제일 최근에 해낸 노말맵핑 자료를 되짚어보며...구조를 파악하려고 한다. 이미 assimp를 해낸 애들거를 보면 자꾸 파라미터에 디바이스를 받고 있어서 구조를 다시 볼 생각이 들었던건데,다시 보니 ID3D11Device* m_pDevice; 요녀석이 버..

D3D 2024.11.08