public void CrossFadeDirectly(float fadeLength, PlayMode mode = PlayMode.StopSameLayer)
        {
            if (_controller == null)
            {
                return;
            }
            if (_controller.ControllerMask != null && !_controller.ControllerMask.CanPlay(this))
            {
                return;
            }

            if (_clip is AnimationClip)
            {
                if (_state == null)
                {
                    //this.Dispose();
                    //throw new System.InvalidOperationException("This clip was unexpectedly destroyed, make sure the animation hasn't been destroyed, or another clip was added with the same name.");
                    return;
                }

                _state.weight    = _weight;
                _state.speed     = _speed * _controller.Speed;
                _state.layer     = _layer;
                _state.wrapMode  = _wrapMode;
                _state.blendMode = _blendMode;
                //_controller.CrossFadeInternal(_state.name, fadeLength, mode, _layer);
                _controller.CrossFadeInternal(_id, fadeLength, mode, _layer);
            }
            else
            {
                var state = (_clip as IScriptableAnimationClip).CreateState() ?? SPAnim.Null;
                state.Speed = _speed;
                state.Layer = _layer;
                if (_timeSupplier.IsCustom)
                {
                    state.TimeSupplier = _timeSupplier.TimeSupplier as ITimeSupplier;
                }
                state.CrossFade(fadeLength, QueueMode.PlayNow, mode);
            }
        }