private void Start()
        {
            mixers = new List <AnimationLayerMixerPlayable>();
            for (var i = 0; i < dir.playableGraph.GetOutputCount(); i++)
            {
                var p = dir.playableGraph.GetRootPlayable(i);
                if (!p.IsValid())
                {
                    continue;
                }
                Debug.Log(p.GetPlayableType());
                Debug.Log("OUTPUT: " + i + " = " + p.GetPlayableType() + ", outputs: " + p.GetOutputCount() + ", inputs: " + p.GetInputCount());
                Traverse(p, mixers);
            }

            var arr = dir.playableAsset.outputs.ToArray();

            for (var i = 0; i < arr.Length; i++)
            {
                var entry = arr[i];

                if (entry.outputTargetType == typeof(Animator))
                {
                    var binding = dir.GetGenericBinding(entry.sourceObject);
                    var b2      = dir.GetReferenceValue(new PropertyName(entry.streamName), out var valid);
                    Debug.Log("BINDING: " + i + ", " + binding + ", " + b2 + " valid=" + valid + "  " + entry.streamName + " - " + entry.sourceObject +
                              ", " + binding);
                    boundAnimators.Add(binding as Animator);
                }
                else
                {
                    var binding = dir.GetGenericBinding(entry.sourceObject);
                    var b2      = dir.GetReferenceValue(new PropertyName(entry.streamName), out var valid);
                    Debug.Log("BINDING: " + i + " is " + entry.outputTargetType + " for " + b2 + ", " + entry.streamName + ", " + binding);
                }
            }

            if (InjectOnStart)
            {
                InjectMixers();
            }

            Debug.Log("-----------");
            if (TimelineUtilities.TryFindTimelinePlayable(dir.playableGraph, out var timeline))
            {
                Debug.Log(timeline.GetPlayableType() + ", " + timeline.GetType());
                if (TimelineUtilities.TryInjectMixer(dir, timeline, GetComponent <Animator>(), out var mixer))
                {
                    Debug.Log("INJECTED MIXER" + mixer);
                }
            }
        }
        // get the game object reference associated with this
        public static GameObject GetSceneGameObject(PlayableDirector director, TrackAsset asset)
        {
            if (director == null || asset == null)
                return null;

            asset = GetSceneReferenceTrack(asset);

            var gameObject = director.GetGenericBinding(asset) as GameObject;
            var component = director.GetGenericBinding(asset) as Component;
            if (component != null)
                gameObject = component.gameObject;
            return gameObject;
        }
Exemple #3
0
        public static Animator GetAnimator(TrackAsset asset, PlayableDirector director)
        {
            AnimationTrack animationTrack = asset as AnimationTrack;
            Animator       result;

            if (animationTrack != null && !animationTrack.isSubTrack)
            {
                Object genericBinding = director.GetGenericBinding(animationTrack);
                if (genericBinding == null)
                {
                    result = null;
                }
                else
                {
                    Animator   animator   = genericBinding as Animator;
                    GameObject gameObject = genericBinding as GameObject;
                    if (animator == null && gameObject != null)
                    {
                        animator = gameObject.GetComponent <Animator>();
                    }
                    result = animator;
                }
            }
            else
            {
                result = null;
            }
            return(result);
        }
    public void GenerateMoveClip(PlayableDirector director, int trackIndex)
    {
        List <CurvePoint> points = GetPointsInScene();

        if (points.Count <= 0)
        {
            return;
        }
        string        errorLog = "";
        TimelineAsset asset    = director.playableAsset as TimelineAsset;
        TrackAsset    track    = asset.GetOutputTrack(trackIndex);

        if (track == null)
        {
            errorLog = "Track Index Error";
        }
        if (!(track is RoleMoveTrack))
        {
            errorLog = "Track 类型错误,不是RoleMoveTrack";
        }
        if (string.IsNullOrEmpty(errorLog))
        {
            List <Vector3> pointsPos = points.Select(point => point.transform.position).ToList();
            TimelineClip   clip      = track.CreateDefaultClip();
            RoleMoveClip   moveclip  = clip.asset as RoleMoveClip;
            moveclip.points   = pointsPos;
            moveclip.roleData = director.GetGenericBinding(track) as RoleData;
        }
        else
        {
            Debug.LogError(errorLog);
        }
    }
