1

我目前正在帮助使用 Unity3D 引擎开发游戏。我们需要使用 aCurve Editor来描述给定法术的伤害程度。Unity3D 引擎的 C# 程序集中已经有一个具有所需功能的曲线编辑器类,但无法访问。我试图通过反射实例化该类型的对象。然而我遇到了一个问题。此类的构造函数需要几个参数,其中 1 恰好是另一个不可访问类的数组。这就是问题所在。我能够通过反射构造一个对象,但不能构造该类型的对象数组。这是构造函数:

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

我能够用 构造一个CurveWrapper对象Reflection,但不能构造一个整个数组。我试图创建Object[]数组并将一些CurveWrapper对象放入其中,但是当我通过反射将此数组传递给构造函数时,我得到了无效的参数异常。

有人可以帮我解决这个问题吗?

4

2 回答 2

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 会导致代码非常脆弱。

于 2013-05-13T21:33:16.033 回答
2

如果您正在为 Unity3D 中的某些内容编写编辑器,那么您需要的大部分(如果不是全部)都是EditorGUI帮助程序的一部分,例如EditorGUI.CurveField它将在检查器中为您呈现曲线编辑器(前提是您在编辑器中工作)正确类型的对象的类)。

应该不需要手动实例化一个。

于 2013-05-13T21:34:38.873 回答