From c9b2d642b6e796400ae0a0016f2fb399213d4b4e Mon Sep 17 00:00:00 2001 From: Masataka SUMI Date: Mon, 3 Jun 2019 15:57:26 +0900 Subject: [PATCH] Add utility menu for VRMSpringBoneColliderGroup. --- .../VRMSpringBoneColliderGroupEditor.cs | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/Assets/VRM/UniVRM/Editor/SpringBone/VRMSpringBoneColliderGroupEditor.cs b/Assets/VRM/UniVRM/Editor/SpringBone/VRMSpringBoneColliderGroupEditor.cs index 8563008b4..89f5192fe 100644 --- a/Assets/VRM/UniVRM/Editor/SpringBone/VRMSpringBoneColliderGroupEditor.cs +++ b/Assets/VRM/UniVRM/Editor/SpringBone/VRMSpringBoneColliderGroupEditor.cs @@ -1,4 +1,5 @@ -using UnityEditor; +using System.Linq; +using UnityEditor; using UnityEngine; @@ -38,5 +39,43 @@ namespace VRM EditorUtility.SetDirty(m_target); } } + + [MenuItem("CONTEXT/VRMSpringBoneColliderGroup/X Mirror")] + private static void InvertOffsetX(MenuCommand command) + { + var target = command.context as VRMSpringBoneColliderGroup; + if (target == null) return; + + Undo.RecordObject(target, "X Mirror"); + + foreach (var sphereCollider in target.Colliders) + { + var offset = sphereCollider.Offset; + offset.x *= -1f; + sphereCollider.Offset = offset; + } + } + + [MenuItem("CONTEXT/VRMSpringBoneColliderGroup/Sort Colliders by Radius")] + private static void SortByRadius(MenuCommand command) + { + var target = command.context as VRMSpringBoneColliderGroup; + if (target == null) return; + + Undo.RecordObject(target, "Sort Colliders by Radius"); + + target.Colliders = target.Colliders.OrderBy(x => -x.Radius).ToArray(); + } + + [MenuItem("CONTEXT/VRMSpringBoneColliderGroup/Sort Colliders by Offset Y")] + private static void SortByOffsetY(MenuCommand command) + { + var target = command.context as VRMSpringBoneColliderGroup; + if (target == null) return; + + Undo.RecordObject(target, "Sort Colliders by Offset Y"); + + target.Colliders = target.Colliders.OrderBy(x => -x.Offset.y).ToArray(); + } } }