Exemple #5
0
        internal Animator GetBinding(PlayableDirector director)
        {
            if (director == null)
            {
                return(null);
            }

            UnityEngine.Object key = this;
            if (isSubTrack)
            {
                key = parent;
            }

            UnityEngine.Object binding = null;
            if (director != null)
            {
                binding = director.GetGenericBinding(key);
            }

            Animator animator = null;

            if (binding != null) // the binding can be an animator or game object
            {
                animator = binding as Animator;
                var gameObject = binding as GameObject;
                if (animator == null && gameObject != null)
                {
                    animator = gameObject.GetComponent <Animator>();
                }
            }

            return(animator);
        }
Exemple #6
0
                private Material GetClipBoundMaterial()
                {
                    PlayableDirector   selectedDirector = TimelineEditor.inspectedDirector;
                    MaterialParamTrack track            = base.target as MaterialParamTrack;

                    if (selectedDirector != null && track != null)
                    {
                        ParentBindingTrack parentTrack = track.parent as ParentBindingTrack;

                        if (parentTrack != null)
                        {
                            Object binding = parentTrack.GetEditorBinding(selectedDirector);

                            if (binding is Material material)
                            {
                                return(material);
                            }
                        }
                        else
                        {
                            return(selectedDirector.GetGenericBinding(track) as Material);
                        }
                    }

                    return(null);
                }
Exemple #7
0
    private void Start()
    {
        if (!director)
        {
            if (GetComponent <PlayableDirector>())
            {
                director = GetComponent <PlayableDirector>();
            }
        }

        // 타임라인에 오브젝트 바인딩. Interact_Window.cs->Start() 참고.
        if (GameObject.FindWithTag("Player"))
        {
            GameObject player = GameObject.FindWithTag("Player");
            // 캐비닛에 들어가는 타임라인.
            TimelineAsset tmp = director.playableAsset as TimelineAsset;
            director.SetGenericBinding(tmp.GetOutputTrack(0), player);

            tmp = bossAndDoctor.playableAsset as TimelineAsset;
            // Interact_Window.cs에서 보스와닥터 타임라인에 플레이어 카메라를 할당을 하나, 만약으로 안되어 있을 경우.
            if (bossAndDoctor.GetGenericBinding(tmp.GetOutputTrack(2)) == null)
            {
                bossAndDoctor.SetGenericBinding(tmp.GetOutputTrack(2), player.GetComponentInChildren <Camera>().gameObject);
            }
        }
    }
        /**
         * <summary>Serialises appropriate GameObject values into a string.</summary>
         * <returns>The data, serialised as a string</returns>
         */
        public override string SaveData()
        {
            TimelineData timelineData = new TimelineData();

            timelineData.objectID      = constantID;
            timelineData.savePrevented = savePrevented;

                        #if UNITY_2017_1_OR_NEWER
            PlayableDirector director = GetComponent <PlayableDirector>();
            timelineData.isPlaying       = (director.state == PlayState.Playing);
            timelineData.currentTime     = director.time;
            timelineData.trackObjectData = "";
            timelineData.timelineAssetID = "";

            if (director.playableAsset != null)
            {
                TimelineAsset timeline = (TimelineAsset)director.playableAsset;

                if (timeline != null)
                {
                    if (saveTimelineAsset)
                    {
                        timelineData.timelineAssetID = AssetLoader.GetAssetInstanceID(timeline);
                    }

                    if (saveBindings)
                    {
                        int[] bindingIDs = new int[timeline.outputTrackCount];
                        for (int i = 0; i < bindingIDs.Length; i++)
                        {
                            TrackAsset trackAsset  = timeline.GetOutputTrack(i);
                            GameObject trackObject = director.GetGenericBinding(trackAsset) as GameObject;
                            bindingIDs[i] = 0;
                            if (trackObject != null)
                            {
                                ConstantID cIDComponent = trackObject.GetComponent <ConstantID>();
                                if (cIDComponent != null)
                                {
                                    bindingIDs[i] = cIDComponent.constantID;
                                }
                            }
                        }

                        for (int i = 0; i < bindingIDs.Length; i++)
                        {
                            timelineData.trackObjectData += bindingIDs[i].ToString();
                            if (i < (bindingIDs.Length - 1))
                            {
                                timelineData.trackObjectData += ",";
                            }
                        }
                    }
                }
            }
                        #else
            ACDebug.LogWarning("The 'Remember Director' component is only compatible with Unity 5.6 onward.", this);
                        #endif

            return(Serializer.SaveScriptData <TimelineData> (timelineData));
        }
