애너미 매니저 클래스를 만들어 보겠다. 

 

Collision을 NoCollision으로 바꿔준다. 

스폰만 할 것이기 때문에 충돌이 나면 안되기 때문에 설정해준다. 

Hidden In Game 을 체크해준다 게임상에서 안 보이게 하기 위해 

이대로 설정하고 실행하면 블루프린트  꺼질 것이다. 

Enemy 생성자에 가서 설정해줘야한다. 생성된 AI가 Controller로 부터 Possess 되지 않아서 발생하는 문제이기 때문에 

'새싹 TPS 게임 만들기' 카테고리의 다른 글

TPS 게임 만들기 몽타주  (0) 2025.02.17
TPS 게임 만들기  (0) 2025.02.14
TPS 게임 만들기_  (0) 2025.02.13
TPS 게임 만들기_Anim  (0) 2025.02.12
TPS 게임 만들기 _Animation  (0) 2025.02.11

 

몽타주 만들기 

만든 몽타주에 애니메이션을 넣어준다. 

 

한개 더 끌어다가 올려 놓기 

 

Default Section의 이름을 Damage0 으로 변경해주었다. 

두번 째 슬롯 이름을 Damage1로 설정

CreateDefault를 눌러주면 나눠졌던 Section 다시 합쳐진다.  

Clear를 눌어주면 Section을 나누어 줄 수 있다. 

Anim Slot를 보면 나누어진 슬롯들을 확인 할 수 있다. 

Default Group을 Damage 슬롯으로 바꿔준다. 

 

애님 ABP_Enemy로 돌아가서 

디폴트 슬롯을 추가 해준다.

디폴트 슬롯을 선택해준다.

오른쪽 디테일창에서 디폴트 슬롯에서 내가 설정한 데미지 슬롯으로 변경해준다.

 

플레이어의 파이어 부분에 OndamageProcess 를 변경 해주기 

 

데미지를 줄 수 있도록 매개변수를 int32로 데미지를 주도록 넣어줌 

 

 

좀비의 죽음을 구현해보겠다

New Montage Section을 추가해주기 Die 로 설정해주고 

Clear 로 하나 추가해주어서 Section 나누어 주기 

 

새 노티파이를 추가 

새 Section을 추가 

DieLoop를 무한 반복 재생해도록 다시 선택해주기 

 

 

애니메이션이 끝나면 Die 애니메이션이 재생 되고

 

몽타주가 차례대로 재생 되는 모습 

 

 

AI 가 잘 따라 올 수 있도록 네비게이션 시스템을 넣어주도록하겠다. 

 

TPSProject.Build에서 AddRange에 두가지를 추가하겠다.

 

"NavigationSystem", "AIModule" 를 추가해줘야 사용 할 수 있다.

 

AIController를 선언해주고 

 

사용할 수 있도록 BeginPlayer에 AIController를 할당해준다. 

 

이제 블루프린트 에디터로 돌아가서 Place Actors에 Nav Mesh Bounds Volume을 검색한다.

 

월드에 Nav Mesh Bounds Volume을 배치해 준다.

 

월드에 올리고 P를 눌러주면 AI가 지나 갈 수 있는 길을 초록색으로 표시해주는 모습을 볼 수 있다. 

플레이를 해보면 직선으로 플레이어를 따라 오던 모습과 다르게 

막힌 길을 피해 플레이어를 향해 다가오는 모습이 보인다. 

 

맵이 커지면 네비 메시를 받는 메모리 용량이 커질 수 있기 때문에 필요한 부분에 의해서만 

처리할 수 있도록 설정 해주면 된다. 정해진 영역 만큼만 계산을 하여서 하는 것이 계산량이 더 적기 때문에

상황에 사용해준다.

 

네비게이션 인보커

 

 

 

 

Tile Generation Radius :생성하는 영역 범위 만큼 설정 

 

Tile Removal Radius 일정 영역을 넘어가면 삭제하는 것

 

영역을 설정해주고 레벨을 보면 허용되는 영역을 볼 수 있다. 

 

패트롤 기능 순찰기능을 넣어 보도록 하겠다. 

 

