2월, 2026의 게시물 표시

내일배움캠프 5일차 - DAY 5 블렌더 스페이스와 움직이는 액터

이미지
이전 레벨디자인의 구상 단계에서 만들어낸 이미지를 바탕으로 제작하였습니다. 움직이는 트럭에는 시간에 따라 주기적으로 두 지점을 움직이게 하고, 움직이는 블록플랫폼에는 캐릭터의 접촉을 감지하고 정해진 스플라인을 따라 움직이도록 설계했습니다. 엘리베이터는 점프 발사대로 대신 구현되어 밟고있는 동안 캐릭터의 점프높이가 매우 높아지는 효과를 줘 윗층을 올라갈 수 있게 해줍니다. 오버랩이 해제되면 점프높이는 원상태로 돌아옵니다. 복잡한 구조의 맵에서는 플레이어가 길을 놓치지 않고 개발자의 의도대로 움직일 수 있도록 유도하는 것이 중요합니다. 대부분의 게임들이 중요한 상호작용 포인트에 특정 색을 입히듯이 맵 곳곳에 칠해진 데칼페인트는 플레이어에게 이정표이자 길잡이가 되어줄 것입니다. 목표 포인트에 도달하면 그곳에 설치된 발사대가 플레이어를 맵 밖으로 날려보냄으로서 엔딩을 연출할 것입니다. 만약 목표에 도달하지 못한 채 바다에 빠져버린다면 시작점으로 돌려보냅니다. 그 외에 특별히 신경 쓴 점으로, 일부 섬세한 스태틱 메시의 경우 캐릭터의 경로상에 있을 경우 밟고 올라가거나 진입해야하기 때문에 콜리전을 재구성해 자동 컨벡스 콜리전을 사용하거나 박스 콜리전 여러개를 구성해 충돌에 이상한 점이 느껴지지 않도록 구성하였습니다. 또한 점프 발사대의 경우, 캐릭터가 밟고 올라서면 플랫폼이 기능하고 있다는 것을 보여주기 위해 버튼이 눌리면서 노란빛으로 빛나게끔 매테리얼을 인게임 내에서 실시간으로 변하게 구하였습니다. 개인적인 견해로서, 레벨디자인은 개발자의 상상대로 구현가능한 맵을 디자인하는 것도 중요하지만, 제일 중요한 것은 플레이어가 개발자의 의도를 알아차릴 수 있게끔 여러 가이드를 세워두는 것이라고 생각합니다.

내일배움캠프 4일차 - DAY 4 플레이어 캐릭터와 나만의 레벨 디자인

이미지
 레벨 디자인이란? 레벨 디자인은 게임 속에서 플레이어가 탐험하고 상호작용하는 공간을 설계하는 일 이다. 단순한 배경 배치가 아니라, 플레이어의 동선, 도전, 몰입감 까지 디자인하는 작업이다. - 무엇을 보고, 어디로 가고, 어떤 감정을 느낄지, 이 모든 경험을 결정짓는 것이 바로 레벨 디자인. 자동차를 예로 들면 프로그래머는 엔진을, 아티스트는 외관을, 레벨 디자이너는 드라이브의 경험을 제공한다.  — Lee Perry 내가 직접 과제용으로 간단히 구상한 레벨디자인

내일배움캠프 3일차 - DAY 3 블루프린트를 이용한 비주얼 스크립팅

