// ColliderMoveTool.cs using System.Linq; using UnityEngine; using VRM; namespace Efitor { public class ColliderMoveTool : MonoBehaviour { public static void MoveColliders(GameObject originalPrefab, GameObject copyPrefab) { VRMSpringBoneColliderGroup[] originalColliderGroups = originalPrefab.GetComponentsInChildren(); Transform[] copyBones = copyPrefab.GetComponentsInChildren(); foreach (VRMSpringBoneColliderGroup originalColliderGroup in originalColliderGroups) { Transform correspondingCopyBone = FindCorrespondingBone(originalColliderGroup.transform.parent, copyBones); if (correspondingCopyBone != null) { // 원본 콜라이더 게임오브젝트를 복제 GameObject copiedCollider = GameObject.Instantiate(originalColliderGroup.gameObject); copiedCollider.name = originalColliderGroup.gameObject.name; // 복제된 콜라이더를 대상 본의 자식으로 설정 copiedCollider.transform.SetParent(correspondingCopyBone); // 원본의 로컬 Transform 값을 그대로 적용 copiedCollider.transform.localPosition = originalColliderGroup.transform.localPosition; copiedCollider.transform.localRotation = originalColliderGroup.transform.localRotation; copiedCollider.transform.localScale = originalColliderGroup.transform.localScale; Debug.Log($"Collider Group copied for: {correspondingCopyBone.name}"); } else { Debug.LogWarning("No corresponding bone found for: " + originalColliderGroup.transform.parent.name); } } } private static Transform FindCorrespondingBone(Transform originalBone, Transform[] copyBones) { return System.Array.Find(copyBones, bone => bone.name == originalBone.name); } } }