본문 바로가기

프로그래밍/Unity

[Unity] AssetDatabase


AssetDatabase


using UnityEditor;



메뉴 설정


선택된 에셋 처리 : Selection 클래스


[MenuItem("Assets/Test/Function")]

public static  void Function()

{

// 선택된 오브젝트, 여러개 선택시 처음 선택한 에셋이 activeObject 에 설정됨.

UnityEngine.Object object = Selection.activeObject;

int id = object.GetInstanceID();

Debug.Log( "id="+id+", name="+object.name);



// 여러개 선택시 아래 속성이나 함수를 사용

// Selection.assetGUIDs - 선택된 에셋들의 GUID 배열

// Selection.GetFilter() - 필터로 해당 클래스 오브젝트만 가져옴


UnityEngine.Object[] objects = Selection.GetFiltered(typeof(GameObject), SelectionMode.DeepAssets);

if( objects.Length > 1 )

{

EditorUtility.DisplayDialog("하나만!!!", "하나만 선택하세요", "확인" );

}

}


선택된 에셋의 path 얻기 : GetAssetPath

UnityEngine.Object object = Selection.activeObject;

string path = AssetDatabase.GetAssetPath(object);





에셋 검색 : FindAssets, GUIDToAssetPath

public static string[] FindAssets( string filter);

public static string[] FindAssets( string filter, string[] searchInFolders);


public static string GUIDToAssetPath( strin guid );



FindAssets : 특정 에셋의 guid를 찾음

filter : 검색필터

이름 : 단순 스트링 , "test asset" 과 같이 공백을 넣으면 각각의 이름으로 검색(확장자 제외)

라벨 : l: , "l:label" 특정 label 검색

타입 : t: , "t:type" 특정 type 검색, 모든 에셋은 t:Object 으로 검색


searchInFolder : 검색 폴더




ex) Assets/Test폴더에서 이름 test, 라벨 open, 텍스처인 에셋 찾기


string[] guids;

guids = AssetDatabase.FindAssets("test l:open t:texture2D", new[] {"Assets/Test"});

foreach( string guid in guids)

{

Debug.Log(AssetDatabase.GUIDToAssetPath(guid));


guid 를 path로 변환

string path = AssetDatabase.GUIDToAssetPath( guid);

}





에셋번들 설정된 에셋들의 path 얻기 : GetAssetPathsFromAssetBundle

string[]. assets;

assets = AssetDatabase.GetAssetPathsFromAssetBundle( "bundle-name" );





에셋 로드 : LoadAssetAtPath

매터리얼 읽어서 fbx 의 매터리얼 정보를 교체하는 예



[MenuItem("Assets/Test/AssignMaterial")]

static void AssignMaterial() 

{

Material mat = (Material) AssetDatabase.LoadAssetAtPath("Assets/MyMaterial.mat", typeof(Material));

GameObject fbx = (GameObject) AssetDatabase.LoadAssetAtPath("Asset/test.fbx", typeof(GameObject));


// fbx 의 하위 요소 및 렌더러 찾기

GameObject child = fbx.GetComponentInChildren<Transform>().Find("ChildObject").gameObject;

Renderer renderer = child.GetComponent<MeshRenderer>();

renderer.sharedMaterial = mat;

}




에셋 생성 : prefab 생성

위의 읽어들인 fbx 오브젝트를 prefab으로 추가하고, prefab의 매터리얼 수정


[MenuItem("Assets/Test/CreatePrefab")]

static void CreatePrefab()

{

Material mat = (Material) AssetDatabase.LoadAssetAtPath("Assets/MyMaterial.mat", typeof(Material));

GameObject fbx = (GameObject) AssetDatabase.LoadAssetAtPath("Asset/test.fbx", typeof(GameObject));


// prefab

string prefab = "Assets/Prefabs/Sample.prefab";

AssetDatabase.CreateFolder("Assets", "Prefabs");

AssetDatabase.DeleteAsset( prefab );


GameObject prefab = PrefabUtility.CreatePrefab( prefab, fbx );

GameObject child = prefab.GetComponentInChildren<Transform>().Find("ChildObject").gameObject;

Renderer renderer = child.GetComponent<MeshRenderer>();

renderer.sharedMaterial = mat;

}



'프로그래밍 > Unity' 카테고리의 다른 글

[Unity] SteamVR 액션 설정  (0) 2018.11.05
[Unity] Post Process Stack v2  (0) 2018.10.31
[Unity] AR Foundation Package  (0) 2018.09.20
[Unity] 유니티용 DLL  (0) 2018.09.18
[Unity] VR 환경 끄거나 켜기  (0) 2018.09.14
[Unity] AssetBundle  (0) 2018.08.24
[unity3d] 서피스 쉐이더 정리  (1) 2018.06.26
[Unity] Mesh 생성 및 변경  (0) 2011.06.24
[Unity] 인스펙터에 UI 추가하기  (0) 2011.06.15
2D를 위한 Plane 생성  (0) 2011.05.30