public class LODChange : MonoBehaviour
{
    [MenuItem("Component/LOD/Set Default LOD Range", false, 0)]
    static void DoSetDefaultLODRange()
    {
        var list = Selection.GetFiltered<GameObject>(SelectionMode.TopLevel);
        foreach (var go in list)
        {
            var d = go.GetComponent<LODGroup>();
            if (null != d)
            {
                var lods = d.GetLODs();
                lods[0].screenRelativeTransitionHeight = 0.05f;
                lods[1].screenRelativeTransitionHeight = 0.01f;
                d.SetLODs(lods);
                PrefabUtility.RecordPrefabInstancePropertyModifications(d);
            }
        }
    }
}

 

일단 소스코드를 보자. 코드는 new script로 새 스크립트 만든다음 붙여넣기 하면 된다.

컴파일하면 유니티 에디터 위에 Component/LOD/Set ~ 라는 메뉴가 생긴다. [MenuItem()] 에서 보이는 것처럼 말이다.

내용을 대충보면 Selection.Getfilterd 이므로 하이어라키에서 선택된 놈들 중 GameObject인걸 가져오는데 Toplevel 즉 자식은 제외하고 부모만 가져오겠다는걸로 보인다.

foreach 문을 돌면서 가져온 gameObject의 원하는 컴포넌트를 원하는 대로 수정해서 프리팹이면 수정내역을 저장하겠다 이런 말인것 같다. 

 

사용법: 바꾸고싶은 게임오브젝트를 다중선택 한 후 메뉴를 클릭하면 된다.

 

아주 간단한 코드지만, 아주 많은 gameObject를 한번에 바꾸고싶을때 일일이 노가다하지 않아도 되어 상당히 유용하게 쓰일수 있겠다.

 

https://forum.unity.com/threads/editing-multiple-lod-prefabs-at-once.257156/

 

 

+ Recent posts