프로그래밍/유니티

[유니티] Hierarchy의 오브젝트 Path복사

갓똥 2022. 3. 9. 22:06
728x90
반응형

UI작업할 때 부모 Transform을 기준으로 자식을 찾아 원하는 오브젝트에 접근하여 작업을 했다.

근데 각 오브젝트의 Path가 바뀌어 수정할 일이 생길 수 있고 일일이 하드하게 path를 적긴 힘드니

변수를 만들어 path를 관리했다.

 

그런데 이 path가 예를들어, UI에 표기해야 될 것들을 생각해보면

골드, 보석, 레벨, 경험치, 힘, 민첩, 지능 등등의 텍스트

능력치, 장비, 강화, 스킬, 펫 등등의 버튼

슬라이더... 사운드... 등등의 아주 여러가지의 path를 가져와야 한다.

 

이 path를 한땀한땀 적긴 귀찮아서 처음에 우클릭 후 copy path를 하면 path가 복사되는 것을 만들었는데

이마저도 귀찮아 Hierarchy의 오브젝트를 클릭만 하면 알아서 path가 복사되는 것을 만들어 까먹을까봐 올린다.

 

public static class CopyPathMenuItem
{
    [MenuItem("GameObject/Copy Path")]
    private static void CopyPath()
    {
        var obj = Selection.activeGameObject;
 
        if (obj == null)
        {
            return;
        }
 
        var path = obj.name;
 
        while (obj.transform.parent != null)
        {
            obj = obj.transform.parent.gameObject;
            path = string.Format("/{0}/{1}", obj.name, path);
            path = path.Substring(1, path.Length - 1);
        }

        EditorGUIUtility.systemCopyBuffer = path;
    }
 
    [MenuItem("GameObject/Copy Path", true)]
    private static bool CopyPathValidation()
    {
        // We can only copy the path in case 1 object is selected
        return Selection.gameObjects.Length == 1;
    }
}
 
[InitializeOnLoadAttribute]
public static class CopyObjectPath
{
    static CopyObjectPath()
    {
        EditorApplication.hierarchyWindowItemOnGUI += OnHierarchy;
    }

    private static GameObject select = null;
    private static void OnHierarchy(int instanceid, Rect selectionrect)
    {
        var go = Selection.activeGameObject;
         
        if (go == null)
            return;

        if (select == go)
            return;

        select = go;
        var path = go.name;
 
        while (go.transform.parent != null)
        {
            go = go.transform.parent.gameObject;

            if (go.name.Contains("Canvas"))
                continue;
             
            path = string.Format("/{0}/{1}", go.name, path);
            path = path.Substring(1, path.Length - 1);
        }

        EditorGUIUtility.systemCopyBuffer = path;
    }
}

 

728x90
반응형