📖 학습 목표
- 유니티 애니메이터 컨트롤러에서 일반 노드(Node)의 애니메이션 클립을 변경합니다.
- Has Exit Time을 이용하여 자신만의 애니메이션 루프를 생성합니다.
- Blend Tree 노드에서 애니메이션 클립을 추가하고 수정합니다.
- 자신만의 캐릭터를 골라 씬에 배치하여 애니메이션을 재생합니다.
📒 과정
0. Scene 열기
- 프로젝트 폴더 내 Scenes폴더 안에 있는 "8. Animation"을 엽니다.
- 이번 강의에서는 /Assets/Characters 폴더 내에 "Ai Movement"와 "Dance Loop" 두 파일을 사용합니다.
1. 일반 노드 클립
- Scene의 중앙에서 춤을 추는 캐릭터의 애니메이션을 변경합니다.
- /Assets/Characters 폴더 내에 "Dance Loop" 파일을 엽니다. (권장)
- 또는 새로운 애니메이터 컨트롤러 파일을 생성하여 사용합니다.
· 일반 노드 생성
- 애니메이터 컨트롤러에 새로운 애니메이션 클립을 재생하기 위한 노드를 생성합니다.
- 애니메이터 컨트롤러의 빈 공간을 클릭한 후 Create Stat에서 Empty를 클릭합니다.
- "New State"라는 이름으로 새로운 노드가 생성되었습니다.
· 일반 노드 제거
- 기존의 노드를 제거하기 위해서는 노드를 우클릭하여 Delete를 클릭합니다.
· 일반 노드 애니메이션 클립 설정(또는 변경)
- 일반 노드의 애니메이션 클립을 설정하기 위해서는 일반 노드를 클릭한 후 Inspector에서 Motion 속성을 변경합니다.
- 나중에 헷갈리지 않기위해 노드의 이름 "New State"라는 이름을 적절한 이름으로 바꿔줍니다.
2. 트랜지션
- 트랜지션(Transition)은 현재 재생 중인 애니메이션 상태에서 다른 애니메이션 상태로 전환할 때 사용됩니다.
- "Set as Layer Default State"에 대해 다루고, 일반 트랜지션도 다룹니다.
· Set as Layer Default State
- "Set as Layer Default State"은 해당 노드를 애니메이터 컨트롤러에서 가장 먼저 실행하는 "Default"로 설정하는 기능입니다.
- 주황색으로 표현되어있는 트랜지션과 노드가 Default로 설정되어 있는 노드입니다.
- 주황색이 아닌(Default가 아닌) 노드를 우클릭한 후 "Set as Layer Default State"를 눌러 Default로 변경합니다.
- 그 후 Play를 하면 이 노드가 가장 먼저 실행되는것을 볼 수 있습니다.
- 새로 설정된 "New State"라는 노드가 Default 상태가 되어 이 애니메이션 노드가 재생되고 있습니다.
- 현재 이 노드에는 다른 노드로 이동하는 트랜지션이 없기에 하나의 노드가 반복하고 있습니다.
- 이 노드를 다른 노드로 트랜지션하여 다른 애니메이션을 재생하도록 합니다.
· 다른 노드로 트랜지션
- 기존의 노드를 포함하여 다른 애니메이션들이 순환하도록 붉은 방향대로 트랜지션을 설정하도록 하겠습니다.
- 노란색 점선 트랜지션은 제거하여 새로운 노드로 트랜지션이 이어지도록 합니다.
- 트랜지션 제거는 우클릭을 하여 "Delete"가 없기에 트랜지션을 클릭하여 키보드에서 [Delete] 키를 눌러 제거합니다.
- 일반적으로 생성한 트랜지션은 Has Exit Time이 활성화되어 있어 자동으로 다음 애니메이션 노드로 넘어갑니다.
3. Blend Tree 노드
- Blend Tree는 파라미터로 제어하며, 스크립트를 이용하여 제어하기에 이미 스크립트가 작성되어 있는 애니메이터 컨트롤러에서 수정하여 실습합니다.
- /Assets/Characters 폴더 내에 "Ai Movement" 파일을 엽니다.
- "Move"와 "Greetings" 모두 Blend Tree Node입니다.
- "Move"는 캐릭터가 이동할 때 이동하는 속도(MovementSpeed)에 따라 블렌드 됩니다.
- "Greetings"는 플레이어 캐릭터가 다른 캐릭터에 닿으면 닿은 캐릭터는 플레이어를 향해 인사 애니메이션을 재생합니다. 인사 애니메이션 블렌드는 랜덤 한 값(GreetingsIndex)으로 블렌딩 됩니다.
· Blend Tree 노드에 애니메이션 클립 추가
- Blend Tree 노드로 들어갑니다.
- Blend Tree를 클릭합니다.
- 우측 Inspector에서 Motions에 [+] 버튼을 눌러 Add Motion Field를 누릅니다.
- 새로 생성된 클립에 원하는 클립을 설정합니다.
- 클립을 설정하는 방식은 일반 노드에서 재생할 클립을 설정하는 것과 동일합니다.
· Blend Tree 노드에서 애니메이션 클립 제거
- Blend Tree에서 삭제하고 싶은 선택한 클립을 Motions에서 좌측의 [=]을 클릭합니다.
- 우측 하단의 [-] 버튼을 클릭하여 제거합니다.
· Blend Tree의 모션 블렌딩 값 변경
- BlendTree는 파라미터인 Threshold의 값에 따라 블렌딩 되어 여러 가지 애니메이션이 재생된다고 배웠습니다.
- 직접 Threshold 값을 변경하여 애니메이션을 블렌딩 해보도록 하겠습니다.
현재 "Move" Blend Tree 노드는 "MovementSpeed" 파라미터를 사용합니다.
이 파라미터의 값은 캐릭터의 이동속도에 따라 0~5 범위로 변경됩니다.
- Threshold를 직접 설정하기 위해서는 "Automate Thresholds"를 해제해야 합니다.
- 예시로 Walking의 Threshold 값을 5로 설정하여 최대 속도로 이동시 Walking 애니메이션이 재생되도록 하였습니다.
4. 컴포넌트
- 캐릭터 모델에 애니메이션을 재생하기 위해서는 캐릭터 모델에 "Animator" 컴포넌트를 추가해야 합니다.
- "Animator" 컴포넌트에 "Animator Controller" 파일을 등록해 애니메이션을 재생할 수 있도록 알려줘야 합니다.
- "Animator Controller"의 파라미터를 제어하기 위한 스크립트 컴포넌트를 추가할 수도 있습니다.
· 캐릭터 모델을 Scene에 추가
- Mixamo에서 다운로드한 캐릭터를 Project 폴더에서 Scene으로 드래그 앤 드롭으로 추가합니다.
- /Assets/Models/에 미리 다운로드한 캐릭터 모델이 있습니다.
· 캐릭터 모델의 "Animator" 컴포넌트에 "Animator Controller" 등록
- "Animator" 컴포넌트에 함께 작업한 애니메이터 컨트롤러(Animator Controller)를 등록하여 애니메이션을 제어하도록 해야 합니다.
- 이 캐릭터는 제자리에서 춤을 추도록(일반 노드 실습에서 만든 Dance Loop) 하겠습니다.
- 캐릭터 모델을 클릭하면 일반적으로 "Animator" 컴포넌트가 추가되어 있습니다.
- "Controller" 속성을 클릭한 후 의도한 대로 "Dance Loop" 컨트롤러를 선택합니다.
- Play 모드에서 결과를 확인합니다.
❔ 번외
1. 발생할 수 있는 오류
· 파라미터를 찾을 수 없음
- 스크립트가 "Animator" 컴포넌트의 "Animator Controller"의 파라미터를 변경하고자 할 때 해당 파라미터가 없는 경우 콘솔(Console)에서 다음과 같은 경고가 발생합니다.
· T-Pose Glitch
T-Pose Glitch는 비디오 게임에서 종종 발생하는 버그 혹은 그리치의 일종입니다. 이 그리치는 캐릭터의 모델이 T-자세로 고정되어 있는 현상을 의미합니다.
T-자세는 사람이 두 팔을 옆으로 펴고 다리를 모으는 자세로, 알파벳 'T'와 비슷한 모양을 형성합니다. 게임에서 캐릭터의 움직임과 애니메이션은 프로그래밍과 모델링을 통해 제어되는데, 때로는 예기치 않은 버그나 오류로 인해 캐릭터 모델이 T-자세로 고정되는 경우가 발생합니다.
T-Pose Glitch는 보통 게임 플레이에 직접적인 영향을 미치지는 않지만, 시각적으로 웃긴 모습으로 인해 유저들 사이에서 인기를 얻는 경우가 있습니다. 이러한 버그는 게임 개발자들이 테스트 과정에서 놓치기 쉬운 작은 문제로 발생할 수 있으며, 게임 패치나 업데이트를 통해 수정되는 경우가 많습니다.
T-Pose Glitch는 주로 3D 캐릭터 모델링과 애니메이션 관련 기술적인 문제로 인해 발생할 수 있으며, 게임이나 플랫폼에 따라 발생 빈도와 형태는 다를 수 있습니다.
- 캐릭터의 애니메이션이 재생되지 않아 T-Pose(T자로 서 있는 형태)가 지속되는 형태
- 유니티에서는 Animator Controller가 없는 상태에서 오브젝트를 이동시킬 때 발생할 수 있습니다.
- 또는 Animator Controller가 있음에도 불구하고 특정 상황에 조건에 의한 트랜지션이 작동하지 않아 발생합니다. (코드가 심하게 꼬여있는 경우 발생할 수 있음)
📋 학습 완료
- 애니메이터 컨트롤러에서 노드의 생성과 제거를 다뤘습니다.
- 일반 노드의 클립을 변경하여 원하는 애니메이션으로 재생하였습니다.
- Blend Tree 노드에서 애니메이션 클립을 추가하고 수정하였습니다.
- Blend Tree 노드에서 Threshold를 변경하여 애니메이션을 적절하게 블렌딩 하였습니다.
- 직접 캐릭터 모델을 Scene에 배치하고 애니메이터에 컨트롤러를 적용하였습니다.
'unity etc. > lecture' 카테고리의 다른 글
[유니티] 골프 게임 제작 실습 (0) | 2023.06.19 |
---|---|
[유니티] 캐릭터 애니메이션 - Mixamo 캐릭터 (0) | 2023.06.19 |
[유니티] 캐릭터 애니메이션 - Mixamo 애니메이션 (0) | 2023.06.19 |
[유니티] 캐릭터 애니메이션 - 애니메이터 컨트롤러 (0) | 2023.06.19 |
[유니티] 인터렉티브 콘텐츠 제작 실습 (0) | 2023.06.19 |