Exemple #1
0
        public void Initialize()
        {
            m_eventLayers = new List <EventLayerData>(4);
            m_mxmAnimator = GetComponent <MxMAnimator>();

            if (m_mxmAnimator == null)
            {
                Debug.LogError("Could not find MxMAnimator component, MxMEventLayers component disabled");
                enabled = false;
                return;
            }

            m_layerMixer = AnimationLayerMixerPlayable.Create(m_mxmAnimator.MxMPlayableGraph, 1);

            m_layerId   = m_mxmAnimator.AddLayer((Playable)m_layerMixer, 0f, false, null);
            m_baseLayer = m_mxmAnimator.GetLayer(m_layerId);
            m_mxmAnimator.SetLayerWeight(m_layerId, 1f);
        }
Exemple #2
0
        public void UpdatePhase2()
        {
            float highestWeight = 0f;

            for (int i = 0; i < m_eventLayers.Count; ++i)
            {
                EventLayerData eventLayer = m_eventLayers[i];

                float curTime = (float)eventLayer.ClipPlayable.GetTime();

                float age      = curTime - eventLayer.StartTime;
                float deathAge = eventLayer.EndTime - curTime;

                float weight = Mathf.Min(Mathf.Clamp01(age / eventLayer.BlendRate), Mathf.Clamp01(deathAge / eventLayer.BlendRate));

                if (weight > highestWeight)
                {
                    highestWeight = weight;
                }

                if (curTime >= eventLayer.EndTime)
                {
                    m_layerMixer.SetInputWeight(eventLayer.SlotId, 0f);
                    m_layerMixer.DisconnectInput(eventLayer.SlotId);
                    eventLayer.ClipPlayable.Destroy();
                    m_eventLayers.RemoveAt(i);
                    --i;
                }
                else if (Mathf.Abs(weight - eventLayer.Weight) > Mathf.Epsilon)
                {
                    eventLayer.Weight = weight;
                    m_eventLayers[i]  = eventLayer;
                    m_layerMixer.SetInputWeight(eventLayer.SlotId, weight);
                }
            }

            if (m_eventLayers.Count > 0)
            {
                m_mxmAnimator.SetLayerWeight(m_layerId, highestWeight);
            }
        }