
언리얼 엔진 : 미국의 '에픽게임즈(EpicGames)'에서 제작한 3D 그래픽 솔루션 창작 툴

오늘은 본격적으로 언리얼 엔진과 친해지는 시간을 가졌다.
3일차 블루프린트에 대해 배우고 이벤트 함수, Branch, Sequence 등에 배우고 배운내용을 바탕으로 텍스트 슈팅 게임을 만들어 보기이다.

언리얼 엔진에서 캐릭터 만들고 레벨에 배치하기를 배웠다.

캐릭터로 레벨, 즉 게임 씬에서 상호 작용하는 기능을 추가하는 법을 배웠다.

프로그래머라면 필수 프로그램인 Git과 Github에 대해 배웠다.

오늘은 비주얼 스튜디오를 설치하여 실행하고 프로젝트 생성, 처음으로 코드를 입력하여 디버깅 해보았다.
오늘 부터 C++ 문법에 관해 본격적으로 배우기 시작했다. 변수...연산자...
오늘은 배열, if, for문에 대해 배웠다.
포인터의 개념에 대해 이해하고 코드스니펫을 통해 이해하는 시간을 가졌다.
레퍼런스(참조)에 대해 배웠다.
포인터와 레퍼런스에 대해 복습하였다. 그리고 첫번재 과제를 수행하였다.
오늘은 Class에 대해 배웠다.
오늘은 객체지향 프로그래밍 중 상속과 다형성에 대해 배웠다.
오늘은 스택/힙 메모리, Dangling Pointer, Memory leak 등을 배웠다.
인벤토리 만들기 과제 수행
템플릿에 대해 배웠다.
CPP의 STL(Standard Template Library) 중 벡터를 배웠다.
CPP의 STL(Standard Template Library) 중 맵을 배웠다.
오늘부터 코딩테스트 연습문제들이 어려워지기 시작했다. 오늘 문제는 'x만큼 간격이 있는 n개의 숫자'이다.
오늘은 튜터님께 보충강의를 들었다. 클래스에 대한 이해가 부족해, 클래스에 대해 배운 내용을 아래에 정리해 본다.
어제 튜터님 보충강의를 듣고 이어서 Class에 대해 복습하였다.강의 내용을 듣고 코드를 따라 작성하면서 다시 한 번 이해하였다.

오늘 팀 과제인 텍스트 기반의 RPG 게임 만들기가 시작되었다. Github 사용법에 대해 숙지하였다.

15조에 속한 나는 <텍스트 RPG 만들기> 팀 과제에서 캐릭터 클래스를 맡았다.

오늘은 발표를 맡았기에 발표 자료 작성을 하였다.

1. 오늘 배운 내용(키워드) 2일간 가족휴가로 본캠프를 2일가까이 빠지게 되어 팀원들이 많은 일을 해주었다. 팀장님을 포함한 팀원들이 각자 맡은 파트 외에 부가적으로 내가 맡은 클래스도 어느정도 봐주었고 파일을 합치면서 일어나는 문제를 해결하는 단계를 밟고 있었다. 오늘은 상점 구현에 대해 일부 발견된 오류, 아이템 재고 증가 함수 구현 등이 우리 팀의 ...

팀 프로젝트 제출 및 발표

오늘은 본격적으로 언리얼을 이용한 게임을 만들기 위한 개념을 배우기 시작했다. 언리얼엔진 세팅 부터 비주얼스튜디오와 함께 언리얼엔진 빌드 방법, 액터 배치 등을 배웠다.

이번 배운 내용은 클래스 내부 코드 구조를 이해하고 컴포넌트 멤버 변수 추가 및 초기화를 배웠다.

어제 배운 내용 복습하면서 과제 준비를 진행하였다. CPP로 액터를 생성하여 코드를 입력해 컴포넌트 부착, 스태식 메시, 머티리얼 등을 추가하고 트랜스폼 함수를 입력하여 디버깅시 위치 및 형태가 변하는지 확인하였다.