이미지
과제 : 텍스트 슈팅 게임을 만들어 다음과 같이 만들어봅시다.  1) 좌클릭으로 발사, 온도증가, 탄환이 없으면 발사불가.  2) R키 재장전, 탄환이 가득찼으면 재장전 불가.  3) T키 냉각으로 온도감소, 온도의 수치의 따라 Normal(0~30), High(31~70), Over(71~) 표시  4) 숫자키 0,1,2을 누르면 각각 '라이플', '샷건', '피스톨'로 교체 가능 구현방법 우선 Weapon이라는 구조체를 생성해 그곳에 장탄수, 온도, 온도별 상태에 관한 변수를 추가해줍니다. 온도 별 상태의 경우 열거형(Enum) 변수로 생성합니다. [1] 좌클릭 발사 좌클릭 을 하면 아래와 같은 시퀀스를 거치게 된다. 1) 탄환이 0보다 높으면 다음으로 넘어가고 그렇지 않으면 'Out of Ammo'를 출력. 2) 탄환에 '증감연산자 --'를 넣어 1을 빼고 온도에 '증감연산자 ++'를 넣어 1을 더한다. 3) 온도가 70보다 높으면 열거형 값 'Over'를, 30보다 높으면 'High'를, 그렇지 않으면 'Normal'를 적용. 4)현재 무기이름과 장탄수, 온도와 온도별상태가 입력된 구조체를 출력. [2] R키 재장전 R키 를 누르면 아래와 같은 시퀀스를 거치게 됩니다.  1) 탄환이 최대 장탄수보다 적으면 다음으로 넘어가고 그렇지 않으면 'Already full'을 출력.  2) 탄환의 값을 구조체에 저장된 '최대 장탄수'로 대입.  3) 'Reloaded' 출력. [3] T키 냉각 T키 를 누르면 아래와 같은 시퀀스를 거치게 됩니다.  1) 구조체에 저장된 온도값에 '증감연산자 --'를 적용해 온도를 1 줄인다.  2) 온도가 70보다 높으면 열거형 값 'Over'를, 30보다 높으면 'High'를, 그렇지 않으면 'Normal...

내일배움캠프 2일차 - C++ 서식지정자, 자료형, ASCII, 유니코드

이미지
서식 지정자의 종류 %d: decimal의 약자. 10진수로 대체됩니다. %o: octal의 약자. 8진수로 대체됩니다. ex) 9(10) <-> 11(8) %x: hexadecimal의 약자. x는 소문자, X는 대문자로 대체됩니다. ex) 17(10) <-> 11(16) %u: unsigned의 약자. 양수로 대체됩니다. %c: character의 약자. 문자로 대체됩니다. %s: string의 약자. 문자열로 대체됩니다. %f: floating point의 약자. single precision.   %lf: double precision floating point. 서식 지정자는 왜 필요할까요? 3245라는 숫자를 문자열에 편입시키기 위해서 printf(“Result: %d”, 3245)라고 적을 수 있습니다. 또한 서식 지정자를 활용하면 계산 결과도 얻어 낼 수 있습니다. 3245 * 2342의 계산 결과를 화면에 출력시키기 위해 printf(”Result: %d”, 3245 * 2342)라고도 적을 수 있습니다. 즉, 복잡한 수식을 빠른 시간안에 계산하고 그 결과를 원하는 형식으로 보기 위함입니다. 복잡한 소스코드를 작성할 때 디버깅 용도로 요긴하게 사용되기도 합니다. 자료형(Type) 저장될 데이터의 크기와 해석 방법에 대한 정보. 자료형 크기 == 표현 가능한 수 서식 지정자 char 1 byte. -(2^7) ~ (2^7) - 1 [-128 ~ 127] %c or %hhd short int 2 byte. -(2^15) ~ (2^15) - 1 [-32768 ~ 32767] %hd int [기본 정수 자료형] 4 byte. -(2^31) ~ (2^31) - 1 [-2147483648 ~ 2147483647] %d or %i long 4 byte or 8 byte. %ld long long 8 byte. -(2^63) ~ (2^63) - 1 %lld float ...

내일배움캠프 1일차 - 레벨을 구성하고 스트리밍 해보기, C++ 라이브세션 강의목차 및 공부방법

 GameMode  : 게임의 규칙을 정해주는 항목

내일배움캠프 사전캠프 마지막날 - 본 캠프 들어가기 전 나의 목표를 정리

