이전 내용보기


앞장에서 작성된 내용에 Pawn Sensing을 추가하여 AI 적 캐릭터가 플레이어 캐릭터를 발견하면 총을 들고 달려 오다가 플레이어가 총을 쏘아 명중하면 쓰러지는 내용으로 애니메이션을 테스트하려고 한다. 애니메이션을 실행할 때는 블루프린트 Play Animation 노드를사용할 것이다


여기서도 앞장과 마찬가지로 Animation Starter Pack에 포함된 애니메이션을 사용할 것이고 스켈레탈 메시를 참조하는 클래스 블루프린트는 앞장에서 사용했던 BP_Enemy_AI 를 사용한다


사용된 Skeletal Mesh는 Animation Starter Pack에 포함되어 있는 SK_Mannequin 이므로 Animation Starter Pack에 포함된 모든 애니메이션을 BP_Enemy_AI 블루프린트에서 Play Animation 노드를 통해 실행할 수 있다.


컴포넌트 패널의 [컴포넌트 추가] 버튼을 누르고 Pawn Sensing을 검색하여 컴포넌트로 추가하고 우측 [디테일] 뷰에서 시야의 각도와 시야의 반경을 적절히 설정한다


컴포넌트 패널에서 Pawn Sensing 컴포넌트를 선택하고 [이벤트 그래프] 바탕에서 마우스 우측을 누르고 On See Pawn 이벤트 노드를 추가하고 아래와 같은 내용을 작성한다. 그 외에 BeginPlay 이벤트와 OnComponentHit 이벤트도 작성한다


아래의 내용은 AI 캐릭터가 총을 들고 서 있다가 플레이어 캐릭터를 발견하면 달려 오다가 플레이어가 총을 쏘아 명중하면 AI 캐릭터가 쓰러지는 내용이다


AI 캐릭터가 활동하기 위해서는 Floor에 Nav Mesh Bound Volumn 도 설정해주는 것을 잊지 않아야 한다




Posted by cwisky

언리얼 엔진의 Skeleton 에 Socket을 추가하고 Skeletal Mesh를 참조하는 클래스 블루프린트에서 Socket에 총 모델을 연결하기


이전의 내용을 이해한 후에 여기를 참조해야 제대로 이해할 수 있습니다

이전의 내용 보기


특정 Skeleton을 이용하여 생성된 기본 캐릭터 모델(Skeletal Mesh)이 있고 그 모델에 다른 모델을 부착하려는 경우에는 Socket을 Skeleton에 추가해야 한다. 추가된 소켓에 무기나 다른 모델을 부착하려면 해당 메시를 참조하는 블루프린트에서 컴포넌트를 추가하는 방법을 사용할 수 있다.


여기서는 앞장에서 생성한 블루프린트를 사용하여 그 안에서 참조하는 Skeletal Mesh에 소총 모델을 부착하여 애니메이션과 함께 움직이도록 설정하려고 한다


준비물

Skeleton : Animation Starter Pack에 포함되어 있는 UE4_Mannequin_Skeleton

Skeletal Mesh : Animation Starter Pack에 포함되어 있는 SK_Mannequin

클래스 블루프린트 : 앞장에서 생성된 스켈레탈 메시를 참조하는 클래스 블루프린트

소총 모델 : free3d.com 등에서 배포하는 무료 모델 

fbx.zip



Skeleton파일을 찾아 더블클릭하여 페르소나 에디터를 연다

사용할 Skeleton파일이 저자된 곳은 다음과 같다

콘텐츠/AnimStarterPack/UE4_Mannequin/Mesh/UE4_Mannequin_Skeleton

스켈레톤 파일을 더블클릭하여 페르소나 에디터를 열고 아래의 그림과 같이 소켓을 추가한다. 아래의 그림에서는 왼손의 뼈에 해당하는 hand_l 에 소켓을 추가하고 있다


소켓의 이름은 자동으로 본의 이름을 따서 [hand_l소켓]으로 붙여진다

툴바에서 [저장] 버튼을 누르고 에디터를 닫는다