어제 복습한 내용을 바탕으로 과제를 진행하였다. 스테이지 테마를 정하고 액터를 배치하였다. 아래와 같이 기본 요구사항을 먼저 구현하는데 집중하였다.

오늘은 언리얼엔진에서 캐릭터클래스를 활용한 캐릭터를 구현하였다.

오늘은 어제에 이어서 캐릭터 구현 후 이동을 구현하였다.

오늘 6번째 과제 진행 중 캐릭터가 지나갈 수 있는 플랫폼을 구현하였다.

오늘 7번째 과제를 진행하였다. 일반적으로 캐릭터를 만들 때 Character 클래스를 이용하는데 이번 과제에서는 Pawn 클래스로 캐릭터를 만드는 것이 목표이다.

오늘 6번째 과제를 마무리하고 제출하였다. 액터들을 회전 시키고 랜덤 타임으로 스폰 및 소멸 시키는 여러 가지 효과를 부여하여 장애물 스테이지를 만들었다.

오늘은 7번째 과제 중 도전과제인 6자유도 (6 DOF) 드론/비행체 구현을 해보았다.

오늘은 7번째 과제를 제출하였다. Pawn 클래스로 캐릭터를 만들고 추가로 비행체를 만들었다. Character 클래스에서 제공하는 기능들(Movement, Jump) 없이 Pawn 클래스에서 순수하게 코드로 클래스의 이동 동작을 구현하는 것이 주요 과제이다.

오늘 부터 아이템 시스템을 구현하는 과정의 강의를 들었다. C++로 액터클래스를 여럿 만들고 거기에 각 아이템의 기능을 구현하기위한 변수, 함수 선언을 하는 단계를 배웠다.

아이템을 만들고 아이템에 콜리전을 적용하여 캐릭터가 충돌하였을 때 이벤트로 아이템 사용, 아이템 효과 작용 등에 대한 구현을 하였다.언리얼엔진에서는 아이템을 "플레이어가 가까이 다가가기만 해도 자동으로 획득"시키고 싶다면, 보통 콜리전(충돌) 이벤트를 사용한다.

만들었던 아이템을 스폰하고 스폰할때 확률을 지정하여 각 아이템이 일정 확률안에서 랜덤 스폰되도록 구현하는 것을 배웠다.아이템 스폰을 '스폰 볼륨'이라는 콜리전을 생성하고 그 콜리전을 레벨에 일정크기로 생성한 다음 그 콜리전 구역 안에서 랜덤 위치로 스폰하게 하였다.

캐릭터 체력 시스템을 구현하고 점수 관리 시스템과 연계해서 아이템과 상호작용에 대한 데이터를 관리할 수 있게 되었다.

게임 루프를 설계하여 전체적인 게임 흐름을 제어하는 것을 배웠다.

UI 메뉴와 위젯을 구현하여 게임의 몰입감을 주고 완성도를 높이는 작업을 배웠다.

게임 시작 화면언리얼엔진 게임개발 강의를 보며 따라 만든 게임을 확장하여 여러 기능을 추가하였다.

튜터님의 도움으로 한글 깨짐 현상(위 스크린샷)을 해결하였다.

Github

팀 프로젝트 게임 제작이 시작되었다. 오늘은 캐릭터를 먼저 생성하였다.

캐릭터에 구르기 애니메이션을 구하는 법을 알아봤다.본, 스켈레탈 메시가 일치하는 애니메이션이라면 적용이 용이하다.팀 프로젝트 진행(구르기 추가 및 애니메이션 디테일 정리)

캐릭터 소켓 이용에 대해 알게되었다.캐릭터 애니메이션 스테이트 머신애니메이션 동작이 어색한 상황에서 장비도 위치가 어색하게 표현되었다.

mixamo 캐릭터 애니메이션을 이용하여 앞구르기 모션을 구현하려고 하였다.

오늘 팀 프로젝트 작업은 캐릭터 좌우이동, 앞구르기 이동 구현을 하였다.

