본문 바로가기

인생언리얼TPS

(19)          글쓰기    
3.2 네비게이션 시스템을 이용한 길찾기 보호되어 있는 글입니다.
3.2 애니메이션 통신 시스템 정리 보호되어 있는 글입니다.
3.2-2 적 알파타입 버전 업그레이드 하기 보호되어 있는 글입니다.
총발사 사운드 재생하기 이번에는 발사 사운드를 추가하겠습니다. TPSPlayer.h 헤더 파일에 USoundBase* 타입의 변수 bulletsound를 추가해 주도록 하겠습니다 SniperGun폴더안에 Rifle Sound reference를 카피해서 TPSPlayer.cpp 생성자에 넣어서 사운드를 로딩합니다. ConstructorHelpers::FObjectFinder tempSound(TEXT("/Game/SniperGun/Rifle.Rifle")); if (tempSound.Succeeded()) { bulletSound = tempSound.Object; } InputFire()함수 맨 위에서 구현합니다. 총 소리는 총을 쏠 때 발생하는 소리이므로 InputFire() 함수에 작성한다. 사운드 재생은 UGameSta..
3.2 애니메이션과 총위치 동기화(Socket), 발사 반동화면 만들기 Snimper Gun은 Mesh의 자식으로 붙어 있지만 총의 애니메이션과 동기화 되지 않습니다. 이유는 Skeletal Mesh는 많은 뼈로 이루어져 있어 Socket을 사용해 지정하지 않으면 안됩니다. SK_Mannequin을 열고 Skeletal Tree 중간쯤 hand_r이라는 뼈가 있고 우클릭후 Add Socket을 클릭하면 hand_rSocket이 생성됩니다. hand_rSocket을 카피해서 gunMeshComp와 sniperGunComp->SetupAttachment에 넣어줍니다. 그래도 위치나 방향에 오차가 있는데 Detaildㅢ Pase Anims를 켜고 맞추서 값을 얻을수 있습니다. gunMeshComp = CreateDefaultSubobject(TEXT("GunMeshComp"));..
3.2 플레이어 애니메이션 몽타주를 이용한 공격 처리하기 Animation StaterPack의 Fire_Rifle_IronSights 에셋을 찾아 우클릭후 Create Anim Montage메뉴를 선택합니다. Animation폴더로 이동시켜줍니다. 열어서 Blend In/Out 시간을 0.1로 바꿔줍니다. ABP_Player로 가 MoveFSM과 OutPose사이를 끊습니다. cache를 검색해 New Save cached pose를 추가합니다. 이름을 MoveFSMCache로 바꿔줍니다 MoveFSM의 카피본입니다. moveFS를 검색해서 Use cached pose를 넣어줍니다. layerd를 검색해서 Layerd blend per bone을 추가하고 연결해줍니다. 이전에 만든 몽타주를 끌어다 놓고 Blend Poses0에 연결해줍니다. Slot Defa..
3.2 블렌드스페이스를 이용한 애니메이션 합성 이제 좌우 움직임을 표현해야 하지만 잘 생각해보면 360도 방향을 표현하려면 좌우 애니메이션 2가지로는 부족합니다. 관리도어렵습니다. 이럴 경우 사용하는 것이 블렌드스페이스 입니다. 블루프린트>Animation>BlendSpace를 선택해 BS_PlayerMove로 만듭니다. 블렌드스페이스는 이제 2축으로 밖에 만들수 없습니다. 한쪽은 스피드, 다른쪽은 Direction으로 만듭니다.. Asset에서 Idle은 가운데 Walk4개는 상하좌우에 배치합니다 .Dicrection쪽이 좌우 입니다. 이제 PlayerAnim.h에 direction변수를 추가해줍니다. UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = PlayerAnim) float direc..
3.2 알파타입버전 제작하기 - 애니메이션 FSM //매프레임 갱신되는 함수 virtual void NativeUpdateAnimation(float DeltaSeconds) override; }; 1. 플레이어 적에서 사용하는 디자인에셋, 애니메이션 처리를 목표로 합니다. 상태머신, 블렌드스페이스 애니메이션몽타주 2. 지능화된 AI적 3. 카메라 셰이크 기법 3.2-1 플레이어 알파타입 버전 업그레이드하기 마켓플레이스에서 애니메이션 스타터팩을 다운받아 현재 프로젝트에 적용해줍니다. 다운 받아보니 Mesh는 SK_Mannequin이고 Skeleton은 UE4_Mannequin_Skeleton가 들어 있네요 SK_Mannequin 메시위를 우클릭해 레퍼런스를 카피해 TPSPlayer생성자에 메시를 불러온다. // Sets default values ATP..
3.1-9 적AI제어를 위한 FSM 제작하기 TPSPlayer는 WASD키 입력시 애니메이션이 제어된건 ThirdPersonTemplete안에 FSM(유한상태머신)이 구현되어 있기 때문입니다. 이걸 구현해보겠습니다. ActorComponent를 상속받아 EnemyFSM 이라는 C++클래스를 제작합니다. 컴포넌트로 제작하면 다른 컴포넌트에 부착하여 사용이 가능합니다. UEnemyFSM 클래스가 만들어 집니다. EnemyFSM.h #pragma once #include "CoreMinimal.h" #include "Components/ActorComponent.h" #include "EnemyFSM.generated.h" // 사용할 상태 정의 UENUM(BlueprintType) enum class EEnemyState : uint8 { Idle, ..
3.1-8 적Enemy생성하기 Character를 상속받아 C++클래스를 만듭니다. 이름은 Enemy로 합니다. 외관데이터 할당하기 ConstructorHelpers::FObjectFinder()를 사용해 하드코딩으로 메시를 불러옵니다. Character를 상속받아 이미 스텔레탈메시컴포넌트가 있는데 GetMesh()로 접근합니다. 적에너미는 적마다 외형이 다르므로 하드코딩보다는 블루프린트를 만들어 지정하는게 유연합니다. 샘플스켈레탈메시도 삼인칭 메시를 사용하였습니다만 이또한 안하는게 편할수도 있습니다. ThirdPersonTemplete의 SKM_Quinn을 Ctrl-C해서 붙여줍니다. 작은 따옴표 안에만 사용합니다. 책에서는 BP_Enemy 블루프린트 생성하여 외관을 붙여주고 있습니다. 블루프린트에서 메시를 붙여보면 위치가 위에 떠..
3.1-7 스나이퍼모드 C++ 우리는 이전에 UserWidget을 상속받은 WBP_sniperUI를 만들었습니다. 이걸 C++에서 처리하려면 build.cs에 UMG 모듈을 추가하고 리빌드 해야지만 간단한 로딩정도는 다음과 같이 피해갈수 있습니다. Userwidget을 상속받아 MyUserWidget C++클래스를 만듭니다. 이클래스를 UserWidget 대신 상속시킬겁니다. 2개의 파일이 만들어지지만 현재는 아무것도 하지 않습니다. UMyUserWidget 클래스가 생성되었습니다. 이걸 나중에 사용합니다. UCLASS() class TPSPROJECT_API UMyUserWidget : public UUserWidget { GENERATED_BODY() }; WBP_sniperUI를 열고 우상을 보면 Parent class가 Use..
스나이퍼 모드 구현하기 인생언리얼 자료실폴더내 SniperGun.zip을 풀어 Content폴더 밑에 복사해줍니다. sniper1은 아직 머터리얼이 제대로 할당되지 않을 것을 알수 있습니다. sniper2 머터리얼을 열어줍니다. Param 노드를 지우고 Texture Sample노드를 추가합니다. 좌측 Material Texture를 열어 sniper1_diffuse를 선택해줍니다. 그럼 다음과 같이 텍스쳐가 박스에 보입니다. Texture Sample을 하나더 추가하고 Sniper1_normal을 선택하고 normal에 연결합니다. 세이브하고 나가서 sniper1을 열어보면 머터리얼이 잘 적용된걸 알 수 있습니다. 총교체하기 새로가져온 스나이퍼건을 플레이어가 사용할 수 있도록 TPSPlayer.h에 변수를 추가합니다. UPR..