using UnityEngine; using UnityEditor; using System; public class UpdateSkinnedMeshWindow : EditorWindow { [MenuItem("Window/Update Skinned Mesh Bones")] public static void OpenWindow() { var window = GetWindow(); window.titleContent = new GUIContent("Skin Updater"); } private SkinnedMeshRenderer targetSkin; private SkinnedMeshRenderer sourceSkin; private void OnGUI() { sourceSkin = EditorGUILayout.ObjectField("Main Body", sourceSkin, typeof(SkinnedMeshRenderer), true) as SkinnedMeshRenderer; targetSkin = EditorGUILayout.ObjectField("Accessory", targetSkin, typeof(SkinnedMeshRenderer), true) as SkinnedMeshRenderer; GUI.enabled = (targetSkin != null && sourceSkin != null); if (targetSkin != null && sourceSkin != null) { if (GUILayout.Button("Update Skinned Mesh Renderer")) { Transform rootBone = sourceSkin.rootBone; Transform[] newBones = new Transform[targetSkin.bones.Length]; for (int i = 0; i < targetSkin.bones.Length; i++) { foreach (var newBone in rootBone.GetComponentsInChildren()) { if (newBone.name == targetSkin.bones[i].name) { newBones[i] = newBone; continue; } } } targetSkin.bones = newBones; targetSkin.rootBone = rootBone; targetSkin.probeAnchor = rootBone; targetSkin.transform.SetParent(rootBone.root); targetSkin.localBounds = sourceSkin.localBounds; } } } }