public Vector3[] source; // 元頂点, source_position #endregion Fields #region Methods // SkinScriptの配列を子供の表情から探して拾ってくる MMDSkinsScript[] GetSkinScripts() { // 表情のスクリプトを拾ってくる var scripts = new MMDSkinsScript[transform.GetChildCount()]; for (int i = 0; i < scripts.Length; i++) scripts[i] = transform.GetChild(i).GetComponent<MMDSkinsScript>(); return scripts; }
// SkinScriptの配列を子供の表情から探して拾ってくる MMDSkinsScript[] GetSkinScripts() { // 表情のスクリプトを拾ってくる var scripts = new MMDSkinsScript[transform.GetChildCount()]; for (int i = 0; i < scripts.Length; i++) { scripts[i] = transform.GetChild(i).GetComponent <MMDSkinsScript>(); } return(scripts); }
/// <summary> /// 初回処理 /// </summary> public void Awake() { children_ = new List <Transform> [Enum.GetValues(typeof(MMDSkinsScript.SkinType)).Length]; for (int i = 0, i_max = children_.Length; i < i_max; ++i) { children_[i] = new List <Transform>(); } //子登録 foreach (Transform child in Selection.activeTransform) { MMDSkinsScript skins = child.GetComponent <MMDSkinsScript>(); children_[(int)skins.skinType].Add(child); } }
// モーフ情報(頂点インデックス、モーフ先頂点など)を記録する void AssignMorphVectorsForSkin(PMD.PMDFormat.SkinData data, PMD.PMDFormat.VertexList vtxs, MMDSkinsScript script) { uint count = data.skin_vert_count; int[] indices = new int[count]; Vector3[] morph_target = new Vector3[count]; for (int i = 0; i < count; i++) { // ここで設定する indices[i] = (int)data.skin_vert_data[i].skin_vert_index; // モーフ先 - 元頂点 //morph_target[i] = (data.skin_vert_data[i].skin_vert_pos - vtxs.vertex[indices[i]].pos).normalized; //morph_target[i] = data.skin_vert_data[i].skin_vert_pos - vtxs.vertex[indices[i]].pos; morph_target[i] = data.skin_vert_data[i].skin_vert_pos * scale_; } // スクリプトに記憶させる script.morphTarget = morph_target; script.targetIndices = indices; switch (data.skin_type) { case 0: script.skinType = MMDSkinsScript.SkinType.Base; script.gameObject.name = "base"; break; case 1: script.skinType = MMDSkinsScript.SkinType.EyeBrow; break; case 2: script.skinType = MMDSkinsScript.SkinType.Eye; break; case 3: script.skinType = MMDSkinsScript.SkinType.Lip; break; case 4: script.skinType = MMDSkinsScript.SkinType.Other; break; } }
// モーフ情報(頂点インデックス、モーフ先頂点など)を記録する void AssignMorphVectorsForSkin(PMD.PMDFormat.SkinData data, PMD.PMDFormat.VertexList vtxs, MMDSkinsScript script) { uint count = data.skin_vert_count; int[] indices = new int[count]; Vector3[] morph_target = new Vector3[count]; for (int i = 0; i < count; i++) { // ここで設定する indices[i] = (int)data.skin_vert_data[i].skin_vert_index; // モーフ先 - 元頂点 //morph_target[i] = (data.skin_vert_data[i].skin_vert_pos - vtxs.vertex[indices[i]].pos).normalized; //morph_target[i] = data.skin_vert_data[i].skin_vert_pos - vtxs.vertex[indices[i]].pos; morph_target[i] = data.skin_vert_data[i].skin_vert_pos; } // スクリプトに記憶させる script.morphTarget = morph_target; script.targetIndices = indices; switch (data.skin_type) { case 0: script.skinType = MMDSkinsScript.SkinType.Base; script.gameObject.name = "base"; break; case 1: script.skinType = MMDSkinsScript.SkinType.EyeBrow; break; case 2: script.skinType = MMDSkinsScript.SkinType.Eye; break; case 3: script.skinType = MMDSkinsScript.SkinType.Lip; break; case 4: script.skinType = MMDSkinsScript.SkinType.Other; break; } }