Exemple #9
0
//----------------------------------------------------------------------------------------------------------------------

        protected override Playable CreateTrackMixerInternal(PlayableGraph graph, GameObject go, int inputCount)
        {
            InitTrackCurves();

            var mixer = ScriptPlayable <StreamingImageSequencePlayableMixer> .Create(graph, inputCount);

            PlayableDirector director = go.GetComponent <PlayableDirector>();

            m_trackMixer = mixer.GetBehaviour();

            if (director != null)
            {
                Object boundObject = director.GetGenericBinding(this);
                StreamingImageSequenceRenderer renderer = boundObject as StreamingImageSequenceRenderer;

                if (null == renderer)
                {
                    //no object bound to the track
                    m_trackMixer.Init(null, director, GetClips());
                }
                else
                {
                    m_trackMixer.Init(renderer.gameObject, director, GetClips());
                    renderer.Init();
                    m_trackMixer.SetRenderer(renderer);
                }
            }

            return(mixer);
        }
Exemple #10
0
        static GameObject GetBoundGameObject(TrackAsset parent, PlayableDirector associatedDirector)
        {
            if (parent == null || parent.Equals(null) || associatedDirector == null)
            {
                return(null);
            }

            var binding = associatedDirector.GetGenericBinding(parent);

            // We are the markerTrack and user did not set a binding, assume it's bound to PlayableDirector
            if (parent.timelineAsset.markerTrack == parent && binding == null)
            {
                return(associatedDirector.gameObject);
            }

            if (binding == null || binding.Equals(null))
            {
                return(null);
            }

            var boundGameObject = binding as GameObject;

            if (boundGameObject == null)
            {
                var boundComponent = binding as Component;
                if (boundComponent != null)
                {
                    boundGameObject = boundComponent.gameObject;
                }
            }

            return(boundGameObject);
        }
        internal static void DuplicateBindings(TrackAsset track, TrackAsset newTrack, PlayableDirector director)
        {
            var originalTracks = track.GetFlattenedChildTracks().Append(track);
            var newTracks      = newTrack.GetFlattenedChildTracks().Append(newTrack);
            var toBind         = new List <Tuple <TrackAsset, Object> >();

            // Collect all track bindings to duplicate
            var originalIt = originalTracks.GetEnumerator();
            var newIt      = newTracks.GetEnumerator();

            while (originalIt.MoveNext() && newIt.MoveNext())
            {
                var binding = director.GetGenericBinding(originalIt.Current);
                if (binding != null)
                {
                    toBind.Add(new Tuple <TrackAsset, Object>(newIt.Current, binding));
                }
            }

            //Only create Director undo if there are bindings to duplicate
            if (toBind.Count > 0)
            {
                TimelineUndo.PushUndo(TimelineEditor.inspectedDirector, L10n.Tr("Duplicate"));
            }

            //Assign bindings for all tracks after undo.
            foreach (var binding in toBind)
            {
                TimelineEditor.inspectedDirector.SetGenericBinding(binding.Item1, binding.Item2);
            }
        }
Exemple #12
0
        internal GameObject GetGameObjectBinding(PlayableDirector director)
        {
            if (director == null)
            {
                return(null);
            }

            var binding = director.GetGenericBinding(this);

            var gameObject = binding as GameObject;

            if (gameObject != null)
            {
                return(gameObject);
            }

            var comp = binding as Component;

            if (comp != null)
            {
                return(comp.gameObject);
            }

            return(null);
        }
