48 lines
2.1 KiB
C#
48 lines
2.1 KiB
C#
// 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<VRMSpringBoneColliderGroup>();
|
|
Transform[] copyBones = copyPrefab.GetComponentsInChildren<Transform>();
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|