https://www.youtube.com/watch?v=-5jCh22feJg&list=PLiSlOaRBfgkcPAhYpGps16PT_9f28amXi&index=20

1. 인벤토리 카테고리에 해당하는 텍스트 만들어주기 

각 칸의 카테고리에 해당하는 텍스트를 옆에 붙여준다.

 

2. 활, 방패같은 장비는 등에 먼저 보이도록 로직 수정 

일단 활과 방패의 fbx 파일을 import 해주자 

https://sketchfab.com/3d-models/medieval-shield-b98b8f64d935415aab0fe9b70074511f#download

 

Medieval Shield - Download Free 3D model by Artem Mykhailov - Sketchfab

Artstation post: https://www.artstation.com/artwork/e012eY Based on the concept by Artyom Vlaskin: https://artyomvlaskin.cgsociety.org/okkw/928308

sketchfab.com

https://sketchfab.com/3d-models/wooden-bow-free-a762abcffc27478caf19dfaac086485d#download

 

Wooden Bow Free - Download Free 3D model by Red_Ilya - Sketchfab

Not the strongest bow, but when there is nothing at hand, it is the best

sketchfab.com

 

Fbx파일을 다운 받은 뒤 import 해주고 텍스처 설정을 해줘야한다. 

Shield 텍스처 설정
Bow 텍스처 설정

 

캐릭터 매쉬 골격에 소캣 추가해주기

등에 활과 방패가 들어올 수 있도록 소캣을 추가해준다. 

소캣
결과

이제 실제 매쉬에 스태틱 매쉬 컴포넌트를 추가해서 실제로 적용될 수 있도록 한다. 

스태틱매쉬를 만든 뒤 부모소캣을 위에서 만들어둔 소캣으로 적용하면 된다.

 

소캣 설정

 

이제 만든 매쉬에 들어갈 수  있도록 커스텀 이벤트를 만들어주자 

그리고 들어오는 아이템 타입에 따라 다른 이벤트가 호출되도록 스위치문을 구성해준다. 현재 아머는 없어서 그냥 스트링만 출력하도록 했다.

이벤트 구성 및 흐름도

 

DB 테이블에 방패를 추가해주고 스태틱매쉬와 소캣을 맞게 수정해준다.

DB테이블

 

결과화면

 

https://www.youtube.com/watch?v=Dh5ty_W8Ayg&list=PLiSlOaRBfgkcPAhYpGps16PT_9f28amXi&index=19

오늘은 아이템슬롯에 클릭했을 때 무기를 장비할 수 있게하는 걸 구현해보자 

 

1. 캐릭터 이벤트그래프에서 커스텀 이벤트 추가

sword를 Equipped Weapon으로 바꿔서 이것의 static mesh를 바꿔주는 방식으로 만들 것이다.

선택한 아이템을 DB에서 찾아서 이에 해당하는  static mesh를 가져와서 그것으로 기존 weapon의 mesh를 바꿔준다. 

 

2. 기존 아이템슬롯 assign 이벤트 마지막에 1의 이벤트 추가

1번에서 만든 이벤트를 아이템 클릭할 때 작동할 수 있도록 assign item에서 추가해준다. 

 

3. 크기가 다른 무기를 Socket으로 맞춰주기 

기존 무기 구조체에서 변수를 하나 추가해서 Socket에 맞게 들어가도록 해주었다.

 

4. 카테고리 만들어주기 

각 아이템슬롯 자체에 기존에 만들어둔 카테고리 변수를 추가해서 어떤 아이템슬롯인지 전달할 수 있도록 한다.

그리고 Construct 될때가 아니라 custom event로 호출할 때만 아이템 목록이 뜨도록 한다. 

그리고 과정 중에 해당 카테고리만 가져오도록 bool 조건과 branch를 사용하여 준다.

카테고리에 해당하는 무기를 가져오는 과정에서 기존에 있던 목록이 계속 중첩되어 뜰 수 도 있어서 장비UI의 Open 이벤트에서 Item Vertical Box의 Children을 clear 해준다. 

 

