
이번 시간에는 애니메이션을 적용하고, 사용하는 방법에 대해 배웠다.
BluePrint로 배울 때도 복잡했었는데, cpp로 하니 좀 쉬운감이 없지않아 있었다.
오늘은 이동 애니메이션을 중점으로 배웠다.
처음에 애니메이션을 추가하기 전, 언리얼의 애니메이션은 Mesh안에 있는 Anim Class로 돌아간다. Anim Class는 Anim Instance를 상속받기 때문에 Anim Instance의 기능들을 사용할 수 있다. 그리고 Animation을 코드로 연결하는 것보다 비주얼 적으로 보면서 작업하는것이 좋아 이번 것은 블럭으로 애니메이션을 적용했다.
Idle 애니메이션부터 연결했다. Idle을 연결하니 전보다 확실히 자연스러워 졌다.
근데 실행했을 때 한 번 idle이 실행되고 멈추는 상황이 있었는데, 이 경우에는 Animation에 Loop가 꺼져있기 때문이였다.

무언가 반복적으로 동작해야하는 것들은 모두 Loop를 켜주었다.
Idle을 넣고, 앞과 뒤로 움직이는 애니메이션을 연결해주었다.

각각 Forward와 Backward로 이름을 변경해주었다.

언리얼도 내가 유니티에서 본것과 같이 애니메이션을 FSM구조로 확립해놓았는데, FSM이란 유한 상태 머신으로써, 어떤 상태에 따른 동작을 수행하기 위한 디자인 패턴! 이라고 할 수 있다.
이 사진 처럼!
다음에는 FSM에서 상태에 따른 동작의 이동인 Transition을 작업해야했다.
캐릭터가 어느 방향으로 움직이나를 판단하고 그에 따라 값을 전달하여 값에 따라 움직이는 애니메이션을 달리 해야했다.
근데 여기서 문제점이 있었는데, 애니메이션에 변수를 받아서 구동시켜야 하는데 우리가 일반적으로 생성한 Animation Bluprint에는 이런 기능이 없었다.
변수를 추가하고 그것을 활용할 수 없었기에, cpp을 사용하여 해결하였다.
객체지향의 특징 중 하나인 상속을 활용하여 이 문제를 해결할 수 있었는데, Animation Bluprint는 사진에서 보다싶이 Anim Instance를 상속받고 있다.

이는 이 클래스가 Anim Instance의 기능을 사용하고 있다는 것이 되는데, 그러면 Anim Instance를 상속받는 나의 클래스를 새로 만들어 상속받게하면 Anim Instance의 기능을 모두 사용할 수 있되, 내가 원하는 기능을 추가하여 구동시킬 수 있다.

이러한 해결방안으로 Animation을 캐릭터의 움직임 방향에 따라 동작시킬 수 있었다.
내가 만든 새로운 애니메이션 클래스는 Anim Instance를 상속받고, 현재 나의 캐릭터를 받아와서 돌려준다.

내가 소유한 폰을 얻어온 후 Player로 캐스팅해주었고,

여기서 전방 벡터, 우방 벡터, 움직이는 힘을 받아와서 이 들을 내적해준 뒤 값에 넣어주었다.

이렇게 값을 넣어주게 되면, 앞뒤로 움직이는 값과 좌우로 움직이는 값이 나오게 되는데, 이것을 FSM그래프로 그려보게 되면 굉장히 그래프가 지저분해 보일 수 있었다.

그렇기에 Blend Animation을 사용하여 이 2가지 값과 5가지 애니메이션을 섞어주어 하나의 Blend된 애니메이션으로 만들어 보기에도 좋고 사용하기도 좋은 애니메이션을 동작시킬 수 있었다.
그런데, 본디 게임이라면, 걷는 것만 있는것이 아닌 달리는 것또한 있어야한다.
그렇기에 달리는 Animation을 추가하여 속도에 따른 동작을 설정해주고,
전 시간에서 계속 했던 Input과정을 Left Shift를 누르게 되면 현재 캐릭터의 Movement를 가져와 MaxWalkSpeed를 변경해주었다.

600과 200으로
이런식으로 해주게되면 달리는 모션까지 동작가능해진다.
언리얼 내에 FSM으로 짜인 Animation의 사용법을 알게되었다.
cpp의 가장 중요한 점인 상속을 사용하여 나만의 기능을 추가한 것을 다시 상속받게하여 기능을 추가할 수 있다는 점을 배웠다.