/// <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); } }
/// <summary> /// ストリームからポーズデータを読み込む。 /// </summary> /// <param name="stream">ストリーム</param> /// <param name="model">対象のモデル</param> public CubismPose(Stream stream, CubismModel model) { var json = CubismPoseJson.Create(stream); if (!double.IsNaN(json.FadeInTime) && (0.0 <= json.FadeInTime)) { FadeTimeSeconds = json.FadeInTime; } var part_groups = new List <PartData[]>(); foreach (var group_item in json.Groups) { var part_group = new List <PartData>(); foreach (var item in group_item) { CubismPart id = model.GetPart(item.Id); var part_data = new PartData(model, id); var linked_part_ids = new List <CubismPart>(); foreach (string linked_id_name in item.Link) { CubismPart linked_id = model.GetPart(linked_id_name); if (linked_id != null) { linked_part_ids.Add(linked_id); } } part_data.LinkedParts = linked_part_ids.ToArray(); part_group.Add(part_data); } part_groups.Add(part_group.ToArray()); } PartGroups = part_groups.ToArray(); Reset(); }
/// <summary> /// コンストラクタ /// </summary> /// <param name="model">初期化に使用するモデル</param> public PartData(CubismModel model, CubismPart part) { Part = part; Part.TargetOpacity = 1.0; LinkedParts = null; }