Esempio n. 1
0
        /// <summary>
        /// ストリームからモーションを生成する
        /// </summary>
        /// <param name="stream">ストリーム</param>
        /// <param name="setting_motion_item">CubismModelSettingJsonのこのモーションの設定</param>
        /// <param name="id_manager">IDマネージャー</param>
        public CubismMotion(Stream stream, CubismModelSettingJson.FileReferencesItem.MotionItem setting_motion_item, CubismModel model)
        {
            // モーションデータを読み込む
            var json = CubismMotionJson.Create(stream);

            Duration = json.Meta.Duration;
            CanLoop  = json.Meta.Loop;

            // 標準のフェード時間を取得する。
            // モデルのjsonファイルで指定されている値を優先的に適用するが、
            // 無かったらモーションのjsonファイルの値を使う。
            GlobalFadeInSeconds  = (setting_motion_item != null) ? setting_motion_item.FadeInTime : 0.0;
            GlobalFadeInSeconds  = !double.IsNaN(GlobalFadeInSeconds) ? GlobalFadeInSeconds : json.Meta.FadeInTime;
            GlobalFadeInSeconds  = !double.IsNaN(GlobalFadeInSeconds) ? GlobalFadeInSeconds : 0.0;
            GlobalFadeOutSeconds = (setting_motion_item != null) ? setting_motion_item.FadeOutTime : 0.0;
            GlobalFadeOutSeconds = !double.IsNaN(GlobalFadeOutSeconds) ? GlobalFadeOutSeconds : json.Meta.FadeOutTime;
            GlobalFadeOutSeconds = !double.IsNaN(GlobalFadeOutSeconds) ? GlobalFadeOutSeconds : 0.0;

            // モーションカーブを内部形式に変換する
            var curve_list = new List <CubismMotionCurve>();

            foreach (var item in json.Curves)
            {
                var curve = ParseCurve(item, model);
                if (curve == null)
                {
                    continue;
                }
                if (curve.Target == CubismMotionCurve.TargetType.Model)
                {
                    // ターゲットがモデルのとき、エフェクトIDが対象となる
                    // これらはパラメータや不透明度を対象としたカーブより先に処理しなければいけないため別に管理する
                    EffectCurves[curve.Effect] = curve;
                }
                else
                {
                    curve_list.Add(curve);
                }
            }
            Curves = curve_list.ToArray();

            // ユーザーデータを読み込む
            if ((json.UserData != null) && (json.Meta.UserDataCount == json.UserData.Length))
            {
                int userdata_count = json.Meta.UserDataCount;
                Events = new CubismMotionEvent[userdata_count];
                for (int index = 0; index < userdata_count; index++)
                {
                    var userdata = new CubismMotionEvent();
                    userdata.FireTime = json.UserData[index].Time;
                    userdata.Value    = json.UserData[index].Value;
                    Events[index]     = userdata;
                }
            }
            else
            {
                Events = new CubismMotionEvent[0];
            }
        }
Esempio n. 2
0
        /// <summary>
        /// ストリームから'.motion3.json'形式のモーションを読み込む。
        /// </summary>
        /// <param name="stream">ストリーム</param>
        /// <param name="motion_item">モデル設定ファイル中の設定値</param>
        /// <returns>モーション</returns>
        internal CubismMotion LoadMotion(Stream stream, CubismModelSettingJson.FileReferencesItem.MotionItem motion_item)
        {
            // モーションを作成する
            var motion = new CubismMotion(stream, motion_item, Model);

            // パラメータグループをエフェクトに適用する
            foreach (var parameter_group in ParameterGroups)
            {
                var effect_id = motion.GetEffect(parameter_group.Key);
                if (effect_id != null)
                {
                    motion.SetEffectParameters(effect_id, parameter_group.Value);
                }
            }

            return(motion);
        }