Beispiel #1
0
            /*
             * Setuper側の処理が終わったあとに実行される
             * SetuperExpandOptionから呼び出し
             */
            public void AfterSetuperProcess()
            {
                //不要なオブジェクトを削除
                if (isDeleteUnnecessaryObject)
                {
                    for (int i = 0; i < expandOption.unnecessary_objects.Length; i++)
                    {
                        Transform unnecessaryObject = PrefabData.GetAvatar().transform.Find(expandOption.unnecessary_objects[i]);
                        if (unnecessaryObject != null)
                        {
                            GameObject.DestroyImmediate(unnecessaryObject.gameObject);
                        }
                    }
                }

                if (expandOption.custom_options == null)
                {
                    return;
                }

                for (int i = 0; i < expandOption.custom_options.Length; i++)
                {
                    CustomOption customOption = expandOption.custom_options[i];
                    RunCustomOption(customOption);
                }
            }
Beispiel #2
0
            /*
             * ボーンを移動する前に実行される
             * SetuperExpandOptionから呼び出し
             */
            public void BeforeMoveArmature()
            {
                if (expandOption.original_bones == null)
                {
                    return;
                }
                for (int i = 0; i < expandOption.original_bones.Length; i++)
                {
                    OriginalBone originalBone = expandOption.original_bones[i];

                    Transform fromBone = PrefabData.GetCloth().transform.Find(originalBone.from);
                    Transform toBone   = PrefabData.GetAvatar().transform.Find(originalBone.to);

                    if (fromBone != null && toBone != null)
                    {
                        AppendIDToBone(fromBone);

                        fromBone.SetParent(toBone);
                    }
                }
            }
Beispiel #3
0
            //ExpandOptionのGUI処理
            private void OnCustomOptionGUI()
            {
                if (expandOption.custom_options == null)
                {
                    return;
                }

                for (int i = 0; i < expandOption.custom_options.Length; i++)
                {
                    CustomOption customOption = expandOption.custom_options[i];

                    //オプションが非表示の場合
                    if (customOption.is_not_visible_option)
                    {
                        return;
                    }

                    GUILayout.Space(4);

                    switch (customOption.option_type.ToLower())
                    {
                    case "toggle":
                        customOption.is_check = GUILayout.Toggle(customOption.is_check, I18N.Instance().Get(customOption.name));
                        break;

                    case "grid":
                        GUILayout.Label(I18N.Instance().Get(customOption.name));

                        //GUI用の文字列リストを作る
                        List <string> selectGridList = new List <string>();
                        //CustomOptionのgrid_listから名前を取り出し文字列リストに追加
                        for (int selectGridCount = 0; selectGridCount < customOption.grid_list.Length; selectGridCount++)
                        {
                            selectGridList.Add(I18N.Instance().Get(customOption.grid_list[selectGridCount].name));
                        }
                        //GUI表示。処理するときにはselect(index)を使ってCustomOptionのgrid_listから取り出す
                        customOption.select = GUILayout.SelectionGrid(customOption.select, selectGridList.ToArray(), 3);
                        break;
                    }

                    //適用ボタン表示のフィルター処理
                    bool filterPassed = false;

                    if (customOption.apply_filter != null && PrefabData.GetAvatar() != null)
                    {
                        for (int filterCount = 0; filterCount < customOption.apply_filter.Length; filterCount++)
                        {
                            Transform filterObject = PrefabData.GetAvatar().transform.Find(customOption.apply_filter[filterCount]);
                            if (filterObject != null)
                            {
                                filterPassed = true;
                            }
                        }
                    }

                    if (customOption.display_apply_button && filterPassed)
                    {
                        GUILayout.Space(4);
                        EditorGUILayout.BeginHorizontal();
                        GUILayout.FlexibleSpace();
                        if (GUILayout.Button(I18N.Instance().Get("option.button.apply") + ": " + I18N.Instance().Get(customOption.name), new GUILayoutOption[] {
                            GUILayout.MinWidth(200)
                        }))
                        {
                            RunCustomOption(customOption);
                        }
                        EditorGUILayout.EndHorizontal();
                    }
                }
            }
