Streamingle_URP/Assets/Scripts/Vrmtool/ColliderAutoSetup.cs

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}개의 스프링본에 설정되었습니다.");
}
}