Exemple #13
0
        public override void GatherProperties(PlayableDirector director, IPropertyCollector driver)
        {
            //
            // In this track, the following properties will be modified.
            //
            // - transform.position
            // - transform.rotation
            // - particleSystem.useAutoRandomSeed
            // - particleSystem.main.duration
            // - particleSystem.emission.rateOverTimeMultiplier
            // - particleSystem.emission.rateOverDistanceMultiplier
            //
            // Note that the serialized property names are a bit defferent from
            // their property name.
            //

            var ps = director.GetGenericBinding(this) as ParticleSystem;

            if (ps == null)
            {
                return;
            }

            var go = ps.gameObject;

            driver.AddFromName <Transform>(go, "m_LocalPosition");
            driver.AddFromName <Transform>(go, "m_LocalRotation");

            driver.AddFromName <ParticleSystem>(go, "lengthInSec");
            driver.AddFromName <ParticleSystem>(go, "autoRandomSeed");
            driver.AddFromName <ParticleSystem>(go, "randomSeed");

            driver.AddFromName <ParticleSystem>(go, "EmissionModule.rateOverTime.scalar");
            driver.AddFromName <ParticleSystem>(go, "EmissionModule.rateOverDistance.scalar");
        }
Exemple #14
0
        //得到轨道绑定对象的GameObject
        public GameObject GetObj(PlayableDirector Director, UnityEngine.Object sourceObject)
        {
            GameObject obj = null;

            UnityEngine.Object a = (UnityEngine.Object)Director.GetGenericBinding(sourceObject);
            if (a is GameObject)
            {
                obj = (GameObject)a;
            }
            else if (a is Graphic)
            {
                Graphic ui = (Graphic)a;
                obj = ui.rectTransform.gameObject;
            }
            else if (a is CinemachineBrain)
            {
                CinemachineBrain cina = (CinemachineBrain)a;
                obj = cina.gameObject;
            }
            else if (a is Component)
            {
                Component cina = (Component)a;
                obj = cina.gameObject;
            }
            return(obj);
        }
Exemple #15
0
        internal GameObject GetGameObjectBinding(PlayableDirector director)
        {
            GameObject result;

            if (director == null)
            {
                result = null;
            }
            else
            {
                Object     genericBinding = director.GetGenericBinding(this);
                GameObject gameObject     = genericBinding as GameObject;
                if (gameObject != null)
                {
                    result = gameObject;
                }
                else
                {
                    Component component = genericBinding as Component;
                    if (component != null)
                    {
                        result = component.gameObject;
                    }
                    else
                    {
                        result = null;
                    }
                }
            }
            return(result);
        }
    private void OnSkipClick(PlayableDirector director)
    {
        director.Stop();
        List <RoleData> loadedRoleData = new List <RoleData>();

        foreach (var binding in director.playableAsset.outputs)
        {
            if (binding.sourceObject is MYCinemachineTrack)
            {
                SetCinemachineTrackData(binding, director);
                continue;
            }

            UnityEngine.Object bindingObj = director.GetGenericBinding(binding.sourceObject);
            if (bindingObj != null && bindingObj is RoleData)
            {
                RoleData roledata = bindingObj as RoleData;
                if (!loadedRoleData.Contains(roledata))
                {
                    loadedRoleData.Add(roledata);
                    RoleObject role = roledata.Role as RoleObject;
                    if (role != null && role.gameObject != null && roledata.TargetPosWhenSkip != Vector3.zero)
                    {
                        role.gameObject.transform.position = roledata.TargetPosWhenSkip;
                    }
                }
            }
        }
    }
