프로그래밍/유니티
[유니티] 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
반응형