이번 설 연휴 미니 프로젝트를 진행하면서 며칠간 밤을 늦게 자면서 하나의 간단한 게임을 또 하나 만들고 나니 내 작품과 포트폴리오가 하나 더 늘어난 기분이라 개운하면서도 해방감, 힘을 쏟고 난 뒤의 나른함이 단번에 쏟아지는 느낌이 있었다. 다음주는 사전캠프에서 본캠프로 넘어간다. 비록 체력이 좋지않아 오전9시부터 일어나서 12시간동안 진행하는 것은 고역이겠지만, 몇년간 내 취미전공을 제대로 활용하지 못하고 방황해온 만큼 이번에 확실하게 이번 캠프를 통해 취업까지 다이렉트로 필요한 지식을 모을 수 있었으면 좋겠다. 캠프에 가입하기 이전부터 구상해온 포트폴리오 프로젝트가 있다. 가능하면 본 캠프가 열리자마자 진행할 수 있었으면 좋겠으나, 아직 언리얼 C++에 대해서 아는 것이 없으므로 천천히 해야할 것 같다. 과연 내가 이번 캠프동안 포트폴리오 하나를 완성시키고 게임회사에 취업할 수 있을지 걱정이다. 꾸준히 배우면서 포트폴리오 팀프로젝트가 시작하기 전까지 에셋 등을 꼼꼼히 준비하는 것이 좋을 것 같다.

내일배움캠프 사전캠프 - 사전캠프설 연휴 커피 파밍 이벤트 작품 [ EXTREMITY ]

이미지
  EXTREMITY - 홀로 사지 속으로 어떤 행성에서 벌어지는 일. 이 모든 일에 종지부를 짓기 위해 홀로 전장으로 강하한다. 상호작용 요소  : 자동문, 병사들의 경례, 눈보라 이펙트, 조준과 사격, 끝까지 쫓아오는 적, 사격에 반응해 무너지는 건물과 적들. 시시각각 변화하는 환경. 전체적인 맵구조  : 곳곳에 블루프린트로 이루어진 건물 Foliage들이 배치되어있으며, 이것들은 모두 사격 시의 Line Trace에 반응해 큰 충격을 일으켜 부서지며 날아간다. 부서지는 기능은 엔진 내의 Fracture기능을 사용.  : 공중에는 플레이어가 탑승하고 있는 수송기가 배회하고 있으며, 원형의 Spline을 따라 움직이도록 설계했다.  : 처음에는 높은 고도에 머물고있다는 느낌을 주기 위해 구름을 전체적으로 낮게 깔아주고 안개도 약간 짙게 설정하였다. 그리고 강하 시에는 캐릭터의 높이에 따라 점차 구름높이와 안개의 짙음이 변화하며, 착지 시에는 전체적으로 맑게 변한다. 조준 매커니즘  : 우클릭을 통해 조준을 하면 Spine본을 기준으로 상하로 다른 모션이 출력된다. (레이어 본 블렌딩)  : 상반신은 Anim Montage에 따라 총을 겨누고 쏘는 모션이 재생되고 바라보는 상하각도에 따라 상반신와 팔의 각도 또한 조절된다. (트랜스폼 본)  : 하반신은 StateMachine에 따라 이동입력에 반응하여 발걸음이 달라지며, 2차원 BlendSpace를 사용하여 정면을 바라보면서 전후좌우로 움직일 수 있게 된다. 사격 매커니즘  : 각각 총구 와 카메라 에서 카메라 정면으로 나아가는 두 개의 LineTrace를 사용하였다. 총구 에서 나가는 LineTrace는 보기에는 자연스럽지만 우리는 총구에서 옆비스듬하게 바라보기 때문에 정확도가 떨어진다. 따라서 카메라 에서 발사되는 LineTrace를 하나 더 만들어 둘 중 하나라도 적중하면 명중하도록 설계하였다.  : 눈앞에 있는 적을...

내일배움캠프 사전캠프 15일차 - 미니 프로젝트 : 나만의 인터랙티브 공간 만들기

