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 |