캐릭터의 무기장착법에 대해 알게 되었다. 현재 작업중인 팀 프로젝트는 캐릭터 주변에 무기를 스폰하여 무기가 자동으로 발사된다는 상황을 가정하여 만들고 있다.
1. 오늘 배운 내용 캐릭터의 멀티 무기 장착을 캐릭터 소켓에서 캐릭터 컴포넌트로 변경하였다. 2. 느낀점 블루프린트 제작이 어려워진다. 3. 내일 학습할 내용 팀프로젝트과제 수행 : 캐릭터 무기가 몬스터를 향할 수 있도록 블루프린트 제작

어제 만들었던 캐릭터 컴포넌트에 무기를 장착하고 무기가 적 '몬스터'를 향하게 하는 로직을 구현하였다.

오늘 학습한 내용(키워드)기존 작업하였던 앞구르기 동작 모션을 다듬었다.

앞구르기 모션을 오늘도 수정하였다. 앞구르기 모션을 LaunchCharacter 함수를 사용했으나 이 함수는 캐릭터를 공중으로 날려버리는 함수로 앞구르기를 경사면에서 작동시키면 공중으로 튀어 나가는 현상이 발생하였다.

인트로 애니메이션 중 한 장면게임 스토리를 설명하기 위한 몇 컷의 이미지를 게임 시작전에 보여주는 방식을 선택해 메뉴에서 게임 스타트를 누르면 그다음에 영상이 출력되도록 만들었다.

몬스터 피격 데미지 표시하기

캐릭터에 무기를 장착하는데 수류탄과 화염병 메시가 뜨지 않아 메시 에셋을 바꿔서 진행하기로 하였다.

오늘은 카메라가 지형지물을 뚫고 비춰지는 현상을 수정하였다.

팀 프로젝트 완성 단계에 접어들었다. 마지막으로 버그 수정과 각 종 수치 벨런스 작업을 진행하였다. Github에 'ReadMe.md' 파일이 있는데 이 파일은 프로젝트에 대한 개요, 정보 등을 담는 문서라고 보면된다.

챕터3 9조 팀 프로젝트를 마무리하며...이번 팀 프로젝트에서 캐릭터 파트를 담당하였다. 캐릭터에 많은 기능을 넣고 싶었으나 기본 기능외에 몇 개 추가하는데 그쳤다.

멀티 플레이어 게임 이란?

서버-클라이언트에 관한 개념들을 배웠다.

시프트 연산자에 대해 공부하고 이해한 내용을 정리해보았다.

오늘은 언리얼 엔진에서 네트워크 프로그래밍을 할 때 꼭 알아야 할 NetRole에 대해 학습했다.
오늘은 CPP 공부했던 개념들을 요약 정리하였다.

언리얼 공식 문서 RPC 설명Remote Procedure Call의 약자로, 한 컴퓨터에서 호출된 함수가 네트워크를 통해 다른 컴퓨터에서 실행되도록 하는 기술

언리얼 엔진에서 Property Replication은 서버가 액터(Actor)의 특정 프로퍼티 값을 클라이언트들에게 자동으로 동기화해주는 기능. 멀티플레이 게임에서 서버가 권위(authority)를 가지며, 클라이언트는 서버가 보내주는 값만 반영.

숫자 야구 게임을 만드는 강의를 듣고 과제를 진행하고 있다. 해당 과제에서 나오는 함수가 어려워 여기에 작성을 하고 해석을 해본다.

숫자 야구 게임을 만드는 강의를 듣고 과제를 진행하고 있다. 해당 과제에서 나오는 함수가 어려워 여기에 작성을 하고 해석을 해본다. IsGuessNumberString는 제시된 문자열이 추측하는 숫자 문자열인지 확인 하는 함수이다.

숫자 야구 게임을 만드는 강의를 듣고 과제를 진행하고 있다. 해당 과제에서 나오는 함수가 어려워 여기에 작성을 하고 해석을 해본다. JudgeResult함수로 스트라이크인지, 볼인지 판정하는 함수이다.