이미지
1. 개념 바로 알기 미니 프로젝트란?  - 정해진 기능을 구현하는 것이 아니라, 자신이 직접 구성한 공간에 목적을 부여하고, 상호작용 요소를 설계 하는 것  - 본인의 관심 분야(게임, 건축, 디오라마 등)에 맞춰 자유롭게 설정 가능 2. 직접 구현해보기 목표: 자신만의 씬을 기획하고, 캐릭터 이동 및 최소 1가지 상호작용 기능을 포함해 완성합니다. [Step 1] 주제 설정  - 예시 주제:     - 나만의 방     - 작은 게임 맵 (던전 입구 + NPC + 아이템 줍기)     - 미니 마을     - Sci-Fi 실험실  - 어떤 콘셉트로 공간을 꾸밀지 구상하고 간단히 메모 [Step 2] 공간 구성  - Static Mesh 또는 외부 에셋을 활용해 배경 구성  - 공간 구획, 동선 설계, 빛 연출 등 전체적 분위기 설정 [Step 3] 캐릭터 조작 기능 포함  - 캐릭터 이동 및 카메라 회전 기능 정상 작동 확인  - 점프/회전/내비게이션 문제 없는지 점검 [Step 4] 상호작용 기능 최소 1개 이상 구현  - 예: 문 열기, 아이템 줍기, 버튼 누르기 등  - 'E' 키 또는 클릭 이벤트로 동작하게 연결 [Step 5] 프로젝트 정리  - 콘텐츠 폴더 구조 정리  - 조명 및 머티리얼 마무리 3. 제출하기 폐허가 된 설원지역에서의 강하작전. 문이 열리자 병사들은 경례를 올리고 무운을 빌고있다. 캐릭터가 문에 가까이 다가가면 문이 열리면서 세찬 눈보라가 수송기 안에 들어온다. 수송기는 120초동안 원형으로 하늘을 한 바퀴씩 배회한다. 수송기를 원형으로 돌게하기 위해 스플라인 곡선을 원형으로 만들고 그 라인을 따라 수송기가 움직이도록 'Get Location(Rotation) at Distance Along Spline'노드를 배치하여 'Timeline'노드의 값에 따라...

내일배움캠프 사전캠프 14일차 - 선배기수 Unreal 엔진 게임 분석하기 Day2

Day1에서의 분석내용을 토대로 PPT를 제작, 발표자를 맡아 팀원들이 제작한 PPT를 다듬고 발표에 적합하게 개선하였다. 시간상 발표를 빨리했어야 했기에 요약하는데에 많은 시간을 들인 것 같다. 선배기수들의 작품을 감상하면서 문제점을 파악하면서 "만약 내가 게임을 만든다면 유저들이 불편함을 느끼지않도록 게임을 만들고싶다"는 생각이 들었다.

내일배움캠프 사전캠프 13일차 - 선배기수 Unreal 엔진 게임 분석하기 Day1

개인 게임플레이 분석:  https://teamsparta.notion.site/260211-Unreal-3042dc3ef5148056991dea3595629e9d?source=copy_link 팀 게임플레이 분석:  https://teamsparta.notion.site/260211-Unreal-6-3042dc3ef51480caa7cdc7916c593169?source=copy_link

내일배움캠프 사전캠프 12일차 - 머티리얼&라이팅, 간단한 상호작용 구현 (문 열기 또는 아이템 줍기)

이미지
머티리얼이란?  : 게임 오브젝트의 표면 특성을 결정하는 요소로, 텍스쳐, 색상, 반사, 굴절 등 다양한 시각적 효과를 모아서 3D모델의 표면에 구현된다. 머티리얼의 역할  - 표면 표현: 금속. 유리 나무, 플라스틱 등 다양한 재질을 사실적으로 표현할 수 있음.  - 빛의 상호작용: 조명에 따른 반사, 굴절, 그림자 효과를 통해 현실감을 부여.  - 효과 구현: 노멀 맵, 스페큘러, 메탈릭 등 세밀한 속성을 통해 복잡한 시각효과를 구현. 텍스처란?  : 머티리얼을 구성하는 정보 중 하나, 여러개의 텍스처를 섞어 하나의 머티리얼로 만든다. 텍스처 맵의 종류  1) 컬러 정보 (Albedo) = 베이스 컬러  - 물체의 색상 정보가 저장된 텍스처  - 조명, 그림자 등의 영향을 받지 않는 상태의 순수한 정보 2) 라이팅 정보 (Normal Map)  - 미세한 굴곡을 표현하는 텍스처  - 조명이 닿았을 때, 튀어나온 부분은 밝고, 패인 부분은 어둡게 표현됨.  - 언리얼에서는 RGB값을 전부 사용하나, 그 외의 일부 포맷의 노멀맵은 B값만 쓰이는 등 여러가지 상황이 있을 수 있다.   언리얼 예시)    R값: X축 높낮이    G값: Y축 높낮이    B값: Z축 높낮이 3) 패킹 텍스처 (Packed Texture)  - 성능 최적화를 위해 개별 텍스쳐를 하나로 합쳐놓은 형태   3-1) ORM 텍스처    - AO (Ambient Occlusion), Roughness, Metallic 등의 정보가 들어있다.    - R값(AO), G값(Roughness), B값(Metallic)값이 각각 저장되어있다. 그 외 텍스처  - Displacement, Bump, Gloss등의 텍스처도 종종 볼 수 있으나, 잘 쓰이지 않는다.  -...

