전체 글

전체 글

    [C++ Primer Plus] 3. Dealing with Data

    대답해야 할 질문들 ASCII, Unicode, UTF가 어떤 개념인지, 어떤 차이가 있는지 설명하세요. Simple Variables int braincount; braincount = 5; 이 두 줄의 코드는 구체적으로 다음과 같이 작동한다. int형 데이터를 담을 수 있을 만큼의 데이터를 할당한다. 할당된 데이터 위치를 기록한다. 5라는 값을 해당 위치에 복사한다. Integer Types 일부 언어는 정수형 데이터로 int 하나만을 지원하지만 C++은 여러 개로 구분한다. 그 구분에 따라 메모리 사이즈가 다르다. 즉, 담을 수 있는 값의 범위가 다르다. short, int, long, long long으로 구분한다. 차이는 다음과 같다. 2bytes

    [C++ Primer Plus] 2. Setting Out to C++

    출처: C++ Primer Plus 6th Chapter 2 대답해야 하는 질문들 Function Header는 어떤 정보를 담고 있나요? #include는 빌드에서 어떻게 작동하나요? Namespace는 왜 사용하나요? The Function Header Funtion Header는 해당 함수를 호출하기 위한 인터페이스를 알려준다. Return Type은 Called function이 끝나서 Calling function으로 돌아갈 때, 어떤 정보가 들어오는 지 알려준다. argument list 또는 parameter list는 Calling funtion에서 Called function으로의 정보 흐름을 알려준다. void main() main 함수를 선언하는 여러 방법이 있다. main() // ..

    [C++ Primer Plus] 1. Getting Started with C++

    출처: C++ Primer Plus 6th Edition Chapter 1 대답해야 하는 질문들 C와 C++의 역사를 간략히 설명하세요. Procedural Programming과 Object Oriented Programming을 비교하세요. C++가 어떻게 C에 Object-Oriented Programming 컨셉을 구현했는지 설명하세요. C++가 어떻게 C에 Generic programming 컨셉을 구현했는지 설명하세요. Program은 어떻게 만들어지나요? Learning C++: What Lies Before You C++는 Procedural Programming(=C), Object-Oriented Programming, Generic Programming의 교차점에 있다. 그렇기에 만약..

    Replication

    출처: https://youtu.be/JOJP0CvpB8w Net Mode Net Mode는 World의 상태다. 4가지 상태 중 하나여야 한다. 플레이 가능한가? 월드에 권한이 있는가? 다른 사용자를 받을 수 있는가? NM_Standalone O O X NM_DedicatedServer X O O NM_ListenServer O O O NM_Client O X X 게임이 시작되면 UGameEngine 가 생기고 그 밑에 UGameInstance 와 ULocalPlayer 가 생긴다. 그러면 우리는 브라우저에 URL을 통해 해당 게임 서버에 접속할 수 있다. 이 때, Net Mode도 함께 입력해야 한다. 예를 들어, NM_Client라면 게임을 플레이할 수 있지만 월드에 대한 전적인 권한은 가질 수 없..

    #23: 인벤토리 아이템 정보창, 속공과 강공의 데미지 타입

    인벤토리 아이템 정보창 아이템 정보창은 다음과 같이 동작하도록 정의했다. 아이템에 마우스가 들어오면 화면 중앙에 나타난다. 아이템에 마우스가 나가면 사라진다. 아이템 정보창은 그때 그때 Create하지 않고 한번 만들어두고 여러번 재활용하는 방식으로 사용한다. 아이템 정보창에 쓸 텍스트는 인벤토리 구현 때 생성한 ItemObject에 저장했다. 저장하는 변수는 3개다. Item Name : 아이템의 이름 Item Type : Weapon, Food 같이 아이템의 분류 Item Info : 아이템에 대한 설명 Item Widget 생성 시 실행 노드 Item Widget에 마우스가 들어왔을 때 실행 노드 결과 속공과 강공의 데미지 타입 공격의 메커니즘은 다음과 같이 설계했다. 플레이어가 마우스를 눌러 속공..

    #22: Multi-cell(Jigsaw) Inventory System

    Multi Cell Inventory 디아블로나 이스케이프 프롬 타르코프처럼 인벤토리가 2차원 모눈종이 상에 아이템을 보관하는 방식을 의미한다. 사진 출처 보통 이런 인벤토리 방식은 난이도와 리얼리티를 더해준다. Inventory 구성 요소 InventoryComponent : UActorComponent 메인 캐릭터에 붙어 있는 액터 컴포넌트. 인벤토리의 논리적 기능 (아이템 추가, 제거 등)을 담당한다. InventoryWidget : UUserWidget 인벤토리 UI에 해당하는 위젯 InventoryGridWidget : UUserWidget 인벤토리 UI에서 아이템 그리드를 그리는 위젯 ItemWidget : UUserWidget InventoryComponent가 가지고 있는 아이템들의 UI에..

    언리얼에서 낮 밤 만들기 (+시간 시스템)

    결과물 1. 시간 시스템 만들기 (GameState) 시간 시스템은 두 개 변수가 필요하다. 하나는 하루의 길이, 다른 하나는 현재 게임 시간이다. 이 때, 현재 시간은 런타임(게임이 실행되고 있을 때)에 어디서든 쉽게 접근할 수 있어야 한다. 쉽게 접근하기 위해 해당 코드는 GameState에 구현하도록 한다. Create Blueprint를 하고 Parent Class를 GameStateBase로 한다. 그리고 안에 변수를 두 개 만든다. MinPerDay(float) : 게임의 하루가 현실의 몇분인지 CurrentDateTime(DateTime) : 현재 게임의 시간 * CurrentDateTime은 계산의 편의성을 위해, UE에서 정의한 FDateTime으로 저장했다. Tick은 다음과 같이 구현..

    #21: 전투 시스템 개선

    분석 게임의 코어 시스템만 만든 채로 테스트 플레이를 해봤는데, 문제가 많았다. 물리엔진 오류(서로 부딪히면 적이 날라가버림)이나 일정 경우에 페이탈 에러가 뜨기도 했다. 해본 결과 가장 문제는 "전투가 재미없다"였다. 왜 그럴까? 다크소울3와 엘든링을 플레이하며 분석을 해봤다. 크게 2가지 문제로 나누었다. 위협적이지 않은 AI AI는 굉장히 방어적이다. 문제는 방어적이면 방패라도 들고 있던가해서 플레이어가 무턱대고 공격하지 못하도록 해야 하는데, 아직 방패 구현이 되어 있지 않아서 그냥 샌드백이었다. 이를 위해서 AI를 좀더 공격적으로 만들 필요가 있다. 리스크가 없는 공격 플레이어의 공격 모션이 적에 비해서 아주 빨라서 공격하기가 너무 쉽고, 적은 어떤 공격이라고 맞으면 휘청거리니 가까이 다가가서 ..