오늘은 과제 중 등장한 함수(코드)에 대해 조사하여 정리하였다. GetLifeTimeReplicatedProps 함수

오늘은 강의 중 Build.cs 파일 수정이 있어 해당 내용에 대해 정리하였다. 프로젝트명.Build.cs 파일이 파일은 언리얼엔진 모듈 빌드 설정 파일이라고 한다.

과제를 수행하면서 두 클래스의 역할이 상호간 어떻게 역할을 분담하는지 정리해보았다.

UEnhancedInputLocalPlayerSubsystem은 Unreal Engine 5의 Enhanced Input 시스템에서 플레이어별 입력 컨텍스트를 관리하는 핵심 클래스다.

멀티플레이어 게임 제작시 변수들을 클라이언트와 동기화 하기 위한 시스템 중 'Property Replication'에 대해 복습하였다.

멀티플레이 게임을 만들기 위한 네트워크 관련 키워드, 코드, 개념들을 익히고 있다. 싱글플레이 게임과는 완전히 다른 세계로 들어 온 것 같았다.과제를 진행하며 코드, 개념들을 익히고는 있지만 거의 이해하기 힘들거나 어려운 내용이었다.

과제 진행 중 공격 애니메이션을 추가하였는데 옆으로 재생이 되는 현상이 발생하였다. 애니메이션 방향을 변경하는 방법을 알았다.

카트라이더 드리프트이번주 부터 팀프로젝트가 시작되었다. 우리 팀은 레이싱 게임을 만들기로 결정하였다.

오늘은 팀 프로젝트 중 아이템 데이터 테이블을 만드는 것을 익혔다.아이템 데이터 테이블을 C++ 클래스로 만들고 언리얼엔진 에디터에서 상속 받아 생성하였다.

오늘은 스파이크 트랩 아이템을 생성하였다.임시로 라바콘을 메시로 선택하여 로직을 구현하였다. 차량 바로 뒤에 스폰이 되는데 스폰시간, 차량으로 부터의 생성 위치 등을 추후 조정해야 할 것 같다.

오늘은 레이싱 게임 중 아이템전을 위해 아이템을 일시 보관하여 사용 할 수 있는 인벤토리 시스템을 만들었다.

미사일 아이템 클래스를 생성하였다. 미사일 아이템클래스를 통해 미사일 객체를 별도로 생성하게 하여 그 미사일 객체가 목표물을 향해 날아가도록 만들었다.미사일 객체에 대해 조금 더 수정 작업이 필요하다.

어제에 이어서 미사일 아이템 작업을 진행하였다.목표물 도착 후 차량에서의 반응에 대한 함수 호출 되지 않아 미사일이 차량 주변을 뱅글 뱅글 도는 현상이 발생하였다. 지금은 조치를 하여 미사일이 한번에 목표물에 도달하고 있다.

오늘은 미사일 발사 아이템 사용 후 UI로 표시되는 Lock On 위젯 수정 작업을 진행하였다.

타겟 위젯이 지속적으로 목표물 위치와 동기화 되지 않고 화면 하단이나 상단으로 따로 움직여서 튜더님께 도움을 청했고 유용한 자료를 알려주셔서 보고 따라하며 타겟 표시 위치 문제를 일단 해결하였다.위치를 해결한 모습블루프린트에 장대한? 노드를 연결하여 해결하였다.

오늘은 미사일 아이템을 만들었으니 미사일을 방어하는(또는 무력화) 아이템을 만들었다.

오늘은 아이템 박스에 대한 멀티플레이 동기화를 위해 코드를 수정하였다.

업로드중..오늘은 아이템 박스에서 드랍되는 아이템 중 스파이크 트랩(사실은 대형 라바콘을 스폰한다.) 클래스의 코드를 수정하였다.