앞장에서 생성한 BP_Enemy_AI 클래스 블루프린트를 더블클릭하여 연다. 이 클래스는 위에서 소켓이 추가된 바로 그 Skeleton을 적용한 Skeletal Mesh의 참조를 사용하고 있으므로 소켓에 접속할 수가 있다


CB에서 소총 모델을 드래그하여 컴포넌트 패널에 있는 Mesh의 하위 컴포넌트가 되도록 놓고 우측 [디테일] 뷰 / 소켓 / 부모소켓 : [hand_l소켓] 으로 설정한다. 이 때 중요한 점은 소켓이 추가된 Mesh의 하위 컴포넌트가 되도록 설정해야 한다는 것이다. 그래야만 부모 소켓 항목에서 소켓을 선택할 수 있게 된다


추가된 소총모델을 선택하고 우측 [디테일] 뷰 /트랜스폼/ 에서 위치를 0, 0, 0 으로 설정하면 부모소켓의 위치에 소총모델이 위치하게 된다. 소총의 크기가 캐릭터에 비해서 너무 작기 때문에 스케일 툴을 이용하여 크기를 조정하고 소총모델을 회전하여 총구가 앞으로 오도록 설정한다. 이때 에디터 뷰포트에서 애니메이션이 실행 중이면 소총의 위치를 설정하기가 어려우므로 컴포넌트 패널에서 Mesh를 선택하고 우측 [디테일] 뷰 / Animation / Pause Anims 를 선택하여 애니메이션을 일시중지하고 소총의 위치를 설정한 다음에 Pause Anims 선택을 해제하면 된다. 실수로 Pause Anims를 선택한 상태로 게임을 실행하면 애니메이션이 실행되지 않는다

위와 같이 설정하고 Pause Anims 선택을 해제하면 뷰포트 상에서 지정된 애니메이션이 실행될 때 캐릭터의 움직임을 따라서 소총도 자연스럽게 따라 움직이는 것을 확인할 수 있다


캐릭터의 자세를 따라 소총이 따라서 움직이는지 확인하기 위해서 [이벤트 그래프]에 다음과 같은 간단한 내용으로 테스트해 본다. 적용해본 애니메이션은 Fire_Rifle_Ironsights 으로 견착사격하는 애니메이션이다


위의 내용을 [저장] [컴파일] 후에 게임을 실행해 보면 다음과 같이 캐릭터의 자세의 변화에 따라 소켓에 연결된 소총도 제대로 따르는 것을 확인할 수 있다



Posted by cwisky

스켈레탈 애니메이션(Skeletal Animation)은 관절체로 구성된 오브젝트의 움직임을 표현한 애니메이션을 말한다 언리얼 엔진에서 스켈레탈 애니메이션은 스켈레톤(Skeleton)에 등록되며 스켈레톤의 참조를 이용하면 해당 스켈레톤에 등록된 많은 애니메이션 중에서 상황에 따라서 특정 애니메이션을 선택하여 사용할 수 있다. 그러므로 스켈레탈 애니메이션을 화면에 보여주려면 반드시 스켈레톤(Skeleton)이 있어야 하며 캐릭터의 외형을 나타내는 스켈레탈 메시(Skeletal Mesh)도 반드시 필요하다 Skeleton은 뼈의 계층구조에 대한 정보만 있고 오브젝트를 표현하는 메시 정보는 가지고 있지 않다. Skeletal Mesh는 Skeleton(뼈의 계층구조 정보)을 적용하여 생성한 3D 메시를 말한다


언리얼 엔진을 설치하고 일인칭, 삼인칭 템플릿을 이용하여 프로젝트를 생성하면 엔진에서 제공하는 Skeleton, Skeletal Mesh 와 해당 스켈레탈 메시를 사용해서 만들어진 몇가지 스켈레탈 애니메이션이 제공된다.  