Exemple #17
0
    public override void GatherProperties(PlayableDirector director, IPropertyCollector driver)
    {
#if false
#if UNITY_EDITOR
        Light trackBinding = director.GetGenericBinding(this) as Light;
        if (trackBinding == null)
        {
            return;
        }

        var serializedObject = new UnityEditor.SerializedObject(trackBinding);
        var iterator         = serializedObject.GetIterator();
        while (iterator.NextVisible(true))
        {
            if (iterator.hasVisibleChildren)
            {
                continue;
            }

            driver.AddFromName <Light>(trackBinding.gameObject, iterator.propertyPath);
        }
#endif
#endif
        base.GatherProperties(director, driver);
    }
                private SkinnedMeshRenderer GetClipBoundSkinnedMeshRenderer()
                {
                    PlayableDirector           selectedDirector = TimelineEditor.inspectedDirector;
                    SkinnedMeshBlendshapeTrack track            = base.target as SkinnedMeshBlendshapeTrack;

                    if (selectedDirector != null && track != null)
                    {
                        ParentBindingTrack parentTrack = track.parent as ParentBindingTrack;

                        if (parentTrack != null)
                        {
                            Object binding = parentTrack.GetEditorBinding(selectedDirector);

                            if (binding is GameObject)
                            {
                                return(SkinnedMeshBlendshapeTrack.GetSkinnedMeshFromGameObject((GameObject)binding));
                            }
                            else if (binding is Transform)
                            {
                                return(SkinnedMeshBlendshapeTrack.GetSkinnedMeshFromGameObject(((Transform)binding).gameObject));
                            }
                        }
                        else
                        {
                            return(selectedDirector.GetGenericBinding(track) as SkinnedMeshRenderer);
                        }
                    }

                    return(null);
                }
        public static List <Object> CloneTrack(this PlayableDirector self, PlayableDirector dest, string trackName)
        {
            List <Object> toRemoveList        = new List <Object>();
            TimelineAsset sourceTimelineAsset = (TimelineAsset)self.playableAsset;
            TimelineAsset cloneTimelineAsset  = sourceTimelineAsset.CloneTrackAsset(trackName);

            dest.playableAsset = cloneTimelineAsset;
            toRemoveList.Add(cloneTimelineAsset);
            Object sourceBinding = self.GetGenericBinding(sourceTimelineAsset.GetTrackAsset(trackName));

            if (sourceBinding != null)
            {
                Object clone_binding;
                if (sourceBinding is Component c)
                {
                    GameObject cloneBindingGameObject = Object.Instantiate(c.gameObject);
                    cloneBindingGameObject.transform.CopyFrom(c.transform);
                    clone_binding = cloneBindingGameObject.GetComponent(c.GetType());
                    toRemoveList.Add(cloneBindingGameObject);
                }
                else
                {
                    clone_binding = Object.Instantiate(sourceBinding);
                    toRemoveList.Add(clone_binding);
                }

                clone_binding.name = StringUtilCat.RoundBrackets(StringConst.String_clone) + sourceBinding.name;
                dest.SetGenericBinding(cloneTimelineAsset.GetTrackAsset(trackName), clone_binding);
            }

            return(toRemoveList);
        }
Exemple #20
0
                private Animator GetClipBoundAnimator()
                {
                    PlayableDirector   selectedDirector = TimelineEditor.inspectedDirector;
                    AnimatorParamTrack track            = base.target as AnimatorParamTrack;

                    if (selectedDirector != null && track != null)
                    {
                        ParentBindingTrack parentTrack = track.parent as ParentBindingTrack;

                        if (parentTrack != null)
                        {
                            Object binding = parentTrack.GetEditorBinding(selectedDirector);

                            if (binding is GameObject)
                            {
                                return(AnimatorParamTrack.GetAnimatorFromGameObject((GameObject)binding));
                            }
                            else if (binding is Transform)
                            {
                                return(AnimatorParamTrack.GetAnimatorFromGameObject(((Transform)binding).gameObject));
                            }
                        }
                        else
                        {
                            return(selectedDirector.GetGenericBinding(track) as Animator);
                        }
                    }

                    return(null);
                }
        /**
         * <summary>Serialises appropriate GameObject values into a string.</summary>
         * <returns>The data, serialised as a string</returns>
         */
        public override string SaveData()
        {
            TimelineData timelineData = new TimelineData();

            timelineData.objectID      = constantID;
            timelineData.savePrevented = savePrevented;

            PlayableDirector director = GetComponent <PlayableDirector>();

            timelineData.isPlaying       = (director.state == PlayState.Playing);
            timelineData.currentTime     = director.time;
            timelineData.trackObjectData = string.Empty;
            timelineData.timelineAssetID = string.Empty;

            if (director.playableAsset != null)
            {
                                #if !ACIgnoreTimeline
                TimelineAsset timeline = (TimelineAsset)director.playableAsset;

                if (timeline != null)
                {
                    if (saveTimelineAsset)
                    {
                        timelineData.timelineAssetID = AssetLoader.GetAssetInstanceID(timeline);
                    }

                    if (saveBindings)
                    {
                        int[] bindingIDs = new int[timeline.outputTrackCount];
                        for (int i = 0; i < bindingIDs.Length; i++)
                        {
                            TrackAsset trackAsset  = timeline.GetOutputTrack(i);
                            GameObject trackObject = director.GetGenericBinding(trackAsset) as GameObject;
                            bindingIDs[i] = 0;
                            if (trackObject != null)
                            {
                                ConstantID cIDComponent = trackObject.GetComponent <ConstantID>();
                                if (cIDComponent != null)
                                {
                                    bindingIDs[i] = cIDComponent.constantID;
                                }
                            }
                        }

                        for (int i = 0; i < bindingIDs.Length; i++)
                        {
                            timelineData.trackObjectData += bindingIDs[i].ToString();
                            if (i < (bindingIDs.Length - 1))
                            {
                                timelineData.trackObjectData += ",";
                            }
                        }
                    }
                }
                                #endif
            }

            return(Serializer.SaveScriptData <TimelineData> (timelineData));
        }