오늘은 미사일 아이템을 레플리케이션하여 멀티플레이어에서 동기화 할 수 있도록 미사일 LockOn 로직이 구현된 플레이어 컨트롤러 코드를 수정하였다.

오늘은 미사일 공격 시 타겟이 적에게 추적이 되지 앟는 현상이 멀티플레이어 환경에서 발생하여 해당 문제를 해결하는데 많은 시간을 보냈다.일단 위 사진 처럼 목표물에 타겟팅 되도록 수정하였다.

미사일 발사 과정 일부 로직을 개선하고 미사일 방버 아이템의 위젯을 띄우는 작업을 진행하였다.

어제에 이어서 미사일 방어아이템 위젯 표시 로직을 수정하는 작업을 진행하였다.

어제에 이어서 방어 아이템 UI 표시 작업을 진행하였고 작업 중에 미사일 락온 시 타겟이 변경이 되지 않는 문제가 발생하여 해결하였다.
내일배움캠프 언리얼엔진 트랙(5/6기) 챕터4 멀티플레이어 게임 개발 프로젝트 팀원 : 무표님, 재욱님, 동빈님, 세민님 그리고 나 팀 프로젝트 명 : V12 장르 : 레이싱 오늘 4주 과정으로 진행된 팀 프로젝트를 마무리 하였다.

오늘 최종 프로젝트 진행을 위해 팀을 구성하였다.우리 팀은 로그라이크 장르의 게임을 만들기로 하였다.

언리얼 고급 기술 활용 강의를 듣고 배운 내용을 정리해본다. AI 개념을 배우고 실습을 통해 AI 구현에 대한 기초적인 내용을 익혀보는 시간을 가졌다.
오늘은 AI에게 포인트 2개를 지정해 해당 포인트 사이를 가장 효율적인(저비용)의 경로로 이동할 수 있도록 로직을 구현해 보았다.

오늘은 AI가 캐릭터를 쫒아 오는 로직을 구현해보았다.Chaser_AIController 클래스를 생성하여 캐릭터를 쫒아 올 수 있도록 로직을 구현하였다.

오늘은 강의를 따라 AI 기능을 구현하던 중 캐릭터를 추적하는 NPC가 애니메이션이 제대로 연출되지 않는 문제를 해결해보기로 하였다.점프는 구현이 되는데 걷거나 뛰는 애니메이션이 연출되지 않았다.애니메이션 블루프린트에서 문제가 있을 것으로 생각하고 애니메이션 블루프린트

AI와 캐릭터에게 발자국 사운드와 댄스 BGM를 구현하였다. 해당 기능을 구현하면서 사운드를 애니메이션과 어떻게 연동하여 구현하는지 기초적인 부분을 이해할 수 있었다.

오늘은 AI로 3D 모델링을 해주는 사이트 'https://3d.hunyuanglobal.com'에서 에셋을 다운 받아 보았다.

마지막 프로젝트 준비

공중 도시를 원거리에서 볼 수 있도록 기본 도형 에셋으로 모양만 만들어 보았다.이러한 컨셉으로 만들 예정이다.(WOW, 달라란)처음의 사진은 튜토리얼 맵에서 저 도시가 멀리 보이게끔 엑터로 표현할 예정이다.

AI 제작 중 비헤이비어 트리라는 것이 있었다. NPC, 몬스터들의 행동을 제어한다고 할 수 있다.

오늘은 마을맵을 본격적으로 만들기 위해 프로젝트 생성 및 마을이 위치할 토대(땅)을 만들었다.

오늘은 본격적으로 마을을 만들기 시작했다. 일단 포탈과 상점 위치를 잡았다.

오늘은 마을 사이즈가 플레이어 크기보다 너무커 동선이 크게 나와 사이즈를 줄이고월드 파티션 기능을 사용하기로 하였다.

오늘은 마을의 나무에 분위기를 주는 파티클을 배치하고 레벨간 이동할 수 있는 포탈을 구현하였다. 다른 맵에서 가고자 하는 맵의 일부가 보이게하였다. 포탈 앞에 트리거 박스에 오버랩이되면 오픈레벨 함수를 통해 다른 맵으로 이동한다.

