/// <summary>
        /// モーションの再生を開始する。
        /// </summary>
        /// <param name="type">モーションの種類</param>
        /// <param name="motion">モーション</param>
        /// <param name="loop_enabled">ループが使えるなら有効化する。</param>
        /// <returns></returns>
        public CubismMotionQueueEntry StartMotion(MotionType type, ICubismMotion motion, bool loop_enabled = false)
        {
            switch (type)
            {
            case MotionType.Base:
                return(BaseMotionManager.StartMotion(motion, loop_enabled));

            case MotionType.Expression:
                return(ExpressionMotionManager.StartMotion(motion, loop_enabled));

            case MotionType.Effect:
                return(EffectMotionManager.StartMotion(motion, loop_enabled));

            default:
                return(null);
            }
        }
        /// <summary>
        /// モデルを更新する。
        /// モーション、ポーズなども更新される。
        /// </summary>
        /// <param name="elapsed_seconds">前回の更新時刻からの経過時間[秒]</param>
        public void Update(double elapsed_seconds)
        {
            if (elapsed_seconds < 0.0)
            {
                throw new ArgumentException();
            }

            // モーションを更新する
            // ベースモーションの更新後は、次の更新のために表情やエフェクトの影響を受ける前のパラメータを保存しておく
            Model.RestoreSavedParameters();
            BaseMotionManager.Update(elapsed_seconds);
            Model.SaveParameters();
            ExpressionMotionManager.Update(elapsed_seconds);
            EffectMotionManager.Update(elapsed_seconds);

            if (PoseController != null)
            {
                PoseController.UpdateParameters(elapsed_seconds);
            }

            Model.Update();
        }