Unity 항목 뷰를 표시하는 전체 계층의 Prefab 구조를 단순화하는 확장 편집

5892 단어 Unity

개시하다


Unity의 프로젝트 보기에서 2층만 표시하는 것은 좀 불편하다
프로젝트 뷰의 사전 제작을 선택하면 다른 편집 창에 모든 레벨을 표시하려고 합니다.
나는 3층 이상의 게임 대상 이름을 확인해 보았다.

프로젝트 보기에서 접두사를 선택한 다음

이번에 제작된 PrefabViewer 편집 창의 모든 계층이 자동으로 표시되는 곳

원래 예제법은 층이 깊어지지 않도록 하는 것이 가장 좋다.

컨디션


Unity 5.4.0f3

코드


using UnityEngine;
using UnityEditor;

public class PrefabViewer : EditorWindow {

    [MenuItem ("Window/PrefabViewer")]
    static void Show () 
    {
        EditorWindow.GetWindow<PrefabViewer>();
    }

    void OnGUI()
    {
        if( Selection.activeGameObject != null &&
            PrefabUtility.GetPrefabType(Selection.activeGameObject) == PrefabType.Prefab )
        {
            var root = PrefabUtility.FindRootGameObjectWithSameParentPrefab(Selection.activeGameObject);
            // Unity2017.2.1以上ではコメントアウトを外して代わりにこちらをご使用ください。
            // var root = PrefabUtility.FindPrefabRoot(Selection.activeGameObject);
            FoldOutRecursive(root.transform);
        }
        Repaint();
    }

    void FoldOutRecursive(Transform t)
    {
        EditorGUI.indentLevel++;
        EditorGUILayout.Foldout(true,t.name);
        foreach(Transform c in t)
        {
            FoldOutRecursive(c);
        }
        EditorGUI.indentLevel--;
    }
}

항목 보기에서만 미리 정의됨


PrefabUtility.GetPrefabType(Selection.activeGameObject) == PrefabType.Prefab
이에 비해 ProfabViewer에 표시될 수 있는 항목 보기에서만 미리 정의된
제한이 있다.
PrefabType 표현
https://docs.unity3d.com/ja/current/ScriptReference/PrefabType.html
그의 말에 의하면
PrefabType.ModelPrefab:3D 모델로 제작된 프리셋 가져오기
등, 그러나, 우선, 일반적인prefave만 있습니다.

도면 레벨 뷰의 축소


EditorGUILayout.Foldout
삼각형과 객체 이름을 표시할 수 있으므로 EditorGUI를 표시할 수 있습니다.indentLevel++를 통해 들여쓰기 레벨을 높인 후
그리는 동안 하위 Transform에 접근한 다음 호출합니다.
하위 단계를 그리면 들여쓰기 레벨이 한 단계 복원됩니다.(indentLevel--)
한 Transform에서foreach로 전화하면 그 아이의 Transform을 방문할 수 있습니다.

PrefabUtility.FindRootGameObjectWithSameParentPrefab


전위적인 부모를 없애다.
따라서 이 접두사의 두 번째 층(GameObject 접두사에서 Child1, Child2, Child3이라고 부른다)은
그리는 동안 부모 옵션도 선택됩니다.

추기다2018/03/01


Unity2017.2.1 이상
PrefabUtility.FindRootGameObjectWithSameParentPrefab
미리 정의된 인스턴스에 대해서만 유효한 결과가 반환되므로 Unity 2017.2.1 이상의 PrefabViewer에 제대로 표시되지 않습니다.

PrefabUtility.FindRootPrefab


이 방법은 실례든 자산이든 모두 사용할 수 있기 때문에 이걸로 대체하면 부모가 정확하게 선택할 수 있다.

총결산


미리 정의된 단계를 간단하게 표시할 수 있습니다.
그게 다야.

좋은 웹페이지 즐겨찾기