성채를 만들기 위한 에셋을 준비하였다. 맵을 만들기 위한 레벨을 생성하고 언리얼 캐릭터 메시를 배치하여 크기를 가늠해 보았다.

오늘은 성채 맵을 만드는 중 메시를 자르는 방법에 대해 알게 되었다.벽 메시에 출입문을 만들때 그 전에는 문을 두고 양옆에 메시를 맞춰 끼워 넣는 방식을 사용했다. 하지만 오늘의 방법을 통해 어떠한 벽이라도 그대로 두고 문을 맞춰 넣을 수 있게 되었다.

오늘은 성채 맵에 메인타워와 무기고(작은타워)를 교량으로 연결시키고타워 외곽으로 1단계 내성벽을 구축하였다. 메인 타워 좌측에는 위병건물을 만들었다.위병건물은 성벽과 연결되어 있으며, 별도의 출입구가 마련되어 있다.

오늘은 언리얼엔진을 실행시켰을 때 인터넷이 느려지고 특히 Zep이나 디스코드에서 끊김 현상이 발생해 노트북 그래픽 설정 세팅을 다시 해보았다.

성채 맵 제작

오늘 레벨에 배치할 에셋을 하나 찾았다.발리스타라는 중세시대 중화기? 라고 생각하면 되겠다. 모양은 대형석궁 같이 생겼다.스케치팹 사이트에서 무료로 다운 받았다.
프렉처 기능을 이용해 부서진 성벽을 구현하였다. 단계 에셋 준비 단계 프렉처 기능 메시로 변환 메시를 적절하게 배치

엘리베이터 에셋을 구매하여 설치하였는데 엘리베이터의 호이스트(로프)가 시설 위로 사진과 같이 삐져나와 레벨 디자인상으로 좋지 않아 지워보기로 하였다.구매한 에셋 : Fantasy Elevators / https://fab.com/s/20528c39bbbe가장

위병소 건물 내부 인테리어를 진행하였다.내부에 여러 오브젝트를 두고 싶어 에셋을 여기 저기 배치해 보았다.

구조물을 만들었는데 캐릭터가 구조물 밑으로 들어가는 현상이 발생했다. 스태틱 메시의 콜리전이 가운데 구멍도 막아버려 삭제했더니 콜리전이 아예 없어 캐릭터가 밑으로 떨어졌다.

엘리베이터의 호이스트(로프)가 안보이게 하는 높이 수치가 엘리베이터가 여러 개 설치 되었을 때에도 동일하게 적용되는 문제가 발생하여 노드를 추가 작업하였다.

엘리베이터가 내부에 설치된 무기고 내부 층별 구조 및 엘리베이터 타워를 제작하였다.가운데 각 층별로 따로 회전하는 다리가 붙은 타워가 있다.블루프린트 클래스로 각각 회전 로직을 구현하였다.SFX도 넣어 그럴듯하게 움직이는 타워 구조물이 완성되었다.

오늘부터 메인 타워 내부에도 작업을 시작하였다.무기고 타워에서 다리로 넘어와서 최종 보스를 만나러 가는 길을 만드는 작업이다.가운데 공중에 떠 있는 바닥을 구현하기 위해 사슬 메시로 사이드 부분에 부착하였다.

보스전을 위해 보스전 장소로 별도로 입장하는 로직을 구현하였다. 우리 프로젝트에서는 안개를 통과하면 보스, 중간 보스를 만나 전투를 치를 수 있다. 보스를 만나기 위한 안개문(?)을 블루프린트 클래스로 만들어 주었다.

게임 흐름이 끊기지 않게 각 기믹에 레버를 연결해주었다.기존 구매했던 판타지 엘리베이터 에셋 중 레버를 이용하기로 하였다.