내일배움캠프 사전캠프 11일차 - 환경디자인, 에셋 내비게이션 및 간단한 게임 씬 구성

이미지
환경 디자인의 역할  - 감성 전달: 조명, 색감, 분위기 연출을 통해 플레이어에게 정서적 경험을 선사합니다.  - 내러티브 강화: 배경 자체가 스토리의 한 요소가 되어, 게임의 세계관을 자연스럽게 표현합니다.  - 플레이어 몰입: 세심하게 구성된 환경은 플레이어가 게임 세계에 빠져들게 하는 중요한 역할을 합니다. 핵심 구성요소  - 조명과 컬러 팔레트: 시간대, 기후 감정 상태 등을 반영하는 요소로, 환경의 전체적인 느낌을 좌우합니다.  - 구조와 배치: 건물이, 길, 자연 요소의 배치는 게임 내 탐험의 흐름과 상호작용을 결정짓습니다.  - 디테일링: 소품, 잔디, 바위, 나무 등 작은 디테일이 모여 현실감을 부여하며, 게임의 완성도를 높입니다.

내일배움캠프 사전캠프 10.5일차 - AI에 규칙을 추가하고 배치해보기

이미지
 Behavior Tree의 특성  - 왼쪽에 있는 노드부터 오른쪽으로 차례대로 실행한다.  - 한 노드에 서 실행될 때 Decorator → Service → Task 순으로 진행이 된다.  - Selector는 복수의 노드 중 하나만 실행시킨다. (좌측부터 우측으로 체크하며 먼저 조건에 부합하는 노드 하나만 실행한다)  - Sequence는 자손을 순서대로 좌측부터 우측으로 실행한다.  - Simple Parallel은 여러개를 동시에 실행한다.

내일배움캠프 사전캠프 10일차 - 캐릭터 이동 구현(Part 2)

이미지
1. 개념 바로 알기 Character Movement Component란?  - 언리얼의 기본 캐릭터 클래스에는 움직임을 제어하는 컴포넌트가 기본 탑재됨  - 이동 속도, 점프 높이, 중력 설정 등 다양한 조절이 가능함 Spring Arm + Camera 세팅  - Spring Arm은 카메라와 캐릭터 간 거리를 부드럽게 유지시켜줌  - 카메라가 캐릭터를 따라다니며 회전하게 만들 수 있음 2. 직접 구현해보기 목표: 캐릭터에 점프, 카메라 회전 기능을 추가하고, 자연스러운 조작을 구현합니다. [Step 1] 점프 기능 활성화  - Project Settings > Input에서 Jump 액션 확인 (기본: Spacebar)  - MyCharacter 블루프린트에서 Jump 입력 이벤트 연결 MyCharacter 블루프린트 → Event Graph 우클릭 → InputAction Jump 검색 → Event → Jump() 노드 연결 InputAction StopJumping → StopJumping() 연결 [Step 2] 이동 속도와 점프 높이 조절  - MyCharacter > Character Movement 컴포넌트 선택  - 아래 항목 조정해보기: Max Walk Speed: 기본 600 → 800 추천 Jump Z Velocity: 기본 420 → 600 추천 [Step 3] 카메라 회전 설정  1) MyCharacter > SpringArmComponent 선택 > 'Use Pawn Control Rotation' 체크  2) CameraComponent 선택 > 'Use Pawn Control Rotation' 체크 해제  3) MyCharacter 블루프린트의 Class Defaults에서 > 'Use Controller Rotation Yaw' 체크 [Step 4] 테스트 플레이  - WASD + 마우스 ...