Пример #1
0
        public static PlayableGraph BuildPlayableGraph(Animator animator, IList <IRigLayer> layers, SyncSceneToStreamLayer syncSceneToStreamLayer)
        {
            string        graphName = animator.gameObject.transform.name + "_Rigs";
            PlayableGraph graph     = PlayableGraph.Create(graphName);

            graph.SetTimeUpdateMode(DirectorUpdateMode.GameTime);

            IEnumerable <PlayableChain> playableChains = BuildPlayables(animator, graph, layers, syncSceneToStreamLayer);

            foreach (var chain in playableChains)
            {
                if (!chain.IsValid())
                {
                    continue;
                }

                AnimationPlayableOutput output = AnimationPlayableOutput.Create(graph, String.Format("%1-Output", chain.name), animator);
                output.SetAnimationStreamSource(AnimationStreamSource.PreviousInputs);
                output.SetSortingOrder(k_AnimationOutputPriority);

                // Connect last rig playable to output
                output.SetSourcePlayable(chain.playables[chain.playables.Length - 1]);
            }

            return(graph);
        }
Пример #2
0
        public static IEnumerable <PlayableChain> BuildPlayables(Animator animator, PlayableGraph graph, IList <IRigLayer> layers, SyncSceneToStreamLayer syncSceneToStreamLayer)
        {
            var playableChains = new PlayableChain[layers.Count + 1];

            // Create all rig layers
            int index = 1;

            foreach (var layer in layers)
            {
                var chain = new PlayableChain();
                chain.name = layer.name;

                if (layer.Initialize(animator))
                {
                    chain.playables = BuildRigPlayables(graph, layer);
                }

                playableChains[index++] = chain;
            }

            // Create sync to stream job with all rig references
            if (syncSceneToStreamLayer.Initialize(animator, layers) && syncSceneToStreamLayer.IsValid())
            {
                var chain = new PlayableChain();

                chain.name      = "syncSceneToStream";
                chain.playables = new Playable[1] {
                    RigUtils.syncSceneToStreamBinder.CreatePlayable(graph, syncSceneToStreamLayer.job)
                };

                playableChains[0] = chain;
            }

            return(playableChains);
        }