[Unity(C#)] Edtitor를 통한 대량 제거 구성 요소 확장

대량 제거 구성 요소


제가 자주 하는 건요.
이 녀석들은 Rigid body와 Box Collider가 필요 없어!누가 썼어!
이런 놈이야.
당연히 내가 썼지.
그렇지 않더라도 Asset의 Quad와 Cube를 대량으로 조합한 객체 등을 활용하려면
나는 이 구성 요소가 필요하지 않을 때가 있을 것이라고 생각한다.
이렇게 해서 구성 요소의 일회성 삭제를 실현하였다.
이번에는 제목대로 Edtitor 확장
버튼을 누르면 실행할 수 있다.

코드


이번에는 부모 대상에 추가된 스크립트로 자신의 하위 대상의 실현을 확인합니다.
따라서 Scene에 존재하는 모든 객체의 구성 요소를 한꺼번에 제거하는 것은 아닙니다.
어셈블리를 일괄 제거할 객체가 있는 상위 객체에 부착
using UnityEngine;
using UnityEditor;

public class RemoveComponentInChild : MonoBehaviour {

    [Header("削除したいコンポーネントを文字列で指定"),SerializeField]
    string componentName;

    //コンポーネントを取得して該当コンポーネントを削除
    void GetComAndDes()
    {
        Component[] components = GetComponentsInChildren<Component>();
        foreach(Component component in components)
        {
            if (component.GetType().Name == componentName)
            {
                DestroyImmediate(component);
            }
        }
    }

#if UNITY_EDITOR
    [CustomEditor(typeof(RemoveComponentInChild))]
    public class ExampleInspector : Editor
    {
        RemoveComponentInChild rootClass;

        private void OnEnable()
        {
            rootClass = target as RemoveComponentInChild;
        }

        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();

            if (GUILayout.Button("一括削除"))
            {
                // 押下時に実行したい処理
                rootClass.GetComAndDes();
            }

            serializedObject.Update();
            serializedObject.ApplyModifiedProperties();
        }
    }
#endif
}
아래쪽에서 하는 일.
① 하위 객체의 모든 구성 요소 가져오기
② 지정된 이름과 취득한 이름이 일치하는지 판정
③ 정합성 보장 시 삭제
하계.
    //コンポーネントを取得して該当コンポーネントを削除
    void GetComAndDes()
    {
        Component[] components = GetComponentsInChildren<Component>();
        foreach(Component component in components)
        {
            if (component.GetType().Name == componentName)
            {
                DestroyImmediate(component);
            }
        }
    }
참고로 Destroy Edtior Mode에서는 사용할 수 없습니다DestroyImmediate.
Inspector는 이렇습니다.

Shift로 선택하고 삭제하면 되잖아요.


말씀하신 대로
그러나 Shift의 경우 삭제할 구성 요소가 없는 객체를 선택하면 삭제할 수 없습니다.
그래서 잘 분리해서 쓰면 프로그래머처럼 될 것 같아서 좋아요.

참조 링크


GameObject의 모든 구성 요소 가져오기

좋은 웹페이지 즐겨찾기