profile
게임 클라이언트 개발자 지망생의 TIL
post-thumbnail

[UNSEEN] 스마일게이트 UNSEEN 지원 후기

UNSEEN? 스마일게이트 x 에픽게임즈 에서 진행하는 언리얼 프로그래머 양성 교육으로, 이번이 1기 첫 모집이었다. 약 4개월의 시간 동안 제공되는 언리얼 엔진 교육을 들으면서, 자기주도 프로젝트를 진행하여 결과물을 구현하는 것이 교육 목표이다. 최근까지 유니티 교육을 받아 왔지만, 앞으로 내 목표를 위해서는 언리얼 엔진을 배워야 하지 않을까 라고 생각하던 중에 해당 교육을 알게 되어 지원했다. 선발 과정 1) 서류 서류 과정은 아래와 같이 필수 제출 항목과 선택 제출 항목으로 나눠져 있었다. 필수 제출 지원 동기 및 목표 프로젝트 계획서 선택 제출 자기소개 및 개발 경험 기술 포트폴리오 이 프로그램에 대한 열정을 보이기 위해서는 모든 항목을 제출하는 것이 당연하다고 생각하여 필수, 선택 여부에 상관없이 전부 제출했다. 지원 동기 및 목표는 지금까지 유니티 엔진을

2023년 3월 3일
·
0개의 댓글
·

[UNSEEN] 테스트 대비 9. 두 사각형의 겹침 판정

두 사각형의 겹침 판정(AABB) 사각형 A와 사각형 B가 있고, 각 사각형을 나타내는 x좌표와 y좌표가 두 개씩 주어질 때, 아래 경우 중 하나라도 해당하지 않으면 두 사각형은 겹치지 않는다. 사각형 A의 가장 작은 x좌표 < 사각형 B의 가장 작은 x좌표 < 사각형 A의 가장 큰 x좌표 사각형 A의 가장 작은 x좌표 < 사각형 B의 가장 큰 x좌표 < 사각형 A의 가장 큰 x좌표 사각형 A의 가장 작은 y좌표 < 사각형 B의 가장 작은 y좌표 < 사각형 A의 가장 큰 y좌표 사각형 A의 가장 작은 y좌표 < 사각형 B의 가장 큰 y좌표 < 사각형 A의 가장 큰 y좌표 예제 코드

2023년 2월 23일
·
0개의 댓글
·

[UNSEEN] 테스트 대비 8. 벡터의 내적과 외적 활용

