// 어셈블리로부터 클래스 이름 문자열을 보내 System.Type을 얻는다. public static Type GetTypeFromAssemblies( string TypeName ) { // null 반환 없이 Type이 얻어진다면 얻어진 그대로 반환. var type = Type.GetType( TypeName ); if( type != null ) return type; // 프로젝트에 분명히 포함된 클래스임에도 불구하고 Type이 찾아지지 않는다면, // 실행중인 어셈블리를 모두 탐색 하면서 그 안에 찾고자 하는 Type이 있는지 검사. var currentAssembly = System.Reflection.Assembly.GetExecutingAssembly(); var referencedAssemblies = currentAssembly.GetReferencedAssemblies(); foreach( var assemblyName in referencedAssemblies ) { var assembly = System.Reflection.Assembly.Load( assemblyName ); if( assembly != null ) { // 찾았다 요놈!!! type = assembly.GetType( TypeName ); if( type != null ) return type; } } // 못 찾았음;;; 클래스 이름이 틀렸던가, 아니면 알 수 없는 문제 때문이겠지... return null; }
가끔씩 Unity3D 환경에서 툴 개발을 하다보면 컴포넌트 이름으로 컴포넌트를 찾아서
특정 오브젝트에 그 컴포넌트를 붙여준다던가 하는 작업이 필요하다.
보통 System.Type.GetType( string className )을 통해 클래스 타입을 얻을 수 있는데
Unity3D환경에서는 바로 Type이 얻어지질 않아, 어셈블리를 활용해서
Type을 찾아내곤 한다.
예전 프로젝트에서도 애니메이션 툴에서 Key를 박아 넣고,
그 Key와 연동되서 실행 되어야 할 모듈을 클래스 이름과 함수명을
설정해 줄 수 있게 해 주었고,
최근에서 tk2d+Spine환경에서 Spine데이터를 원터치 조작으로
내가 원하는 형태의 프리팹으로 만들어 줄 때,
특정 컴포넌트를 그 프리팹에 붙여주어야 했다.
나중에 또 필요해 질 때 바로 찾을 수 있도록 코드를 정리해 보았다.
감사합니다 선생님
답글삭제