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
반응형
'프로그래밍 > 유니티' 카테고리의 다른 글
[유니티] 슬라이더 값이 0인데 이미지가 남아있을 때 (0) | 2022.08.04 |
---|---|
[유니티] 터치 이펙트 (Click Particle) (0) | 2022.07.12 |
[유니티] MonoSingleton (0) | 2022.01.14 |
[유니티] 롤 골드그래프를 만들어보자(4) - 최종 코드 (0) | 2021.08.12 |
[유니티] 롤 골드그래프를 만들어보자(3) - 그래프 내부 채우기 (2) | 2021.08.12 |