현재 프로젝트는 UnityChan을 사용하여 학습하고 있다. 받아놓은 UnityChan 에셋을 보면 Animations가 있다. 그 중 하나를 선택하고 Inspector창에서 Animation버튼을 클릭하면 Preview 씬에서 해당 애니메이션을 미리보기할 수 있다. 이때 만약 모델이 없어서 애니메이션이 보이지 않거나, 다른 모델이 뜬다면 아래와 같은 방법으로 UnityChan 모델을 사용한 미리보기를 볼 수 있다. ㄴ Preview씬은 마우스 스크롤을 통해 확대/축소, 마우스R을 누리고 회전하며 볼 수 있다.
이러한 움직임들을 Animation이라고 한다.
현재 Unity에서는 이전까지 사용하던 레거시 방식을 점차 폐지하고, Mecanim Animation으로 병합하여 사용하고 있다.
ㄴ 생성해준 PlayerAnimAnimator를 UnityChan의 Animator컴포넌트의 Controller로 넣어주고, 원하는 Animation을 Animator창에 드래그하여 넣어준다. ㄴ 실행해보면 wait 애니메이션이 바로 실행되는 것을 확인할 수 있다.
-> Entry와 연결된 애니메이션이 실행 초기 애니메이션이다!
ㄴ_moveToDest == true; 움직이고 있을 경우 달리는 애니메이션. 멈췄을 경우 WAIT 애니메이션이 출력되도록 함.
지금은 달리다가 딱 멈춰버려서 부자연스럽다. 자연스러운 변환으로 바꿔보자.
Mathf.Lerp(float a, float b, float t)
: a과 b 사이를 t로 선형 보간한다. (자연스러운 블렌딩): 애니메이터분들이 만들어준 모션 애니메이션과는 별도로 게임에 종속된 애니메이션 만들기! -> 수동으로 애니메이션 만들기
Animaition 창 열기 (ctrl + 6)
원하는 객체 선택 후 Animation 생성
CubeTest.anim으로 파일 생성
ㄴ 자동으로 애니메이터와 애니메이션 파일이 생성됨. ㄴ 자동으로 Cube2에 Animator컴포넌트와 Cube2 controller가 삽입되어 있는 것 확인
프로퍼티 추가 및 값 변경
ㄴ 실행하면 120프레임동안 x좌표가 0 -> 10으로 이동하는 애니메이션이 만들어졌다. ㄴ커브 그래프로도 조절할 수 있다
💡 녹화버튼을 활용해서 실시간으로 씬뷰에서 조절하면서 애니메이션 생성하기
연결된 Event를 콜백해줄 수 있도록 Cube2에 컴포넌트를 추가해줘야 한다.
public class CubeEventTest : MonoBehaviour
{
void TestEventCallback()
{
Debug.Log("Event Received!");
ㄴ 콜백할 메서드 연결
-> 지정해준 시점에 Event가 발생해서, Debug Log가 찍히는 것을 확인할 수 있다.
(ex. 검이 Enemy를 치는 순간에 event를 걸어서 피 튀기는 효과 혹은 HP 깎기 등의 기능을 구현할 수 있다.)
📄 참고자료
[인프런] C#과 유니티로 만드는 MMORPG 게임 개발 시리즈_Animation
Unity Mecanim Animation
Mathf.Lerp()