// centerLocation 어딜기준으로 얼마만큼의 범위를 가져올 것 인지 , 랜덤 포즈를 데스트에 넣고 값을 거기에서 가져올거임

 

타겟쪽으로 이동 할 수 있는 지 없는 지 타겟으로 갈지 패트롤을 할지 

 

MoveState에 추가해준다.

 

auto ns = UNavigationSystemV1::GetNavigationSystem(GetWorld());

 

현재 내 영역에서 목적지가 포함이 되는 지 

 

 

 

 

 

이제 에디터를 들어가서 확인해보면 혼자 돌아다니다가 플레이어를 보고 따라오는 모습과 멀어지니까 다시 혼자 돌아다니는 모습을 볼 수 있다.

길 찾기 기능 정지 추가

 

추가 

 

길 찾기 정지를 하지 않으면 맞는 동안 데미지 주는 동안 따라 올 수 있기 때문에 정지를 해주어야한다. 

'새싹 TPS 게임 만들기' 카테고리의 다른 글

TPS 게임 만들기_  (0) 2025.02.19
TPS 게임 만들기  (0) 2025.02.14
TPS 게임 만들기_  (0) 2025.02.13
TPS 게임 만들기_Anim  (0) 2025.02.12
TPS 게임 만들기 _Animation  (0) 2025.02.11

 

에너미 피격 네비메시 길 찾기 패트롤 

 

경로 복사하기 

외관 바꾸기 

 

에너미 넣어주기 

 

바꿔주기

 

 

 

 

 

부모클래스 설정해주기

'새싹 TPS 게임 만들기' 카테고리의 다른 글

TPS 게임 만들기_  (0) 2025.02.19
TPS 게임 만들기 몽타주  (0) 2025.02.17
TPS 게임 만들기_  (0) 2025.02.13
TPS 게임 만들기_Anim  (0) 2025.02.12
TPS 게임 만들기 _Animation  (0) 2025.02.11

'새싹 TPS 게임 만들기' 카테고리의 다른 글

TPS 게임 만들기 몽타주  (0) 2025.02.17
TPS 게임 만들기  (0) 2025.02.14
TPS 게임 만들기_Anim  (0) 2025.02.12
TPS 게임 만들기 _Animation  (0) 2025.02.11
TPS 게임 만들기 5일 차_에너미  (1) 2025.02.07

 

좌우이동, 점프

 

점프시작 점프종료 점프중 

 

 

이제 에셋을 넣어보겠다 

 

Skeleton 에 우리가 사용하는 SK_Mannequin 을 넣어준다.

 

 

snap to Closest Frame Boundary 를 체크해주고 임포트를 해준다. 

임포트를 하면 애니메이션이 들어온 모습을 확인 할 수 있다.

BPS_TPSPlayerAnim에 JumpStart 애니메이션을 넣어주고 연결을 해준다. 

플레이어가 공중에 떠 있는지 여부를 알 bool 값 만들어 주기 

 

GetCharacterMovement를 사용할 헤더를 추가해준다.

