using UnityEngine; using UnityEditor; using VRM; using System.Collections.Generic; public class ColliderAutoSetup : EditorWindow { private GameObject springBoneObject; private GameObject avatarRoot; //[MenuItem("Tools/Spring Bone Collider Setup")] static void Init() { ColliderAutoSetup window = (ColliderAutoSetup)EditorWindow.GetWindow(typeof(ColliderAutoSetup)); window.Show(); } void OnGUI() { // ... 기존 코드 생략 ... EditorGUILayout.LabelField("스프링본 콜라이더 자동 설정", EditorStyles.boldLabel); EditorGUILayout.Space(); springBoneObject = (GameObject)EditorGUILayout.ObjectField( "스프링본이 있는 오브젝트", springBoneObject, typeof(GameObject), true); avatarRoot = (GameObject)EditorGUILayout.ObjectField( "아바타 루트 오브젝트", avatarRoot, typeof(GameObject), true); EditorGUILayout.Space(); if (GUILayout.Button("콜라이더 설정")) { SetupColliders(); } } void SetupColliders() { if (springBoneObject == null || avatarRoot == null) { EditorUtility.DisplayDialog("오류", "스프링본 오브젝트와 아바타 루트를 모두 지정해주세요.", "확인"); return; } // 스프링본 컴포넌트들 가져오기 VRMSpringBone[] springBones = springBoneObject.GetComponents(); if (springBones.Length == 0) { EditorUtility.DisplayDialog("오류", "선택한 오브젝트에 VRMSpringBone 컴포넌트가 없습니다.", "확인"); return; } // 아바타 루트 아래의 모든 콜라이더 그룹 찾기 VRMSpringBoneColliderGroup[] colliderGroups = avatarRoot.GetComponentsInChildren(true); // 각 스프링본 컴포넌트에 콜라이더 그룹 설정 Undo.RecordObjects(springBones, "Setup Spring Bone Colliders"); foreach (var springBone in springBones) { springBone.ColliderGroups = colliderGroups; } EditorUtility.SetDirty(springBoneObject); Debug.Log($"콜라이더 설정 완료: {colliderGroups.Length}개의 콜라이더 그룹이 {springBones.Length}개의 스프링본에 설정되었습니다."); } }