1. 벡터의 내적 벡터의 내적은 같은 차원의 두 벡터가 주어졌을 때 벡터를 구성하는 각 성분을 곱한 후 이들을 더해 스칼라를 만들어 내는 연산이다. 같은 벡터를 내적하면 벡터의 크기를 제곱한 결과가 나온다. 두 벡터의 사잇각을 θ라고 할 때 내적과 cos 함수의 관계는 다음과 같다. 벡터의 내적 활용 1) 앞뒤 판별 캐릭터의 시선을 u, 캐릭터에서 목표로 향하는 벡터를 v라고 할 때, 두 벡터의 내적 값에 따라 목표가 캐릭터의 앞에 있는지, 뒤에 있는지 파악할 수 있다. u·v > 0 (cosθ > 0 / 두 벡터 사이가 예각) : 목표가 캐릭터의 앞에 있다. u·v == 0 (cosθ == 0 / 두 벡터 사이가 직각) : 목표가 캐릭터의 옆에 있다. u·v < 0 (cosθ < 0 / 두 벡터 사이가 둔각) : 목표가 캐릭터의 뒤에 있다. ![](https://velog.velcdn.com/images/do

2023년 2월 17일
·
0개의 댓글
·

[UNSEEN] 테스트 대비 7. 게임 알고리즘

1. 쿼드 트리(Quad Tree) 트리의 자식 노드가 4개인 트리를 의미한다. 게임에서는 일반적으로 지형 정보를 저장하는 데에 사용된다. 컬링을 위한 지형 검색에 쿼드 트리를 사용한다. -> 쿼드 트리를 이용하면 필요 없는 데이터를 큰 덩어리 단위로 버릴 수 있게 되므로 거대한 지형을 빠르게 검색할 수 있기 때문이다. 예제 : 백준 1992번 : 쿼드트리 (https://www.acmicpc.net/problem/1992) 2. FSM(Finite State Machine) 유한 상태 머신이라고도 한다. 유한 상태 머신은 자신이 취할 수 있는 유한한 갯수의 상태들을 가진다. 그리고 그 중에서 반드시 하나의 상태만 취한다. (상태 중복을 피할

2023년 2월 17일
·
0개의 댓글
·

[UNSEEN] 테스트 대비 6. 게임 최적화 기법

1. 병목 지점 파악 가장 먼저 볼 것은 자신의 소스코드에 문제점이 있어 병목 현상이 일어나고 있지는 않은지 확인하는 것이다. 이때 각 게임 엔진에 내장되어 있는 프로파일러 또는 외부 프로파일링 도구를 사용하여 어떤 부분에서 병목 현상이 일어나고 있는지 확인할 수 있다. 2. 스크립트 최적화 오브젝트의 생성과 삭제 : 인스턴스의 생성과 삭제는 동적 메모리 할당 및 해제가 필요하기 때문에 많은 비용이 발생한다. 따라서 짧게 사용하고 사라진 뒤 다시 생성되는 오브젝트(ex. 총알) 같은 경우에는 객체를 매번 생성 및 삭제하지 않고 고정 크기 풀에 들어있는 객체를 재사용함으로써 메모리 성능을 개선할 수 있다. 나눗셈이 아닌 곱셈 사용 : 나눗셈은 곱셉보다 연산 속도가 느리기 때문에 곱셈을 사용한다. (100 / 10 -> 100 * 0.1) 삼각함수와 같이 고비용의 수학 함수들은 상수로 저장해놓고 사용하는 것이 좋다. 언리얼의 BeginPlay()

2023년 2월 17일
·
0개의 댓글
·

[UNSEEN] 테스트 대비 5. 게임 엔진의 동작 원리

1. 게임 엔진의 정의 비디오 게임 같은 실시간 그래픽 표시 기능을 갖춘 상호 작용 응용 프로그램을 구현하는 핵심 소프트웨어 구성 요소를 말한다. 컴퓨터 게임 개발에 바탕이 되는 기술을 제공하여 개발 과정을 단축 시키고, 게임을 다양한 플랫폼에서 실행할 수 있도록 해준다. 또한 게임 엔진은 하나의 게임에 종속되지 않고 여러 종류의 게임에 재사용될 수 있도록 개발된다. 게임 엔진이 제공하는 주요 기능은 2차원 그래픽이나 3차원 그래픽을 출력하기 위한 렌더링 엔진, 물리 엔진, 충돌 검출과 충돌 반응, 사운드 출력, 스크립트 작성, 애니메이션, 인공지능, 네트워크, 스트리밍, 메모리 관리, 쓰레딩, 씬 그래프 등이 있다. 2. 게임 엔진 구성 요소 Renderer : 화면상에 그래픽을 출력하는 기술 Streaming Terrain : 실외 배경으로써 주로 지형을 표현 Portal Rendering : 실내 배경으로써 BSP와 PVS가 주로 사용됨. -

2023년 2월 16일
·
0개의 댓글
·

[UNSEEN] 테스트 대비 4. C++ 컨테이너들의 동작 원리

시퀀스 컨테이너 : 데이터가 선형적으로 저장되는 컨테이너 1. 벡터(Vector) 동적 배열 구조로, 런타임에 크기를 임의로 변경할 수 있다. 메모리에 데이터가 연속적으로 위치한다. 벡터는 포인터 세 개로 구현되어 있다. 할당된 배열의 시작 주소를 가리키는 포인터 다음에 데이터가 삽입될 위치를 가리키는 포인터 할당된 배열의 끝 주소를 가리키는 포인터 데이터를 삽입하면 빨간 포인터가 가리키는 부분에 삽입되고, 빨간 포인터가 1 증가한다. 벡터의 메모리 할당 방식은 size(실제 사용 메모리 크기)와 capacity(여유분 포함 메모리 크기)로 이루어진다. (항상 size <= capacity) 벡터에 데이터를 삽

2023년 2월 16일
·
0개의 댓글
·

[UNSEEN] 테스트 대비 3. 메모리 구조

메모리 구조 프로그램을 실행시키면 운영체제는 우리가 실행시킨 프로그램을 위해 메모리 공간을 할당해준다. 할당되는 메모리 공간은 크게 코드(Code), 데이터(Data), 힙(Heap), 스택(Stack) 영역으로 나뉜다. 코드(Code) 영역 실행할 프로그램의 코드가 저장되는 영역으로, 텍스트 영역이라고도 한다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 된다. (그림에는 X) 데이터(Data) 영역 전역 변수와 static 변수가 할당되는 영역 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리에서 소멸한다. 힙(Heap) 영역 필요에 의해 동적으로 메모리를 할당할 때

2023년 2월 16일
·
0개의 댓글
·

[UNSEEN] 테스트 대비 2. C++ 언어의 특징

1. C++ 언어의 특징 C 언어로 작성된 프로그램과의 호환성 유지 객체 지향 프로그래밍의 개념을 도입(추상화, 상속, 다형성, 캡슐화 등) 타입 체크를 엄격히 하여 실행 시간 오류의 가능성을 줄이고 디버깅을 도움. 실행 시간의 효율성 저하를 최소화 2. C++에 추가된 기능 함수 중복 : 매개 변수의 개수나 타입이 서로 다른 동일한 이름의 함수 선언 가능(오버로딩) 디폴트 매개 변수 : 매개 변수에 값이 전달되지 않는 경우 디폴트 값 전달되도록 함수 선언 가능 참조 : 변수에 별명을 붙여 변수 공간을 같이 사용할 수 있는 참조의 개념을 도입 참조에 의한 호출 : 함수 호출시 참조를 전달할 수 있다. new와 delete 연산자 : 동적 메모리 할당, 해제를 위한 두 연산자 도입 연산자 재정의 : 기존의 연산자에 새로운 연산을 정의할 수 O 제네릭 함수와 클래스 : 함수나

2023년 2월 16일
·
0개의 댓글
·

[UNSEEN] 테스트 대비 1. 객체 지향 프로그래밍

1. 객체 지향 프로그래밍 컴퓨터 프로그램을 어떤 데이터를 입력받아 순서대로 처리하고 결과를 도출하는 명령어들의 목록으로 보는 시각에서 벗어나 여러 독립적인 부품들의 조합, 즉 객체들의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임을 의미. 어떤 프로그램의 일부에 해당하는 작은 부품, 즉 객체를 먼저 만들고 이렇게 만들어진 여러 가지 객체들을 조립해서 하나의 완성된 프로그램을 만드는 프로그래밍 방법론을 뜻한다. 2. 객체 지향 프로그래밍의 장점 1) 프로그램을 보다 유연하고 변경이 용이하게 만들 수 있다. 2) 코드의 변경을 최소화하고 유지보수를 하는 데에 유리하다. 3) 인간 친화적이고 직관적인 코드를 작성하기에 용이하다. 4) 코드의 재사용을 통해 반복적인 코드를 최소화하고, 코드를 최대한 간결하게 표현할 수 있다. 3. 객체 (Object) 객체 지향 프로그래밍의 가장 기본적인 단위이자 시작점. 실제

2023년 2월 16일
·
0개의 댓글
·