Playables API
Playables API는 유니티에서 제공하는 기능 중 하나이다.
유니티 공식 문서에서는 Playables를 다음과 같이 설명하고 있다.
Plyable API는 트리 구조로 데이터 소스를 구성하며 도구, 효과 또는 기타 게임플레이 메커니즘을 만드는 방법을 제공합니다.
이 트리형 구조를 사용해 여러 데이터 소스를 블렌딩/수정하고 단일 출력을 통해 재생할 수 있습니다.
https://docs.unity3d.com/Manual/Playables.html
사용 이유
유니티는 Animator 시스템을 통해 애니메이션을 제어하고 블렌딩 할 수 있지만 애니메이터의 상태 머신에 종속되며 애니메이터 안에 데이터가 없다면 애니메이션을 재생할 수가 없다.
Playables는 Animator보다 유연하고 사용자 지정이 가능한 애니메이션 시스템을 설계할 수 있을 뿐만 아니라 다른 시스템 (Audio, Cinemachine, 사용자 Playable)과의 연계도 가능하다는 장점이 있다.
예를 들어, 애니메이터가 Animation Clip을 재생하려면 노드끼리 트랜지션을 연결해주거나, 코드에서 직접 클립 이름을 찾아 실행해야 하지만 Playables 시스템을 사용하면 내가 원하는 애니메이션 클립을 PlayableGraph에 전달하기만 해 준다면 자유롭게 사용이 가능하다.
수많은 동작이 있는 게임이나 컷씬에 활용하기 용이할 것이다.
사용 방법
Playables는 기본적으로 트리 형태의 구조를 사용하며 최상위 노드에는 Playable Graph가 있다.
각각의 노드는 다수의 Input과 Output으로 구성되며 Playable 구조체 데이터를 받는다.
Playable Graph는 PlayableGraph.Create(); 로 생성할 수 있으며, 객체가 제거될 때 PlayableGraph.Destory()를 호출해 반드시 메모리에서 해제해 줘야 한다.
Playable Animation은 보통 다음과 같은 구조체들을 사용한다.
AnimatorControllerPlayable
AnimationLayerMixerPlayable
AnimationMixerPlayble
AnimationClipPlayable
AnimationPlayableOutput
기본적인 사용 방법은 다음과 같다.
var playable = PlayableGraph.Create();
var output = AnimationPlayableOutput.Create(playable, "Animation", animator);
var mixer = AnimationPlayableMixer.Create(playable, 2); //몇 개의 인풋을 받을지
var clip1 = AnimationPlayableClip.Create(playable, clip1);
var clip2 = AnimationPlayableClip.Create(playable, clip2);
mixer.ConnectInput(0, clip1, 0);
mixer.ConnectInput(1, clip2, 0);
mixer.SetInputWeight(0, 0.5f);
mixer.SetInputWeight(1, 0.5f);
out.SetSourcePlayable(mixer);
playable.Play();
이렇게 하면 두 개의 클립이 0.5씩 블렌딩되어 실행된다.
LayerMixer를 통해 레이어를 나누고 Avatar Mask를 적용시키는 것 역시 가능하며
AnimatorControllerPlayable을 통해 유니티 애니메이터와의 블렌딩 역시 가능하다.
어이어이 순찌 믿고 있었다구??? 오늘은 양이 늘어났잖아!! 매우 훌륭해!!