전체 글 143

Unreal Framework - Init

이전 글에서 PreInit 과정까지 알아보았습니다. PreInit 과정까지는 세상을 만들 재료를 준비하는 과정이었다면, Init은 세상을 만드는 과정입니다. Init은 우리가 직접 사용하는 언리얼 엔진과 더 가까운 내용이 많기 때문에, PreInit보다는 자세히 알아보는 게 좋을 것 같습니다. FEngineLoop::Init 언리얼 엔진의 Init 과정은 FEngineLoop::Init() 함수에서 처리합니다. FEngineLoop::Init함수의 내용을 요약해보았습니다. int32 FEngineLoop::Init() { // Engine 객체 만들기 FString GameEngineClassName; GConfig->GetString(TEXT("/Script/Engine.Engine"), TEXT("G..

Unreal 2023.12.07

Unreal Framework - PreInit

저번 글에서는 언리얼 프레임워크의 큰 틀에 대해서 알아보았다. 이번엔 언리얼 엔진의 PreInit 과정에 대해 좀 더 자세히 알아보도록 하겠다. GEngineLoop 언리얼 엔진의 메인 함수에서 'int32 ErrorLevel = EnginePreInit( CmdLine );' 와 같은 선언문으로 PreInit 작업이 시작됩니다. EnginePreInit 함수 내부에서는 간단히 GEngineLoop 객체의 PreInit() 이라는 함수를 호출해줍니다. GEngineLoop 객체는 Laucn.cpp에 전역 변수로 선언되어 있습니다. 참고로 GEngineLoop 객체는 이후에도 Init 과정과 Tick 과정에도 사용됩니다. GEngineLoop 객체의 역할은 메인 엔진 루프 구현입니다. //Launch.cp..

Unreal 2023.12.05

Unreal Framework

게임 프레임워크라고 한다면 게임이 종료될 때까지 무한루프를 돌며 입력을 받고, 게임 로직을 처리하는 형태가 떠오릅니다. 언리얼 엔진의 프레임워크도 이와 크게 다르지는 않습니다. 그러나 물론 언리얼 엔진의 강력한 기능들을 구현하기 위해자세히 들어가면 훨씬 복잡합니다. 따라서 언리얼 엔진의 기능들을 제대로 활용하기 위해서는 언리얼 엔진의 프레임워크를 공부할 필요가 있다고 생각되어 이 글을 작성하게 되었습니다. 한 번에 모든 내용을 쓰기는 어려우니, 이번 글에서는 언리얼 프레임워크의 큰 틀에 대해서만 다뤄보겠습니다. 엔트리 포인트 언리얼에는 수많은 모듈들이 있습니다. 그 중 우리가 궁금한 언리얼 엔진의 메인 함수는 'Launch' 라는 모듈에 있습니다. 솔루션 탐색기에서 UE5 > Source > Runtim..

Unreal 2023.12.05

애니메이션 블루프린트 초급

어떤 캐릭터를 제대로 만들려면 메시(형태)뿐만 아니라 애니메이션(움직임)도 있어야 한다. 언리얼 엔진에서는 이를 Animation Blueprint를 통해 쉽게 구현할 수 있다. 그럼 Animation Blueprint를 어떻게 만들면 좋을지 알아보자. 1. 재료 구하기. 우선 캐릭터를 만들려면 재료가 필요하다. 마음에 드는 메시, 스켈레톤, 애니메이션 파일들을 구해보자. 나는 언젠가 이달의 무료 에셋으로 다운받았던 Fox 에셋을 사용할 것이다. 에픽 게임즈에서 받은 에셋들은 보통 프로젝트에 추가 버튼을 누르고 진행하면 자동적으로 필요한 모든 재료가 언리얼 엔진에서 사용가능한 형태로 임포트 된다. 그러나 다른 외부에서 받은 FBX파일들은 따로 임포트 해주어야 한다. 임포트 하는 방법은 파일을 언리얼 엔진..

Unreal 2023.10.24

GUI vs CLI

리눅스 운영체제는 기본적으로 명령어로만 동작한다. 윈도우처럼 마우스를 이용한 편리한 UI는 없다. 이런 방식의 인터페이스를 CLI(Command Line Interface)라고 한다. 반대로 윈도우의 방식은 GUI(Graphical User Interface)라고 한다. 편리하긴 GUI가 훨씬 편리한데, 리눅스는 어쨰서 아직까지 CLI를 사용하고 있을까? GUI와 CLI를 비교해보자. GUI GUI의 장점은 사용성이 좋다는 점이다. 마우스 커서, 아이콘 등 시각적으로 훌륭하고 직관적이다. 하지만 그로 인해 단점이 발생한다. GUI는 공짜로 얻어진 것이 아니다. 화면에 보여지는 것이 많다는 것은 그만큼 자원을 많이 소모한다는 것이다. 메모리도 많이 쓰고 연산 능력도 CLI에 비해 많이 필요하다. CLI C..

Linux 2023.09.10

장식자 패턴

1. 용도 데코레이터 패턴은 런타임에 다른 객체에 영향을 주지 않고 개개의 객체에 속성이나 책임을 추가하거나 제거해야 할 경우에 유용할 수 있다. 예를 들면 텍스트 편집기에서 Text를 출력하는 창에 옵션에 따라 스크롤 바, 테두리 따위로 장식할 수 있게하고 싶을 때 장식자 패턴을 사용할 수 있다. 2. 구조 장식자 패턴은 간단히 말해서 컴포넌트 객체를 장식 객체로 감싸는 구조다. 일반화된 클래스 다이어그램을 살펴보자. 컴포넌트와 장식자의 관계를 보면 장식자도 컴포넌트에 포함되는 개념이다. 위의 텍스트 뷰(컴포넌트), 테두리(장식), 스크롤 바(장식)의 예를 객체 다이어그램으로 나타내면 아래와 같다. BorderDecorator 객체가 component로 ScrollDecorator 객체를 가지고, Sc..

[프로그래머스 Lv3] 인사고과

문제 설명 인사고과 문제 설명 완호네 회사는 연말마다 1년 간의 인사고과에 따라 인센티브를 지급합니다. 각 사원마다 근무 태도 점수와 동료 평가 점수가 기록되어 있는데 만약 어떤 사원이 다른 임의의 사원보다 두 점수가 모두 낮은 경우가 한 번이라도 있다면 그 사원은 인센티브를 받지 못합니다. 그렇지 않은 사원들에 대해서는 두 점수의 합이 높은 순으로 석차를 내어 석차에 따라 인센티브가 차등 지급됩니다. 이때, 두 점수의 합이 동일한 사원들은 동석차이며, 동석차의 수만큼 다음 석차는 건너 뜁니다. 예를 들어 점수의 합이 가장 큰 사원이 2명이라면 1등이 2명이고 2등 없이 다음 석차는 3등부터입니다. 각 사원의 근무 태도 점수와 동료 평가 점수 목록 scores이 주어졌을 때, 완호의 석차를 return ..

[프로그래머스 lv3] 미로 탈출 명령어

문제 설명 n x m 격자 미로가 주어집니다. 당신은 미로의 (x, y)에서 출발해 (r, c)로 이동해서 탈출해야 합니다. 단, 미로를 탈출하는 조건이 세 가지 있습니다. 격자의 바깥으로는 나갈 수 없습니다. (x, y)에서 (r, c)까지 이동하는 거리가 총 k여야 합니다. 이때, (x, y)와 (r, c)격자를 포함해, 같은 격자를 두 번 이상 방문해도 됩니다. 미로에서 탈출한 경로를 문자열로 나타냈을 때, 문자열이 사전 순으로 가장 빠른 경로로 탈출해야 합니다. 이동 경로는 다음과 같이 문자열로 바꿀 수 있습니다. l: 왼쪽으로 한 칸 이동 r: 오른쪽으로 한 칸 이동 u: 위쪽으로 한 칸 이동 d: 아래쪽으로 한 칸 이동 예를 들어, 왼쪽으로 한 칸, 위로 한 칸, 왼쪽으로 한 칸 움직였다면, ..

UML

상속 상속받는 관계. 빈 삼각형 화살표. 예를 들면 Car의 특성을 물려받는 Truck. 의존 일시적인 참조를 나타내는 관계. 어떤 메서드 내에서 임시로 생성, 리턴, 매개변수 등의 형태로 사용되는 관계. 점선 화살표. 예를 들면 Car의 Refuel 메서드에서 임시로 사용하는 GasStation과의 관계. 연관 지속적인 참조를 나타내는 관계. 어떤 클래스의 참조 필드를 가지는 관계. 실선 화살표. 예를 들면 Car 클래스에서 참조 필드로 가지고 있는 Person과의 관계. 집합 연관의 하위 항목. 참조 필드의 묶음. 어떤 클래스의 참조형 묶음 필드를 가진 관계. 빈 다이아몬드 실선 화살표. 예를 들면 자동차 정비소에 맡겨놓아진 자동차들의 목록을 갖는 RepairShop과 Car의 관계. 합성 집합보다 ..

CleanCode 2023.03.30

Casting (Static, Dynamic, Reinterpret )

C++의 캐스터는 static_cast, dynamic_cast, reinterpret_cast 세 가지 종류가 있다. 각 캐스터는 약간씩 다른 방식으로 동작하고, 제약사항도 다르다. 따라서 상황마다 적절한 캐스터를 사용해 주어야 한다. 그럼 각 캐스터의 특징, 사용하면 좋은 상황 등을 알아보자. 미리 3줄요약: static_cast : 기초 유도, 기본 자료형 캐스팅 dynamic_cast: 기본적으로 유도 - > 기초 캐스팅. virtual함수 있으면 유도 기초 캐스팅. 런타임에 안정성 검사. reinterpret_cast : 포인터, 포인터 관련 형 변환 모두 허용. static_cast static_cast는 기본 자료형의 캐스팅, 그리고 기초 클래스와 유도 클래스의 포인터 ..

C++ 2023.03.28