블루프린트에서 스켈레탈 애니메이션을 화면에 출력하는 방법은 Play Animation 노드를 사용하는 것이 기본이다. 단순히 적절한 상황에서 특정 애니메이션을 보여주기만 한다면 그 이상의 수단은 필요 없을 것이다. 그러나 몇가지 애니메이션이 자연스럽게 연결되도록 보간(Interpolation)하는 방법을 제공하는 Blend Spaces 라는 수단도 있고 State Machine 을 사용하여 상태에 따라 다른 애니메이션을 선택하여 보여 줄 수도 있다. 또 Animation Montage를 이용하여 2가지 애니메이션을 동시에 실행하도록 혼합할 수도 있다


모든 스켈레탈 애니메이션의 실행을 위해서는 해당 스켈레텔 메시가 반드시 필요하며 Character를 상속한 클래스 블루프린트를 생성하고 Mesh 컴포넌트를 원하는 스켈레탈 메시로 지정해 주면 블루프린트 안에서 Mesh의 참조를 구할 수 있으므로 해당 Mesh에 등록된 모든 스켈레탈 애니메이션을 불러서 실행할 수가 있다.


여기서는 위에서 언급한 대로 Character를 상속한 클래스 블루프린트를 생성하고 Mesh 컴포넌트에 Animation Starter Pack에서 제공하는 SK_Skeleton 메시를 지정하는 방법에 대해서 알아본다


Animation Starter Pack을 다운로드 및 임포트했다면 콘텐츠 / AnimStarterPack / UE4_Mannequin / Mesh / 안에서 스켈레톤(UE4_Mannequin_Skeleton)과 스켈레탈 메시(SK_Mannequin)를 찾을 수 있다

Animation Starter Pack에 포함된 많은 애니메이션은 콘텐츠/AnimStarterPack 안에서 찾을 수 있다


일인칭 템플릿을 사용하여 새로운 프로젝트를 생성하고 [월드 세팅] / Game Mode / Game Mode Override : FirstPersonGameMode, Default Pawn Class : FirstPersonCharacter 으로 설정한다


CB의 적당한 폴더에서 마우스 우측 > 블루프린트 클래스 > 부모 클래스 선택 : Character > 블루프린트 이름: BP_Enemy_AI 등으로 지정


BP_Enemy_AI 를 더블클릭하여 에디터를 연다


에디터 왼쪽 컴포넌트 패널에서 Mesh 선택, 우측 [디테일] 뷰 / Mesh / Skeletal Mesh 항목에 Game/ AnimStarterPack/UE4_Mannequin/Mesh/SK_Mannequin 선택

그 위에 있는 Animation / Animation Mode : Use Animation Asset 선택, Anim to Play : Idle_Rifle_Hip 선택, 툴바에서 [저장], [컴파일]


위와같이 설정하면 지정된 애니메이션이 뷰포트에서도 실행되고 있는 것을 확인할 수 있다


뷰포트 상의 캐릭터가 Capsule Component 의 위치와 일치하도록 캐릭터를 이동툴로 내려서 조정하고 캐릭터가 X축을 향하도록 회전툴을 사용하여 90도 회전한다


아래처럼 이미 AI Controller Class 항목에 AIController으로 설정된 상태이기 때문에 이 클래스에서는 AI 기능(Pawn Sensing, AI Move To 등)을 사용할 수가 있다.


컴포넌트 패널에서 CapsuleComponent 를 선택하고 우측 [디테일] 뷰 / Collision / 콜리전프리셋 : BlockAll 으로 설정

이벤트 항목에서 OnComponent Hit 의 초록색 버튼을 누른다


이벤트 그래프를 다음과 같이 작성한다. 캐릭터가 발사체(FirstPersonProjectile)를 맞으면 죽는 것처럼 쓰러지는 애님메이션(Death_Ironsights_1)이 실행되는 내용이다


지금까지 작성된 BP_Enem_AI 블루프린트를 CB에서 드래그하여 뷰포트에 배치하고 게임을 실행한 후 일인칭 캐릭터가 총을 조준하여 발사하도록 마우스 왼쪽 버튼을 누르면 적 캐릭터에 명중하면 쓰러지는 애니메이션이 실행되는 것을 확인할 수 있다



Posted by cwisky