private BoneTreeView CreateBoneTreeView(List <BoneInfo> rootBoneInfos, TreeViewState treeViewState) { var treeView = new BoneTreeView(treeViewState); var currentId = 0; var root = new BoneTreeElement { Id = ++currentId, Name = "Bones" }; for (int i = 0; i < rootBoneInfos.Count(); i++) { root.AddChild(BoneInfoToBoneTreeView(rootBoneInfos[i], ref currentId)); } treeView.Setup(new List <BoneTreeElement> { root }.ToArray()); return(treeView); }
private void OnGUI() { using (var check = new EditorGUI.ChangeCheckScope()) { avatar = EditorGUILayout.ObjectField( "avatar", avatar, typeof(GameObject), true ) as GameObject; if (check.changed && avatar != null) { rootBoneList = GetRootBoneInfos(avatar); boneCount = GetAvatarBoneCount(avatar, true); treeView = CreateBoneTreeView(rootBoneList, treeViewState); saveFolder = GetAvatarFbxPath(avatar); } } if (avatar != null && rootBoneList != null) { using (new EditorGUILayout.VerticalScope(GUI.skin.box)) { if (treeView != null) { treeView.OnGUI(EditorGUILayout.GetControlRect(false, position.height - 120)); } } } EditorGUILayout.LabelField("BoneCount", boneCount.ToString()); using (new EditorGUILayout.HorizontalScope()) { EditorGUILayout.LabelField("Mesh SaveFolder", saveFolder); if (GUILayout.Button("Select Folder", GUILayout.Width(100))) { saveFolder = EditorUtility.OpenFolderPanel("Select saved folder", saveFolder, ""); var match = Regex.Match(saveFolder, @"Assets/.*"); saveFolder = match.Value + "/"; if (saveFolder == "/") { saveFolder = "Assets/"; } } } duplicateAvatar = EditorGUILayout.ToggleLeft("Copy Avatar", duplicateAvatar); EditorGUILayout.Space(); using (new EditorGUI.DisabledScope(avatar == null)) { if (GUILayout.Button("Delete Bones")) { var boneList = ConvertBoneTreeToBoneList(rootBoneList); if (duplicateAvatar) { var name = avatar.name + "_deleteBones"; avatar = Instantiate(avatar); avatar.name = name; var copyBoneList = ConvertBoneTreeToBoneList(GetRootBoneInfos(avatar)); // copyBoneListにboneListのdeletedの選択状態をコピーする for (int index = 0; index < boneList.Count(); index++) { if (boneList[index].deleted) { copyBoneList[index].deleted = true; } } boneList = copyBoneList; } var deleteBoneList = boneList.Where(x => x.deleted).ToList(); DeleteAvatarBones(ref avatar, ref deleteBoneList); // 削除後のボーンをGUIに反映 rootBoneList = GetRootBoneInfos(avatar); boneCount = GetAvatarBoneCount(avatar, true); treeView = CreateBoneTreeView(rootBoneList, treeViewState); } } }