오늘의 결과화면 

https://www.youtube.com/watch?v=Bu-CiOvvYgY&list=PLiSlOaRBfgkcPAhYpGps16PT_9f28amXi&index=18

오늘은 슬롯을 클릭했을 때 나오는 리스트목록을 클릭했을 때 해당 아이템이 슬롯에 표시되는 것을 구현해보자

 

1.캐릭터에 Spring Arm 및 SceneCaptureComponent2D추가 해주기 - 장비화면에서 가운데 캐릭터가 보일 수 있도록

 

이것을 통해 액터만 카메라에 보이게 한다. 배경 벽 제외 -> 캐릭터만 보일 수 있도록

Spring Arm 회전을 줘서 플레이어 앞에 위치하도록
렌더 모드를 변경하여 원하는 것만 해당 카메라에 보여줄 수 있도록 캐릭터가 생성될 때 해당액터의 부분만 보이도록 설정
고정된 카메라이고 멈추지않도록 하기위해 콜리전테스트실행 비활성화

 

SceneCaptureComponent2D의 텍스처 타킷을 장비 시스템 UI 폴더에 새롭게 만들어준다.

 

그리고 실행시켜보면 

게임실행 시 텍스처화면

이런식으로  해당 액터만 나오게 된다.

하늘을 지우기 위해

만들어진 텍스처를 우클릭해서 새 머터리얼 생성을 한 뒤 도메인과 모드를 바꿔주고 함수 흐름을 이렇게 바꿔주면 

 

머터리얼 설정
위의 설정이 적용된 화면

 

이제 만든 텍스처를 장비시스템 UI에 붙여주면 된다. 

가운데에 딱 맞게 이미지가 줄어들지 않도록 Scale Box를 만든 뒤 자식으로 넣어준다. 

이때 가운데에 맞도록 정렬값은 0.5 0.5가 되도록 설정한다.

인벤토리 UI설정


또한 SpringArm의 길이를 줄여서 UI를 켰을 때 적당한 크기로 캐릭터가 나오도록 조절해준다.

그리고 인벤토리 UI를 켰을 때는 UI를 켰다는 효과를 주기위해 뒤에 배경은 Blur처리와 불투명하게 이미지를 깔아준다.

이때 앵커는 모두를 덮어쓸 수 있도록 하며 나머지 값들은 0으로 해준다. 

 

2. 슬롯 선택시 적용되게 기능 추가

일단 Equipable Slot 그래프에 현재 장비한 슬롯 변수를 초기화해주는 코드를 추가해준다. 

그리고 장비슬롯에 선택된 장비의 이미지가 들어올 수 있도록 이미지를 추가해준다.

 

장비 UI의 그래프에서 커스텀 이벤트를 추가해서 해당 장비슬롯에 선택한 장비의 이미지가 들어올 수 있도록 만들어주고 이것을 Item Slot에서 호출하도록 한다. 

Equipment UI의 커스텀 이벤트-> 해당하는 아이템을 찾아서 그 아이템의 이미지로 장비슬롯의 이미지를 바꿔준다.
장비 UI에서 마지막에 장비슬롯의 Item 변수를 초기화 해주는 부분
아이템슬롯 그래프에서 만약 클릭했을 때 클릭한 아이템으로 커스텀이벤트 호출

 

완성!

https://www.youtube.com/watch?v=EzQbMtk1hZ0&list=PLiSlOaRBfgkcPAhYpGps16PT_9f28amXi&index=16

오늘은 장비메뉴 UI를 만들어보자

1.메뉴 UI제작

UI는 유저인터페이스/위젯블루프린터/사용자위젯으로 만들어주었다.

 

UI구성요소

UI는 켄버스와 왼쪽위에 장비 메뉴라는 글자,

캐릭터 이미지가 들어올 이미지칸, 양쪽에 인벤토리 장비가 들어올 Vertical Box를 만들어주었다. 

이때 Vertical Box의 앵커는 각 Vertical 박스의 모서리에 위치하도록했다. 이때 앵커의 위치가 정확히 모서리는 아니여도 괜찮다.

 

