70 lines
2.4 KiB
C#
70 lines
2.4 KiB
C#
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<VRMSpringBone>();
|
|
if (springBones.Length == 0)
|
|
{
|
|
EditorUtility.DisplayDialog("오류", "선택한 오브젝트에 VRMSpringBone 컴포넌트가 없습니다.", "확인");
|
|
return;
|
|
}
|
|
|
|
// 아바타 루트 아래의 모든 콜라이더 그룹 찾기
|
|
VRMSpringBoneColliderGroup[] colliderGroups = avatarRoot.GetComponentsInChildren<VRMSpringBoneColliderGroup>(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}개의 스프링본에 설정되었습니다.");
|
|
}
|
|
}
|