Beispiel #4
0
            public void ProcessCustomOption(String optionOperation, bool isCheck, String argument, String[] targetObjectList)
            {
                switch (optionOperation.ToUpper())
                {
                case "DELETE_OBJECT":
                    if (isCheck)
                    {
                        for (int i = 0; i < targetObjectList.Length; i++)
                        {
                            Transform target = PrefabData.GetAvatar().transform.Find(targetObjectList[i]);
                            if (target != null)
                            {
                                if (isDeleteIsEditorOnlyTag)
                                {
                                    target.gameObject.tag = "EditorOnly";
                                    target.gameObject.SetActive(false);
                                }
                                else
                                {
                                    GameObject.DestroyImmediate(target.gameObject);
                                }
                            }
                        }
                    }
                    break;

                case "NOT_DELETE_OBJECT":
                    if (!isCheck)
                    {
                        for (int i = 0; i < targetObjectList.Length; i++)
                        {
                            Transform target = PrefabData.GetAvatar().transform.Find(targetObjectList[i]);
                            if (target != null)
                            {
                                if (isDeleteUnnecessaryObject)
                                {
                                    target.tag = "EditorOnly";
                                    target.gameObject.SetActive(false);
                                }
                                else
                                {
                                    GameObject.DestroyImmediate(target.gameObject);
                                }
                            }
                        }
                    }
                    break;

                case "ENABLE_OBJECT":
                    if (isCheck)
                    {
                        for (int i = 0; i < targetObjectList.Length; i++)
                        {
                            Transform target = PrefabData.GetAvatar().transform.Find(targetObjectList[i]);
                            if (target != null)
                            {
                                target.gameObject.SetActive(true);
                            }
                        }
                    }
                    break;

                case "DISABLE_OBJECT":
                    if (isCheck)
                    {
                        for (int i = 0; i < targetObjectList.Length; i++)
                        {
                            Transform target = PrefabData.GetAvatar().transform.Find(targetObjectList[i]);
                            if (target != null)
                            {
                                target.gameObject.SetActive(false);
                            }
                        }
                    }
                    break;

                case "SET_MATERIAL":
                    if (isCheck)
                    {
                        string   assetsPath = Path.GetDirectoryName(clothPrefabParentPath) + "/";
                        Material material   = AssetDatabase.LoadAssetAtPath <Material>(assetsPath + argument);
                        if (material != null)
                        {
                            for (int i = 0; i < targetObjectList.Length; i++)
                            {
                                Transform target = PrefabData.GetAvatar().transform.Find(targetObjectList[i]);
                                if (target != null)
                                {
                                    SkinnedMeshRenderer meshRenderer = target.gameObject.GetComponent <SkinnedMeshRenderer>();
                                    if (meshRenderer != null)
                                    {
                                        meshRenderer.material = material;
                                    }
                                }
                            }
                        }
                    }
                    break;

                case "NONE":
                    break;
                }
            }
            //引数のCustomOptionをGUIで描画する
            private void OnCustomOptionGUI(CustomOption customOption)
            {
                if (!customOption.visible_option)
                {
                    return;
                }

                switch (customOption.option_type.ToLower())
                {
                case "toggle":
                    customOption.is_check = GUILayout.Toggle(customOption.is_check, " " + I18N.Instance().Get(customOption.name));
                    if (customOption.description != null && customOption.description != "")
                    {
                        GUIUtil.RenderLabel(I18N.Instance().Get(customOption.description));
                    }
                    break;

                case "grid":
                    GUILayout.Label(I18N.Instance().Get(customOption.name));
                    if (customOption.description != null && customOption.description != null)
                    {
                        GUIUtil.RenderLabel(I18N.Instance().Get(customOption.description));
                    }

                    //GUI用の文字列リストを作る
                    List <string> selectGridList = new List <string>();
                    //CustomOptionのgrid_listから名前を取り出し文字列リストに追加
                    for (int selectGridCount = 0; selectGridCount < customOption.grid_list.Length; selectGridCount++)
                    {
                        selectGridList.Add(I18N.Instance().Get(customOption.grid_list[selectGridCount].name));
                    }

                    //GUI表示。処理するときにはselect(index)を使ってCustomOptionのgrid_listから取り出す
                    customOption.select = GUILayout.SelectionGrid(customOption.select, selectGridList.ToArray(), 3);
                    GUILayout.Space(1);
                    break;
                }

                //適用ボタン表示のフィルター処理
                bool filterPassed = false;

                if (customOption.apply_filter != null && PrefabData.GetAvatar() != null)
                {
                    for (int filterCount = 0; filterCount < customOption.apply_filter.Length; filterCount++)
                    {
                        string filterObjectName = customOption.apply_filter[filterCount];

                        if (!customOption.apply_filter_is_avatar_object)
                        {
                            filterObjectName = AppendID(filterObjectName);
                        }

                        Transform filterObject = PrefabData.GetAvatar().transform.Find(filterObjectName);

                        if (filterObject != null)
                        {
                            filterPassed = true;
                        }
                    }
                }

                if (filterPassed)
                {
                    GUILayout.Space(4);
                    EditorGUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();
                    if (GUILayout.Button(I18N.Instance().Get("option.button.apply") + ": " + I18N.Instance().Get(customOption.name), new GUILayoutOption[] {
                        GUILayout.MinWidth(200)
                    }))
                    {
                        ProcessCustomOption(customOption);
                    }
                    EditorGUILayout.EndHorizontal();
                }

                GUILayout.Space(3);
            }
            private void ProcessCustomOperation(CustomOperation customOperation, bool isCheck)
            {
                switch (customOperation.operation_type.ToUpper())
                {
                case "DELETE_OBJECT":
                    if (!isCheck)
                    {
                        return;
                    }

                    for (int i = 0; i < customOperation.target_object_list.Length; i++)
                    {
                        string targetObjectName = customOperation.target_object_list[i];
                        if (!customOperation.is_avatar_object)
                        {
                            targetObjectName = AppendID(targetObjectName);
                        }

                        Transform target = PrefabData.GetAvatar().transform.Find(targetObjectName);
                        if (target == null)
                        {
                            return;
                        }
                        if (isDeleteIsEditorOnlyTag)
                        {
                            GameObjectUtil.SetEditorOnly(target.gameObject);
                        }
                        else
                        {
                            GameObject.DestroyImmediate(target.gameObject);
                        }
                    }
                    break;

                case "NOT_DELETE_OBJECT":
                    if (isCheck)
                    {
                        return;
                    }

                    for (int i = 0; i < customOperation.target_object_list.Length; i++)
                    {
                        string targetObjectName = customOperation.target_object_list[i];
                        if (!customOperation.is_avatar_object)
                        {
                            targetObjectName = AppendID(targetObjectName);
                        }

                        Transform target = PrefabData.GetAvatar().transform.Find(targetObjectName);
                        if (target == null)
                        {
                            return;
                        }
                        if (isDeleteIsEditorOnlyTag)
                        {
                            GameObjectUtil.SetEditorOnly(target.gameObject);
                        }
                        else
                        {
                            GameObject.DestroyImmediate(target.gameObject);
                        }
                    }
                    break;

                case "ENABLE_OBJECT":
                    if (!isCheck)
                    {
                        return;
                    }

                    for (int i = 0; i < customOperation.target_object_list.Length; i++)
                    {
                        string targetObjectName = customOperation.target_object_list[i];
                        if (!customOperation.is_avatar_object)
                        {
                            targetObjectName = AppendID(targetObjectName);
                        }

                        Transform target = PrefabData.GetAvatar().transform.Find(targetObjectName);
                        if (target != null)
                        {
                            target.gameObject.SetActive(true);
                        }
                    }
                    break;

                case "DISABLE_OBJECT":
                    if (!isCheck)
                    {
                        return;
                    }

                    for (int i = 0; i < customOperation.target_object_list.Length; i++)
                    {
                        string targetObjectName = customOperation.target_object_list[i];
                        if (!customOperation.is_avatar_object)
                        {
                            targetObjectName = AppendID(targetObjectName);
                        }

                        Transform target = PrefabData.GetAvatar().transform.Find(targetObjectName);
                        if (target != null)
                        {
                            target.gameObject.SetActive(false);
                        }
                    }
                    break;

                case "SET_MATERIAL":
                    if (!isCheck)
                    {
                        return;
                    }

                    string assetsPath = Path.GetDirectoryName(basePath) + "/";
                    string matPath    = FileUtil.GetPathFromRelative(assetsPath, customOperation.argument);
                    //AssetDatabase.LoadAssetAtPathは'C:example/'などのフルパスじゃなくて'Assets/Example'じゃないといけない
                    matPath = FileUtil.RemoveBasePath(matPath);
                    Material material = AssetDatabase.LoadAssetAtPath <Material>(matPath);

                    if (material != null)
                    {
                        for (int i = 0; i < customOperation.target_object_list.Length; i++)
                        {
                            string targetObjectName = customOperation.target_object_list[i];
                            if (!customOperation.is_avatar_object)
                            {
                                targetObjectName = AppendID(targetObjectName);
                            }

                            Transform target = PrefabData.GetAvatar().transform.Find(targetObjectName);
                            if (target != null)
                            {
                                SkinnedMeshRenderer meshRenderer = target.gameObject.GetComponent <SkinnedMeshRenderer>();
                                if (meshRenderer != null)
                                {
                                    meshRenderer.material = material;
                                }
                            }
                        }
                    }
                    break;

                //MoveObjectは服側を参照するため、IDを付ける必要はない
                case "MOVE_OBJECT":
                    if (!isCheck)
                    {
                        return;
                    }
                    //move_objectが無い、空の場合は何もしない
                    if (customOperation.move_object_list != null && customOperation.move_object_list.Length > 0)
                    {
                        for (int i = 0; i < customOperation.move_object_list.Length; i++)
                        {
                            MoveObject moveObject = customOperation.move_object_list[i];

                            //移動させるオブジェクト
                            Transform fromObject = PrefabData.GetCloth().transform.Find(moveObject.from);
                            //移動先のオブジェクト (移動先オブジェクトの子要素になる)
                            Transform toObject = PrefabData.GetAvatar().transform.Find(moveObject.to);

                            if (fromObject != null && toObject != null)
                            {
                                //そのオブジェクトと子オブジェクトにIDをつける
                                AppendIDToObject(fromObject);

                                fromObject.SetParent(toObject);
                            }
                        }
                    }
                    break;

                case "NONE":
                    break;
                }
            }