플레이어블 그래프 - Unity 매뉴얼
플레이어블 그래프
ScriptPlayable 및 PlayableBehaviour
플레이어블 그래프(Playable Graph)는 게임 오브젝트 또는 컴포넌트에 결속된 플레이어블 출력 세트를 정의합니다. 플레이어블 그래프는 플레이어블 세트와 각 플레이어블의 관계도 정의합니다. 예제는 그림 1을 참조하십시오.
플레이어블 그래프는 플레이어블과 플레이어블 출력의 수명 주기를 책임집니다. 플레이어블 그래프를 사용하여 플레이어블을 생성하고 연결하고 파괴할 수 있습니다.
그림 1: 플레이어블 그래프 샘플
그림 1에서 플레이어블 그래프를 표시할 때 이름을 간결하게 표시하기 위해 그래프 모드의 이름에서 “Playable”이라는 용어를 제거했습니다. 예를 들어 이름이 “AnimationClipPlayable”인 노드는 “AnimationClip”으로 표시되어 있습니다.
플레이어블은 IPlayable 인터페이스를 구현하는 C# 구조체이며, 다른 플레이어블과의 관계를 정의하는 데 사용됩니다. 이와 마찬가지로 플레이어블 출력은 IPlayableOutput을 구현하는 C# 구조체이며, 플레이어블 그래프의 출력을 정의하는 데 사용됩니다.
그림 2에서는 가장 일반적인 코어 플레이어블 타입을 확인할 수 있고, 그림 3에서는 코어 플레이어블 출력 타입을 확인할 수 있습니다.
그림 2: 코어 플레이어블 타입
그림 3: 코어 플레이어블 출력 타입
플레이어블 코어 타입과 플레이어블 출력 타입은 C# 구조체로 구현되어 메모리가 가비지 컬렉션에 할당되는 것을 방지합니다.
‘Playable’은 모든 플레이어블의 기본 타입입니다. 즉, 플레이어블을 항상 ‘Playable’에 아무런 문제없이 보낼 수 있습니다. 하지만 그 반대는 성립하지 않으며, ‘Playable’을 호환되지 않은 타입에 보내면 예외가 발생합니다. ‘Playable’로 플레이어블에서 실행할 수 있는 모든 기본 메서드도 정의할 수 있습니다. 특정 타입의 메서드를 사용하려면 플레이어블을 적절한 타입에 할당해야 합니다.
‘PlayableOutput’도 마찬가지로 모든 플레이어블 출력의 기본 타입이고, ‘PlayableOutput’으로 기본 메서드를 정의할 수 있습니다.
참고: Playable과 PlayableOutput은 메서드를 많이 노출하지 않습니다. 그 대신 ‘PlayableExtensions’ 및 ‘PlayableOutputExtensions’ 정적 클래스가 확장 메서드를 제공합니다.
모든 비추상적인 플레이어블에는 해당 타입의 플레이어블을 생성하는 공용 정적 메서드인 Create()가 있습니다. ‘Create()’ 메서드는 항상 PlayableGraph를 첫 번째 파라미터로 취하고, 해당 그래프가 새로 생성되는 플레이어블을 소유합니다. 일부 플레이어블 타입에는 추가 파라미터가 필요할 수 있습니다. 비추상적인 플레이어블 출력도 Create() 메서드를 노출합니다.
유효한 플레이어블 출력을 플레이어블에 연결해야 합니다. 플레이어블 출력이 플레이어블에 연결되지 않으면 플레이어블 출력은 아무런 일도 하지 않습니다. 플레이어블 출력을 플레이어블에 연결하려면 PlayableOutput.SetSourcePlayable() 메서드를 사용해야 합니다. 연결된 플레이어블은 해당 플레이어블 출력에 대해 플레이어블 트리의 루트 역할을 합니다.
두 플레이어블을 하나로 연결하려면 PlayableGraph.Connect() 메서드를 사용합니다. 일부 플레이어블에는 입력이 포함될 수 없습니다.
PlayableGraph.Create() 정적 메서드를 사용하여 PlayableGraph를 생성합니다.
PlayableGraph.Play() 메서드로 PlayableGraph를 재생합니다.
PlayableGraph.Stop() 메서드로 PlayableGraph의 재생을 중지합니다.
PlayableGraph.Evaluate() 메서드로 PlayableGraph의 상태를 특정 시간에 평가합니다.
PlayableGraph.Destroy() 메서드로 PlayableGraph를 수동으로 파괴합니다. 이 메서드는 PlayableGraph로 생성된 모든 플레이어블과 플레이어블 출력을 자동으로 파괴합니다. PlayableGraph를 파괴하려면 이 파괴 메서드를 수동으로 호출해야 합니다. 그렇지 않으면 Unity 에디터에서 오류 메시지가 나타납니다.