2. 메뉴 호출

메뉴호출은 IA_EquipmentMenu라는 키를 추가해주고 이 키에 이벤트를 추가하는 방식으로 만들었다.

메뉴호출 이벤트

주요한 내용은

메뉴창이 열려있는지 확인할 Bool 변수와 Equipment Widget을 생성하고 이를 변수로 지정해준 뒤 제거할 때는 Remove from Parent를 통해 제거해 준다. 

메뉴가 열릴때는 마우스커서 표시를 하게 해주고 Set Input Mode Game and UI를 켜서 위젯 클릭을 할 수 있게 해주고 Set Movement mode 를 None으로 만들어서 움직이지 못하게 해준다.

메뉴가 닫힐때는 이와 반대로 마우스 커서표시를 끄고 Set Input Mode Game 만을 작동하게해 UI 클릭을 못하게 하고 Set Movement mode를 Walking으로 변경해준다.

 

3.슬롯UI만들기

슬롯또한 유저인터페이스/위젯블루프린터/사용자위젯으로 만들어주었다.

내부에는 Border box/Button으로 구성하여 사용자가 클릭했을 때 아이템 리스트가 뜰 수 있도록 하였다.

슬롯UI

4.메뉴 UI완성

메뉴 UI에 Vertical Box에 Slot UI를 두개 씩 넣어준다.

이때 첫번째 꺼에는 중앙정렬을 하고 위쪽 패딩을 50 넣어주고

두번째 꺼에도 중앙정렬을 하고 위쪽 패딩은 250을 넣어준다.

밑은 패딩값과 완성된 UI이다.

UI구
패딩값(위, 아래)

https://www.youtube.com/watch?v=ugiNsb9pc8k&list=PLiSlOaRBfgkcPAhYpGps16PT_9f28amXi&index=15

인벤토리 시스템

1. 무기 구조체 만들어주기 -S_Weapons

무기는 이름, 데미지, 필요레벨,아이콘 등을 가지고 있어야한다.

※무기 타입은 enum으로 선언해주기

2.아이템데이터(S_Slots)- 데이터 테이블 열 핸들 타입으로 구조체 만들기

각 아이템 객체를 가지고있음

3. 데이터 테이블 만들어주기 DB_Weapons

무기에 대한 정보를 가지고있을 데이터 테이블 만들기

4. 무기 객체 만들어주기 BP_Weapon

- 스태틱 매쉬와 아이템데이터 변수를 가지고 있음

이를 통해 아이템 정의해준다. 

Construction Script 게임동안 계속 실행된다.

객체의 정보에 따라 데이터 테이블의 아이템의 정보를 가져와서 그에 맞는 스태틱매쉬로 바뀌게 해준다

계층으로 접근하는 것보다 2번 구조체로 분할하는것이 좋다.
아이템마다 달라지는 스태틱 매쉬

5.Equipment System 만들어주기 - 액터컴포넌트

Add Weapon 함수로 무기 가져올 수 있게 

변수- weaponSlots - S_slots 구조체 -  키 눌렀을 때 가져올 수 있도록

고르는 키 추가해주기 E 

5-1. 무기 줍는로직 만들기

키를 눌렀을 때 만약 무기가 탐지된다면 추가해주기

아이템을 줍는 로직

 

아이템이 성공적으로 배열에 추가되었다!

 

 

1. 입력액션 지정

특정 키를 눌렀을 때, 해당 행동을 하게 하기 위해서는 일단 키를 눌렀을 때 작동하게 할 캐릭터의 Input/Actions 폴더에 들어가서 우클릭 후 입력 / 입력액션을 클릭하고 원하는 이름으로 지정해주면 된다.

만든 후 기본 설정으로 두면 된다. 

1. 입력액션 지정

2. 매핑 컨텍스트에 키 추가

Input 폴더의 입력 매핑 컨텍스트를 더블클릭하여 들어간 뒤 +키를 눌러 매핑을 추가해주고 키 값은 키보드 버튼을 누른뒤 원하는 키를 입력하면 된다.