오늘은 지금까지 진행했던 프로젝트를 패키징하기로 하였다. 패키징은 언리얼엔진에서 진행한다.

오늘은 중간 발표전 마지막 오류 수정 작업을 진행하였다.마을 포털에 다음 레벨에 대한 이미지가 제대로 표시되지 않는 문제가 발생하여 머티리얼 문제로 인식하고 머티리얼을 수정하였다.

우리팀은 중간 발표인 오늘까지 무사히 MVP를 만들었다. 여러 버그가 있었지만 조금씩 해결하며 패키징까지 성공하였다.내가 주로 작업했던 레벨에 대한 영상을 첨부한다.

성채 맵 외부 건물 추가 작업을 진행하였다.프렉처 모드로 부서진 탑을 구현하였다.맞은편에 검문소 건물도 만들었다.해당 건물은 프렉처 모드를 사용해 부서진 모습으로 변경할 예정이다.

오늘부터 산채 맵 제작을 시작하였다.기본 에셋은 아래의 에셋을 사용하여 만들기로 하였다.에셋링크(Fab)해당 에셋에서 기본제공하는 Showcase 맵을 활용하기로 하여서 해당 레벨을 복제하고 이름을 우리 프로젝트에 맞는 형식으로 변경하였다.

산채맵의 동굴 지형을 만들었다.팀장의 레벨 디자인 기획 스케치를 바탕으로 만들기 시작했다.바위 하나 하나 배치하며 원형의 굴을 만들었다. 천장은 머티리얼로 막혀있으나 뚫리게 처리했고 캐릭터 동선을 위한 바위들을 별추가로 설치하는 작업을 진행하였다.

어제에 이어서 동굴 작업을 진행하였고 동굴 출구까지 어느 정도 캐릭터가 이동 할 수 있는 이동 경로를 만들었다. 동굴 내부 바닥에 조그마한 웅덩이(?) 머티리얼로 구현하고 외부 마감 및 동굴 입구 폴리지를 추가하는 등 동굴 주변의 추가 작업도 진행하였다.
동굴 지형을 어느정도 완성하고 계단 지형을 만들었다.

레벨을 제작하면서 최적화를 위한 기초적인 단계로 레벨에 배치된 액터 수를 줄이기로 하였다.

오늘은 스태틱 메시에 나나이트 기능을 활성화하여 레벨을 최적화해보았다.비디오 메모리가 부족하다는 경고 메시지를 계속 표시했는데 해당 기능을 활성화하니 경고가 뜨지 않게 되었다.

산채 맵 보스전 부근 레벨을 디자인하였다.마을 부분도 추가하고 연못도 만들었다.
산채 부분이 크기가 커, 축소하기 위해 랜드스케이프 부분 삭제 및 액터 스케일 조정 등을 통해 사이즈를 변경하였다.

산채 메인 건축물 에셋이 액터가 너무 쪼개져 있어 액터를 정리하고 합친 후 2층에서 3층으로 증축을 하기로 하였다.

산채 메인 건축물이 많은 액터가 모여 만들어져 있어 액터를 줄이고 최적화하고자 액터를 합쳤다. 메시가 무거워서 그런지 계속 오류가 생기고 엔진이 종료되어 부분적으로 메시를 합치고 나머지는 그대로 두었다.

산채 맵 메인 건물 뒤쪽에 대나무숲을 구현하기로 하였다. 메가스캔에셋 중 대나무가 있어 해당 에셋을 사용하기로 하였다. 무료로 Fab에서 다운 받을 수 있다.

산채 맵을 어느 정도 완성하고 디테일 적인 부분을 작업하고 있다.식생(나무, 풀)등을 배치하고동굴 내부 밝기 조절하는 작업을 진행하였다. 포스트 프로세스 볼륨을 이용해 어느 정도 밝기를 조절할 수 있었다.

산채의 울타리 메시를 크기를 줄인 파일로 변경하고 바위 벽을 하나의 에셋으로 합쳤다.입구 동굴 구역도 하나의 액터로 만들어 드로우 콜을 최소화시켰다.