(#include "GameFramework/CharacterMovementComponent.h")

 

조건을 클릭해주고 

 

 

IsInAir 가 true일때 수행되도록 설정

 

점프 시작 동작을 하는 모습이다.

 

점프하고 공중에 머무는 동작을 넣어준다. 조건을 한번만 클릭해주고 디테일창에서

Automatic Rule Based on Sequence Player in State 를 체크해준다. 

 

 

 

 

 

 

Automatic Rule Based on Sequence Player in State 를 체크해준다. 

점프엔드에서 아이들로 돌아갈 때 

 

 

완료하면 점프가 되는 모습을 볼 수 있다. 

 

 

 

 

앞뒤와 좌우 이동을 위해 만들어줌 

이제 달리기 입력 값을 만들어주겠다.

이동속도와 애니메이션 속도가 맞지 않아서 미끄러지는 느낌으로 움직이기 때문에 

WalkSpeed를 200.0f Run Speed를 600.0f 으로 설정해주었다.

 

TPSPlayer.CPP

BeginPlay에서 초기 이동 속도를 설정해 주었다.

 

TPSPlayer.h

달리기 인풋에 사용 할 변수와 함수를 생성하였다. 

 

눌렀을 때 달리고, 때면 걷도록 하기 위해 Stated와 Completed를 연결해주었다.

 

InputRun의 구현부에서 이동속도를 변경 하도록 해주었다.

 

IA_Run의 Value를 bool으로 만들어 주었다.

IMC_TPS에 IA_Run 을 추가해주었다.

Left Shitf 키를 설정해주었다.

 

이제 BP_Player로 돌아가서 바인딩 된 함수를 꼭 넣어주도록 한다. 

IA_Run을 넣어주었다. 

 

테스트 결과 

처음에는 느린 속도로 걷고 Shift를 누르면 빠르게 걷는다.

 

블랜스 스페이스 값을 변경해주었다. 

기존에 들어가있던 애니메이션들을 걷기 속도에 맞춰 200, -200으로 변경을 해주고 

조깅 애니메이션을 추가하여주었다. 

테스트 시 캐릭터가 자연스럽게 걷고 뛰는 모습을 확인해 볼 수 있다. 

 

이제 사격 애니메이션을 넣어주겠다.

 

 

Fire_Rifle_Ironsights를 우클릭 - Create - Create AnimMontage를 하여 생성해주었다. 

 

AM_PlayerFire에 들어와서 애니메이션의 시간을 보면 0.23초이다.

 

 

Blend Time 을 0.01초로 변경해주었다.

 

기존에 연결 되어있던 선을 끊고 

New Save cached pose를 만들어서 캐시에 저장시킨다. 

저장한 캐시를 불러와서 사용할 수 있다. 

 

저장 된 값을 연결해주었다. 

Layered Blend Per Bone 노드를 추가해주고 연결을 해준다.

 

본을 섞을어주기 위해 저장된 포즈를 두개로 복사해준다. 하나는 Layered Blend Per Bone 연결을 해주고 

Layered blend per bone 노드를 선택하고 Layer Setup에 항목을 추가해서 spine_01을 추가해주자.

(spine_01 뼈를 기준으로 애니메이션을 섞겠다는 뜻)

Mesh Space Rotation Blend 를 체크해주자

 

 

스켈레톤에서 

본 트리에서 섞을 위치인 본을 가져오고 

본의 이름을 복사해서 

이름을 넣어주었다 

 

TPSPlayerAnimInstance.h

공격 몽타주와 몽타주를 실행할 함수를 만들어주자.

 

구현부에서는 몽타주를 실행시켜준다.

 

TPSPlayer.cpp로 이동하여 InputFire에서 PlayAttackAnim함수를 호출해보자.

공격 몽타주를 재생할 곳에 UTPSPlayerAnimInstance 를 Cast한다. 

anim AttackAnim을 재생하게 해준다. 

 

ABP_Player에 들어가서 Details 창에 

내가 넣어준 Attack Anim Montage에 내가 생성한 몽타주를 넣어준다. 

이제 공격을 하면 플레이어가 공격 모션을 취하는 것을 볼 수 있다.

 

내일은 움크리기 등 다른 모션을 구현해보도록하겠다. 

 

'새싹 TPS 게임 만들기' 카테고리의 다른 글

TPS 게임 만들기  (0) 2025.02.14
TPS 게임 만들기_  (0) 2025.02.13
TPS 게임 만들기 _Animation  (0) 2025.02.11
TPS 게임 만들기 5일 차_에너미  (1) 2025.02.07
TPS 게임 만들기 4일 차_  (0) 2025.02.06

오늘은 캐릭터의 애니메이션을 넣어볼 것이다. 

 

 

 

팹에서 Animation Starter Pack을 다운 받아서 프로젝트에 넣어준다. 

 

 

파일 버전이 다르다고 뜨는데 제일 최신 버전으로 선택하여 넣어준다.

5.2버전으로 선택하여 프로젝트에 넣어주었다.

 

 

블루프린트에 들어가면 AnimStarterPack 파일이 생성되었다. 

스켈레톤이 예전버전으로 되어있기 때문에 우리가 쓰는 스켈레톤으로 리타겟팅을 해주어야한다. 

 

파일을 들어가면 애니메이션등 다양하게 있기 때문에 가로줄 세개로 된 필터를 선택 후 필터 옵션을 바꿔준다.

 

Animation에 Animation Sequence 를 해주면 그에 맞춰 필터링이 가능하다. 

필터링한 후 필터링 된 애니메이션을 전부 다 선택해주어서 애니메이션 리타겟을 해준다.

 

우클릭을 한 후 애니메이션 리타겟을 선택해주면 리타겟을 할 수 있는 창이 뜰 것이다. 

Target에서 스켈레톤을 SKM_Quinn을 선택해주었다. 

 

Crouch_Idle부터해서 제일 아래있는 애니메이션까지 선택을 해주어서 Export Animations를 해주었다. 

 

 

버튼을 누르면 파일을 어디다 저장 할 거냐고 뜨는데 

Content파일에서 Animations 파일을 새로 만들어주어서 선택해주었다. 

 

 

파일을 선택해주면 해당 창이 뜨는데 Export 해주겠다. 

 

 

Export를 하니 애니메이션이 리타겟이 되어서 애니메이션이 생성 된 것을 볼 수 있다. 

 

이제 다 사용했으니 리타겟 하기 전 파일은 지운다.

 

 

이제 블루프린트에 들어가서 Mesh를 선택 후 

 

 

Details창에 들어가서 Animation에서 

Use Animation Asset을 선택한다.

 

 

선택을 완료하면 Anim to Play가 뜬다.

들어가면 애니메이션을 보면 안 뜰것이다.

 

SKM_Quinn 으로 바꿔주고 Idle로 설정한 다음 뷰포트를 보면 캐릭터가 퀸으로 바꾸고 

포즈를 취하고 있는 모습을 확인해 볼 수 있다. 

 

 

SKM_Quinn 이 Idle_Rifle_애니메이션 포즈를 취하고 있는 모습이다.

 

 

SK_Mannequin으로 C++에 스켈레톤 메시를 넣어줬기 때문에 일단은

다 돌려주고 Animation 클래스를 만들어서 설정해 주도록 하겠다.

 

 

 

이제 애니메이션 블루프린트를 만들어주겠다

 

 

애니메이션 블루프린트 클래스를 만들어 주었으면 파일을 들어가서 

 

 

뷰포트에서 모습이 바뀐 것을 미리 확인해 볼 수 있다.

이제 다시 BP_Player 파일로 들어가서 Animation을 확인해 보면 

Animation Mode를 Use Animation Blueprint로 바꿔주고 

Anim Class를 우리가 방금 만든 애니미에션 클래스를 넣어준다. 

넣어주고 뷰포트를 보면 플레이어 캐릭터가 모습이 바뀐 것을 확인해 볼 수 있다.

 

 

 

아까 연

 

 

 

 

 

 

 

이제 스피드 값을 만들어줄 것이다. 

 

 

 

 

 

 

idle 에서 걷는거 

 

 

걷는거에서 아이들

 

 

 

 

 

블루프린트에서 정상적으로 움직이는 모습을 볼 수 있다. 

 

이제 코드로 돌아가서 블루프린트에서 진행 한것을 코드로 바꿔보겠다. 

 

 

 

앞뒤로 움직이는 모습을 볼 수 있다.

'새싹 TPS 게임 만들기' 카테고리의 다른 글

TPS 게임 만들기_  (0) 2025.02.13
TPS 게임 만들기_Anim  (0) 2025.02.12
TPS 게임 만들기 5일 차_에너미  (1) 2025.02.07
TPS 게임 만들기 4일 차_  (0) 2025.02.06
TPS 게임 만들기 3일 차  (0) 2025.02.05

 

Enemy 만들기 

C++ 에너미를 만들어준다. 

 

 

플레이어에서 만들어줬던 메시를 들고와서 에너미에서도 동일하게 넣어준다. 

 

 

이제 블루프린트 에디터로 와서 C++로 만든 것을 블루프린트에서도 동일하게 만들어준다. 

블루 프린트 창에 들어가면 메시가 잘 붙어 있는 모습을 확인해 볼수 있다. 

 

 

FSM (Finite State Machine) 유한 상태 머신 

 

Idle 

Move 

Attack  

상태가 유한하게 변화하게 해주는 것이다. 

 

대기 -> 이동-> 공격 -> 대기 

 

상태를 만들 때 1단계 2단계 나누어 만드는게 편하다. 

Any State : 어느 상황이든 피격이나 사망 처리를 하는 

 

우리가 만들 것은 1단계를 만들어보겠다. 

 

 부모클래스의 최상위 클래스가 Actor Component이다. 

트랜스 정보가 없다 위치 정보가 필요가 없다.

Scene Component에는 있다. 

 

FSM을 만들기 위한 Actor Component를 만들어보겠다.

이름을 설정 한 다음 파일을 만들어 준다. 

헤더에서 사용할 상태를 정의 해보겠다. 

 

 

상태를 관리할 Enum을 만들어줌 

UMETA ( DisplayName = " " ) 를 해주면 한글을 사용 할 수 있다.

 

상태변수를 만들어준다. 기본 변수를 설정해준다. Idle로 설정해 주었다.

 

예전에는 변수명을 멤버변수(m)에 변수명(ex_ n, f , b, d) 를 넣어줘서 만들어줬었다. 

상태에는 if문보다는 switch 문을 쓰는 것이 휴먼 에러가 적다. 

 

 

이제 에너미에서 사용 가능하도록 FSM을 붙여준다.

 

헤더에 만들어줬으면 생성자에서 생성을 해준다.

 

만들어줬으면 블루프린트 에디터에서 에너미에 FSM 이 잘 붙어 있나 확인을 해본다.

Component 에 붙어 있다면 잘 붙은 것이다. 

 

이넘 로그 찍는 법 

매크로로 만들어 두었던 화면에 로그를 찍을 수 있는 매크로를 들고온다. 

 

에너미를 화면에 집어 넣고 출력이 잘 되는지 확인해 본다.

 

 

움직일 수 있도록 타겟이랑 움직일 대상을 가져온다

 

BeginPlay에 

액터를 가져올 수 있도록 오토로 게임플레이스테틱을 사용하여 월드에서 플레이어 스테틱 클래스를 가져온다. 

 

월드에 있는 플레이어를 타겟으로 두고 내 부모도 가져와서 움직임을 줄 수 있도록 한다. 

 

움직임을 설정해주는 무브 함수에 가서 에너미가 플레이어 방향으로 이동할 수 있도록 설정해주고 

노멀라이즈 설정까지 같이 해준다. 

 

다시 에디터에 돌아가서 에너미가 잘 이동하는지 확인해 본다. 

움직임이 잘 잘동하는 모습을 보면 플레이어를 바라보지 않는 상태로 이동하는데 이때 에너미 디테일창에 들어가서 

Orient Rotation to Movement를 체크해준다. 체크를 하고 다시 플레이를 해보면 

플레이어를 바라본 채로 다가오는 모습을 확인해 볼수 있다. 

 

공격

이제 가까워지는 공격하는 것을 구현 해보겠다.

 

공격 범위를 설정해준다.

Move에서 타겟과의 거리를 체크해서 attackRange 안에 들어오면 공격 상태로 전환 하도록 

거리를 체크하고 AttackRange보다 작아지면 State를 Attack으로 변환해준다. 

 

블루프린트 에디터로 돌아가서 확인해보면 에너미가 무브상태에서 일정 거리에 들어오면 플레이를 공격하는 상태로 전환하는 모습을 볼  수 있다. 

 

공격 시간을 준다.

일정 시간에 한번씩 공격을 하게 설정해준다. 

 

일정 시간이 되면 어택이 되는 것을 확인해 볼 수 있다. 

현재는 플레이어가 멀리 도망을 가더라도 계속 공격을 하기 때문에 다른 상태를 추가 해주도록 하자 

 

 

멀어지면 움직이도록 일정 거리 반경에 들어오면 공격 하도록 설정을 한다. 

에디터로 들어가서 잘 작동하나 확인해 본다. 

제대로 설정 되었다면 멀어졌다면 움직이고 가까워지면 공격이 뜰 것이다.

 

공격을 받았을 때 사라지도록 함수를 만들어준다. 

에디터로 가서 데미지를 주면 레인트레이스 데미지가 안 받는 것이 보여질 것이다.

BP_Enemy를 열어서 Capsule Collision의 Preset을 Custom으로 변경하고 

Visibility를 Ignore에서 Block으로 변경한다.

죽음 처리를 위한 체력을 만들어주고 체력에 따라 상태가 바뀌도록 설정해준다.

 

 

 

데미지 딜레이 타임을 줘서  데미지를 받으면 데미지 스테이트 후 아이들 돌아가도록 

 

죽으면 아래로 내려가도록 설정해주겠다. 그러기 위해서 속도를 만들어준다.

 

에너미가 아래로 내려갈 수 있도록 설정하고 2미터 이상 내려왔다면 

에머니를 지우도록 설정해준다. 

 

 

블루프린트 에디터로 돌아가면 에너미에게 데미지를 가하고 체력이 0이 되면 

죽음 상태로 바뀌고 땅 아래로 내려하는 모습을 볼 수 있다. 

'새싹 TPS 게임 만들기' 카테고리의 다른 글

TPS 게임 만들기_Anim  (0) 2025.02.12
TPS 게임 만들기 _Animation  (0) 2025.02.11
TPS 게임 만들기 4일 차_  (0) 2025.02.06
TPS 게임 만들기 3일 차  (0) 2025.02.05
TPS 게임 만들기 2일 차  (0) 2025.02.04

오늘의 개발

조준모드 총 2가지

블루 프린트 구현 -> C++ 구현 

 

 

 

스나이퍼건 스태틱 메시를 추가해준다.

 

 

 

스나이퍼건 컴포넌트 등록을 해주고 

부모 컴포넌트를 Mesh 컴포넌트로 설정을 해준다.
 
복사 해온 스태틱 메시 데이터를 가지고 와서 데이터를 넣어준다. 

if문을 통해 데이터 로드가 성공했다면 

스태틱 메시 데이터 할당하게 설정해준다. 방어 코드로 데이터로드가 잘못 되었을 때를 대비하여 넣어준다.

총 위치와 총 크기 설정을 해준다. 이제 다시 블루 프린트로 넘어가서 제대로 되었는 지 확인을 해본다.  

 

 

 

 

 

이제 총을 변경 할 수 있도록 인풋액션으로 총 입력키를 만들 수 있도록 만들어준다.

IA_ SniperGun 과 IA_GrenadeGun 을 만들어 주었다. 

맵핑으로 가서 추가해주고 키보드 입력값을 설정해준다. 

IA_GrenadeGun 는 1을

IA_ SniperGun 는 2를 주었다.

 

 

이제 다시 플레이어에 가서 만든 InputAction을 넣어준다. 

 

생성자에서 기본적으로 사용할 건이 무엇인지 설정해주기 그렇지 않으면 처음 실행 할 때 무기가 두개가 동시에 나온다.

 

설정 후에는 설정한 무기로 나온 모습이 보인다.

 

이제 스나이퍼 총 조준 모드를 만들기 위해서 인풋 액션을 새로 만들어주고 

맵핑에 만든 액션을 넣어준다 키값을 Left Ctrl로 설정해준다. 

 

조준 모드를 만들기 위해 UI를 생성해주고 이미지를 넣어주었다. 

 

 

 

 

 

UI를 추가를 하고 나면 빌드에서 "UMG"를 추가해줘야함 안 하면 빌드 오류가 날 수 있음

 

'새싹 TPS 게임 만들기' 카테고리의 다른 글

TPS 게임 만들기 _Animation  (0) 2025.02.11
TPS 게임 만들기 5일 차_에너미  (1) 2025.02.07
TPS 게임 만들기 3일 차  (0) 2025.02.05
TPS 게임 만들기 2일 차  (0) 2025.02.04
TPS 게임 만들기 1일 차  (0) 2025.02.03

+ Recent posts