3. 움크리기 애니메이션 추가

애니메이션에 움크리는 애니메이션을 추가해서 동작할 수 있도록한다.

 

 

4. 동작 블루 프린터 추가

키를 추가해주었다면 키를 통해 작동할 캐릭터의 블루프린터로 들어 간 후, 이벤트 그래프에서 커스텀 이벤트를 추가해서 동작하도록 만들어 주면 된다. 

 

5. 함수 내부 동작

함수는  커스텀이벤트를 추가해서 구현해두었는데 이 때 전에 추가해둔 IA_Crouch 를 불러온다음 키가 눌릴떄, 즉 Started에서 만약 달리는 중과 움크리는 중이 아니라면 움크린 불린값을 True로 만들어준다. 이때, 애니메이션 그래프에서 Crouched Locomotion으로 애니메이션이 넘어가지게 된다. 그 이후 걷는 속도를 낮춰주고 카메라의 거리를 조금 멀리로 바꿔주는데 이때, 400 -> 500의 값을 Lerp하게 즉, 스무스하게 넘어가도록 해준다.

언리얼 공부를 하면서 무작정 유투브강의를 찾아 보며 어떤걸 따라 만들어 볼 지 고민했는데 내가 만들고 싶은 게임인 RPG게임을 따라 만드는게 도움이 많이 될 것 같아서 유투브에 있는 RPG 게임 Tutorial를 보면서 따라 만들어 보기로 했다. 영어로만 된 강의라 이해하기 어려웠지만 천천히 듣고 보면서 배워 나갔다. 

https://www.youtube.com/watch?v=WcDj4uZygyE&list=PLiSlOaRBfgkcPAhYpGps16PT_9f28amXi&index=2

 

나는 이 강의를 보고 시작했다. 

일단 기본적인 걷고 뛰는 것을 만들어 보았는 데 이때 애니메이션이 값에 따라 자연스럽게 이어지도록 해주는 것이 Blend Space 1D 이다. 

1. FBX import

일단 서있고 걷고 달리는 애니메이션 을 넣어줘야한다.

이때 애니메이션에 사용될 FBX파일 언리얼 프로젝트에 넣어주면되는데 혹시 모를 경우를 대비해 디폴트로 리셋하고

메시를 자신이 사용할 스켈레톤을 넣어줘야한다. 여기서 나는 스켈레톤인 SK_Mannequin으로 플레이를 만들것이라 SK_Mannequin으로 선택하고 임폴트 해주었다. 

2. Blend Space 1D

Blend Space 1D는 변수의 값에 따라 애니메이션이 자연스럽게 이어지도록 하는 애니메이션 흐름도라고 보면 될 것 같다.

애니메이션 변환을 위한 변수선

이때, 가로축의 이름을 본 사진과 같이 Speed로 해주면되는데 이것은 애니메이션이 Speed의 값에 따라 바뀌게 하기위한 변수선언이라고 보면 되며 이때 750정도를 max값으로 해서 달리기값의 최대를 정해주면 된다. 

애니메이션 삽입

그리고 위의 화면에 보이는 곳에 왼쪽이 Speed값이 0 오른쪽이 최대값인 750 이여서 이에 맞는 애니메이션을 넣어주면 된다. 

3.Animation Blueprint 

그 다음 Animation Blueprint를 만들어 주면 된다. 밑의 사진은 다 만들어진 상태이다. 

중요한 것은 state machine이다. state machine은 Cache pose를 사용하기 위해 애니메이션을 하나의 객체처럼 만드는 것이다. transition은 어떨때 애니메이션이 다른 애니메이션으로 변환되는 지 설정하는 것으로 지금에서는 Speed 값을 넣어 주면 된다. 

Locomotion State machine & Transition
Main State machine 및 흐름도

밑의 사진은 Animation Blue print 안의 Event graph에서 실제로 캐릭터가 움직임에 따라 캐릭터의 스피드를 구하는 Blue print이다. 

 

+ Recent posts