Exemple #22
0
    protected override Playable CreatePlayable(PlayableGraph graph, GameObject go, TimelineClip clip)
    {
        RoleEffectClip   effectClip = clip.asset as RoleEffectClip;
        PlayableDirector director   = go.GetComponent <PlayableDirector>();

        effectClip.roleData = director.GetGenericBinding(this) as RoleData;
        return(base.CreatePlayable(graph, go, clip));
    }
        public override void OnInspectorGUI()
        {
            BoneFxAsset asset = target as BoneFxAsset;

            if (director == null)
            {
                director = GameObject.FindObjectOfType <PlayableDirector>();
            }
            EditorGUILayout.Space();
            prefabGo = EditorGUILayout.ObjectField("Fx Prefab", prefabGo, typeof(GameObject), true) as GameObject;
            if (prefabGo != null)
            {
                string path = AssetDatabase.GetAssetPath(prefabGo);
                asset.prefab = path.Replace("Assets/BundleRes/", string.Empty).Replace(".prefab", string.Empty);
                if (!path.Contains("BundleRes") || !path.EndsWith(".prefab"))
                {
                    EditorGUILayout.HelpBox("The fx that you selected is invalid", MessageType.Error);
                }
            }
            if (boneGo == null && !string.IsNullOrEmpty(asset.prefab))
            {
                string path = "Assets/BundleRes/" + asset.prefab + ".prefab";
                prefabGo = AssetDatabase.LoadAssetAtPath <GameObject>(path);
                if (prefabGo == null)
                {
                    EditorGUILayout.HelpBox("AssetPath is invalid", MessageType.Error);
                }
            }
            EditorGUILayout.LabelField(asset.prefab);
            boneGo = EditorGUILayout.ObjectField("Select Bone", boneGo, typeof(GameObject), true) as GameObject;
            EditorGUILayout.LabelField(asset.fxPath);
            if (boneGo != null)
            {
                asset.fxPath = GetRootFullPath(boneGo.transform);
                if (string.IsNullOrEmpty(asset.fxPath) || !asset.fxPath.StartsWith("root"))
                {
                    EditorGUILayout.HelpBox("Avatar bone transform is invalid", MessageType.Error);
                }
            }
            else if (!string.IsNullOrEmpty(asset.fxPath))
            {
                if (asset.track != null)
                {
                    var       binding = director.GetGenericBinding(asset.track);
                    Transform tf      = ExternalHelp.FetchAttachOfTrack(director, asset.track);
                    if (tf)
                    {
                        tf = tf.GetChild(0).Find(asset.fxPath);
                        if (tf)
                        {
                            boneGo = tf.gameObject;
                        }
                    }
                }
            }
            DrawTransform();
            PreviewFx();
        }