안개 배치 및 캐릭터 이동 동선을 디버깅을 통해 확인하고 수정작업을 진행하였다.캐릭터 이동시 콜리전 문제, 오브젝트로 인한 통행 방해 문제 등이 있나 확인하고 수정하였다. 수직 이동 시 사다리 배치로 원할한 수직이동이 가능한지 확인하였고 캐릭터 경로에서 보기에 어색한

발리스타가 캐릭터를 공격하는 기믹을 만들었다. 일정 범위(스피어 콜리전)에 들어오면 캐릭터를 향해 큰 화살을 발사한다. 콜리전을 설정하고 타겟 캐릭터를 변수로 저장한다.타겟을 추정하는 로직을 만들어 발리스타가 캐릭터를 향해 일정 각도 내에서 따라가면서 움직인다.

발리스타가 캐릭터를 공격하려면 몬스터가 발리스타에 있어야 공격 로직이 활성화 된다. 콜리전을 추가로 설정해서 몬스터가 들어오면 발사 되도록 하였다. 발사부분에 조그마하게 콜리전을 만들었다.

월드 서브시스템(World Subsystem)을 이용한 레벨에 배치된 액터 상태 저장할 수 있는 블루프린트 로직 추가 작업을 진행하였다.

어제 월드 서브시스템에서 각 오브젝트(기믹)의 상태값을 저장하는 로직을 만들었으나 해당 로직을 추가하고 레벨에 배치된 엘리베이터가 아예 작동하지 않는 현상이 발생하였다.

계단 메시를 정리하고 콜리전 설정을 하였다.계단 주변의 바위 등 자연 에셋도 캐릭터 진로에 방해되지 않도록 콜리전 설정을 변경하여 캐릭터가 걸림없이 올라 갈 수 있도록 하였다.

성채 맵 디테일 작업을 진행하였다. 엘리베이터 레버 추가, 문 개폐 시 효과음 청음 범위 수정, 액터 정리 및 메시 병합 등을 진행하였다.

Github Desktop에서 Dev 브랜치를 최신화하기 위해 Pull 진행 중 노트북이 재부팅이 되서 변경된 파일에 계속 파일이 남아 있어 다른 브랜치로 이동을 못하는 상황이 발생했다.
레벨에 캐릭터가 갈 수 없는 곳에 가지 못하도록 블로킹 볼륨을 설치하였다.

프로젝트 작업 중인 노트북은 지원 받은 노트북이어서 이제 프로젝트 끌날 무렵으로 본인이 소유한 데스크탑으로 작업물을 이동하는 작업을 진행하였다.본인 데스크탑로 프로젝트를 옮기기 위해 외장하드를 준비했다.

어느 정도 프로젝트가 최종 마감일까지 완성되서 이제 플레이를 해보면서 버그를 수집하고 수정 작업을 진행하였다. 문 앞 바닥과 문이 떨어져 있어 캐릭터과 통과를 하지 못하는 현상이 발생되어 메시로 바닥을 추가 설치 하였다.

어제에 이어서 프로젝트 패키징을 진행하고 플레이를 계속하면서 버그 수집, 수정 작업을 진행하고 있다.

최종 프로젝트 마감일로 완성된 프로젝트를 패키징하여 제출하고 팀별 발표를 진행하였다.패키징 버전은 0.5.0으로 오늘 아침까지 버그 수정 후 패키징을 진행하였다.언리얼트랙에서 게임개발페어을 진행하여 다른 팀의 프로젝트를 직접 체험해 볼 수 있는 기회가 있었다.

8개월간의 대장정을 마쳤다. 내일배움캠프에서 작성하는 마지막 TIL이다. 우리의 최종 프로젝트로 최우수상을 수상하게 되어 기쁘다. 마지막까지 우리를 끌고 이 프로젝트를 마친 팀장님 고생하셨고, 팀원 모두 고생하였다.