/// <param name="fileName">ストリームを表すファイル名。マップへの登録用。</param>
        /// <param name="stream">ストリーム。</param>
        /// <param name="ignoreParent">すべての親を無視するか否か</param>
        /// <returns>モーションプロバイダ</returns>
        public モーション ストリームからモーションを追加する(string fileName, Stream stream, bool ignoreParent)
        {
            // MMDモーションを生成
            モーション motion = new MMDモーション(stream, ignoreParent);

            // 終了イベントを登録
            motion.モーションが終了した += motion_MotionFinished;

            // モーションリストに追加。
            モーションリスト.Add(new KeyValuePair <string, モーション>(fileName, motion));
            モーションリストが更新された?.Invoke(this, new EventArgs());

            return(motion);
        }
        /// <summary>
        ///     モーションをファイルから生成して返す。
        ///     生成されたモーションは、このインスタンスの <see cref="モーションリスト"/> に追加される。
        /// </summary>
        public モーション ファイルからモーションを生成し追加する(string ファイルパス, bool すべての親を無視する)
        {
            モーション motion;


            // 拡張子に基づいてモーションを生成。

            var 拡張子 = Path.GetExtension(ファイルパス);

            if (String.Compare(拡張子, ".vmd", true) == 0)
            {
                // VMD ファイルから
                motion = new MMDモーション(ファイルパス, すべての親を無視する);
            }
            else if (String.Compare(拡張子, ".vme", true) == 0)
            {
                // VME ファイルから
                motion = new MMDモーションforVME(ファイルパス, すべての親を無視する);
            }
            else
            {
                throw new Exception("ファイルが不適切です!");
            }

            // モーションをスキニングに割り当てる
            motion.モーションをアタッチする(_スキニング.ボーン配列);

            // 終了イベントを登録
            motion.モーションが終了した += motion_MotionFinished;

            // モーションリストに追加。
            モーションリスト.Add(new KeyValuePair <string, モーション>(ファイルパス, motion));
            モーションリストが更新された?.Invoke(this, new EventArgs());

            return(motion);
        }