/// <summary> /// Inspector描画 /// </summary> public override void OnInspectorGUI() { ExpressionManagerScript self = (ExpressionManagerScript)target; bool is_dirty = false; //mesh self.mesh = (Mesh)EditorGUILayout.ObjectField("Mesh", self.mesh, typeof(Mesh), false); //skin_script for (int i = 0, i_max = children_.Length; i < i_max; ++i) { if (MMDSkinsScript.SkinType.Base == (MMDSkinsScript.SkinType)i) { //Baseだったらスキップ continue; } //スキンツリータイトル string skin_name = ((MMDSkinsScript.SkinType)i).ToString(); skin_displays_[i] = EditorGUILayout.Foldout(skin_displays_[i], skin_name); //スキンツリー内部 if (skin_displays_[i]) { //このスキンを表示するなら GUIStyle style = new GUIStyle(); style.margin.left = 10; EditorGUILayout.BeginVertical(style); { //モーフオブジェクト走査 foreach (Transform child in children_[i]) { float value = child.localPosition.z; value = EditorGUILayout.Slider(child.name, value, 0.0f, 1.0f); if (child.localPosition.z != value) { //変更が掛かったなら //Undo登録 Undo.RegisterUndo(child, "Expression Change"); //Z位置更新 Vector3 position = child.localPosition; position.z = value; child.localPosition = position; //改変モーフオブジェクトのInspector更新 EditorUtility.SetDirty(child.transform); is_dirty = true; } } } EditorGUILayout.EndVertical(); } } if (is_dirty) { //更新が有ったなら //Inspector更新 EditorUtility.SetDirty(target); } }
// バインドポーズの作成 void BuildingBindpose(Mesh mesh, Material[] materials, GameObject[] bones) { // 行列とかトランスフォームとか Matrix4x4[] bindpose = new Matrix4x4[bones.Length]; Transform[] trans = new Transform[bones.Length]; for (int i = 0; i < bones.Length; i++) { trans[i] = bones[i].transform; bindpose[i] = bones[i].transform.worldToLocalMatrix; } // ここで本格的な適用 SkinnedMeshRenderer smr = root_game_object_.AddComponent <SkinnedMeshRenderer>() as SkinnedMeshRenderer; mesh.bindposes = bindpose; smr.sharedMesh = mesh; smr.bones = trans; smr.materials = materials; smr.receiveShadows = false; //影を受けない ExpressionManagerScript ems = root_game_object_.GetComponentInChildren <ExpressionManagerScript>(); ems.mesh = mesh; }