表情の管理クラス
Inheritance: MonoBehaviour
Beispiel #1
0
    /// <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);
        }
    }
Beispiel #2
0
        // バインドポーズの作成
        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;
        }