Ejemplo n.º 1
0
        /// <summary>
        /// モデルのパラメータを更新する。
        /// </summary>
        public void Update()
        {
            // 現在のパラメータ設定値をコアに戻す
            Marshal.Copy(ParameterValues, 0, CubismCore.CsmGetParameterValues(ModelPtr), ParameterCount);
            Marshal.Copy(PartOpacities, 0, CubismCore.CsmGetPartOpacities(ModelPtr), PartCount);

            // 次のパラメータを計算する
            CubismCore.CsmUpdateModel(ModelPtr);

            // 新しいパラメータ設定値をコアから読み出す
            Marshal.Copy(CubismCore.CsmGetParameterValues(ModelPtr), ParameterValues, 0, ParameterCount);
            Marshal.Copy(CubismCore.CsmGetPartOpacities(ModelPtr), PartOpacities, 0, PartCount);

            // Drawableの情報をコアから読み出す
            UpdateDrawables();

            // 動的フラグをクリアする
            CubismCore.CsmResetDrawableDynamicFlags(ModelPtr);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// コアからパーツ情報を読み出す。
        /// </summary>
        private void InitializeParts()
        {
            int count = CubismCore.CsmGetPartCount(ModelPtr);

            if (count < 0)
            {
                throw new ArgumentOutOfRangeException();
            }

            // パーツの不透明度を取得する
            PartOpacities = IntPtrToFloatArray(CubismCore.CsmGetPartOpacities(ModelPtr), count);

            // パーツIDを取得し、IDマネージャを作成する
            string[] id_name_list = IntPtrToStringArray(CubismCore.CsmGetPartIds(ModelPtr), count);
            PartManager = new CubismIdManager <CubismPart>(count);
            for (int index = 0; index < count; index++)
            {
                var id = new CubismPart(id_name_list[index], index, PartOpacities);
                PartManager.RegisterId(id);
            }
        }