2013-05-13 3 views
1

현재 Unity3D 엔진을 사용하여 게임을 개발하고 있습니다. 주어진 주문의 피해의 척도를 설명 할 때 Curve Editor을 사용할 필요가 있습니다. Unity3D 엔진의 C# 어셈블리에는 원하는 기능이있는 Curve Editor 클래스가 있지만 액세스 할 수 없습니다. Reflection을 통해 해당 유형의 객체를 인스턴스화하려고했습니다. 그러나 문제가 발생했습니다. 이 클래스의 생성자에는 접근 할 수없는 다른 클래스의 배열 인 몇 개의 인수가 필요합니다. 그리고 여기에 문제가 있습니다. 리플렉션을 통해 객체를 만들 수 있지만 그 유형의 객체 배열은 만들 수 없습니다.리플렉션을 통해 액세스 할 수없는 클래스의 배열 인스턴스화

public CurveEditor(Rect rect, CurveWrapper[] curves, bool minimalGUI){...} 

내가 ReflectionCurveWrapper 객체를 생성 할 수 있어요,하지만 전체 배열 : 여기에 생성자입니다. 내가 Object[] 배열을 만들고 몇 CurveWrapper 개체를 넣어려고했지만 반사를 통해 생성자에이 배열을 전달하면 잘못된 인수 예외가 발생합니다.

누구든지 나를 도와 줄 수 있습니까?

답변

6

나는 당신이 Array.CreateInstance을 찾고 있다고 생각합니다.

Type type = ...; // However you get to CurveWrapper 
IList array = Array.CreateInstance(type, 2); 
array[0] = Activator.CreateInstance(type); 
array[1] = Activator.CreateInstance(type); 

내가 CurveEditor 액세스 할 수없는 경우, 그래도 말을, 나는 그것은 매우 반사를 얻을하지 것이다. 지금 작동하더라도 Unity3D 사람들이 나중에 호환되지 않는 변경을하는 것은 전적으로 합리적이라고 봅니다. 비공개 API를 사용하면 매우 취약한 코드가 생성됩니다.

+0

나는 그것이 좋은 생각이 아니라는 것을 알고있다. 우리는 단순한 것을 필요로하며 빨리해야합니다. 새로운 CurveEditor를 개발할 시간이 없습니다. 게다가 일시적입니다. –

+0

@DimitarKrastev : 그렇게 말한다면. 가능한 한 빨리 코드를 삭제하려고 적극 권장합니다. 코드베이스에 너무 오래 머무르고 많은 문제가 남아있는 코드에 대한 정확한 변명을 들었습니다. –

2

당신을위한 관리자에서 곡선 편집기를 (을 제공 렌더링되는 모든, 당신이 필요한 것은 EditorGUI.CurveField처럼 EditorGUI 도우미의 일부의 경우, 다음 가장 Unity3D에서 뭔가 편집기를 작성하는 경우 올바른 유형의 객체를위한 편집기 클래스에서 작업하고 있습니다.)

수동으로 인스턴스화 할 필요는 없습니다.

관련 문제