Exemple #24
0
        public override void GatherProperties(PlayableDirector director, IPropertyCollector driver)
        {
            SkeletonAnimation skeletonAnimation = (SkeletonAnimation)director.GetGenericBinding(this);

            if (skeletonAnimation != null)
            {
                driver.AddFromName <SkeletonAnimation>(skeletonAnimation.gameObject, "m_Enabled");
            }
        }
    protected override Playable CreatePlayable(PlayableGraph graph, GameObject go, TimelineClip clip)
    {
        ObjectScaleControlClip clipAsset = clip.asset as ObjectScaleControlClip;
        PlayableDirector       dirctor   = go.GetComponent <PlayableDirector>();
        var binding = dirctor.GetGenericBinding(this) as RoleData;

        clipAsset.role = binding;
        return(base.CreatePlayable(graph, go, clip));
    }
Exemple #26
0
        public override void GatherProperties(PlayableDirector director, IPropertyCollector driver)
        {
            SkeletonGraphic skeletonGraphic = (SkeletonGraphic)director.GetGenericBinding(this);

            if (skeletonGraphic != null)
            {
                driver.AddFromName <SkeletonGraphic>(skeletonGraphic.gameObject, "freeze");
            }
        }
Exemple #27
0
        public override void OnInspectorGUI()
        {
            var signal = target as Signal;

            if (signal == null)
            {
                return;
            }
            signal.name = GUILayout.TextField(signal.name);
            base.OnInspectorGUI();

            PlayableDirector inspectedDirector = TimelineEditor.inspectedDirector;

            if (inspectedDirector == null)
            {
                EditorGUILayout.HelpBox("Select Playable Director to setup signal response", MessageType.Info);
                return;
            }
            if (signal.parent == signal.parent.timelineAsset.markerTrack)
            {
                _boundGameObject = inspectedDirector.gameObject;
            }
            else
            {
                Object genericBinding = inspectedDirector.GetGenericBinding(signal.parent);
                if (genericBinding is GameObject gameObject)
                {
                    _boundGameObject = gameObject;
                }
                if (genericBinding is Component component)
                {
                    _boundGameObject = component.gameObject;
                }
            }
            if (_boundGameObject == null)
            {
                return;
            }

            SignalHandlerBase[] signalHandlers = _boundGameObject.GetComponents <SignalHandlerBase>()
                                                 .Where(handler => handler.SignalType.IsInstanceOfType(signal))
                                                 .ToArray();
            if (signalHandlers.Length == 0 && GUILayout.Button("Add Signal Handler"))
            {
                _boundGameObject.gameObject.AddComponent <SignalHandler>();
            }

            foreach (SignalHandlerBase signalHandler in signalHandlers)
            {
                EditorGUILayout.Separator();
                Editor editor = GetOrCreateEditor(signalHandler);
                if (DrawReceiverHeader(signalHandler))
                {
                    editor.OnInspectorGUI();
                }
            }
        }
        public override void GatherProperties(PlayableDirector director, IPropertyCollector driver)
        {
#if UNITY_EDITOR
            FacialExpressionTimeline trackBinding = director.GetGenericBinding(this) as FacialExpressionTimeline;
            if (trackBinding == null)
            {
                return;
            }
#endif
        }
Exemple #29
0
    protected override Playable CreatePlayable(PlayableGraph graph, GameObject go, TimelineClip clip)
    {
        PlayableDirector director = go.GetComponent <PlayableDirector>();
        RoleMoveClip     moveClip = clip.asset as RoleMoveClip;

        moveClip.roleData = (RoleData)director.GetGenericBinding(clip.parentTrack);
        Playable playable = base.CreatePlayable(graph, go, clip);

        return(playable);
    }
Exemple #30
0
        public override void GatherProperties(PlayableDirector director, IPropertyCollector driver)
        {
            var binding = director.GetGenericBinding(this) as Transform;

            if (binding == null)
            {
                return;
            }
            driver.AddFromName <Transform>(binding.gameObject, "m_LocalPosition");
            base.GatherProperties(director, driver);
        }