/* * 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); } }
/* * ボーンを移動する前に実行される * 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); } } }
//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(); } } }
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; } }