我目前正在使用Unity3D引擎开发游戏。我们需要使用Curve Editor
来描述给定法术伤害的等级。在Unity3D引擎的C#程序集中已经有一个具有所需功能的Curve Editor类,但它无法访问。我尝试通过Reflection实例化该类型的对象。但是我遇到了一个问题。这个类的构造函数需要一些参数1,其中1个恰好是另一个不可访问的类的数组。这就是问题所在。我能够通过反射构造一个对象,但不能构造该类型的对象数组。这是构造函数:
public CurveEditor(Rect rect, CurveWrapper[] curves, bool minimalGUI){...}
我能够使用CurveWrapper
构建Reflection
对象,但不能构建整个数组。我尝试创建Object[]
数组并在其中放入一些CurveWrapper
对象但是当我通过反射将此数组传递给构造函数时,我得到无效的参数异常。
有人能协助我这个吗?
答案 0 :(得分: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会导致代码非常脆弱。
答案 1 :(得分:2)
如果您正在编写Unity3D中的某个编辑器,那么大多数(如果不是全部的话)您将需要的是EditorGUI
帮助器的一部分,如EditorGUI.CurveField
,它将呈现曲线编辑器检查员(如果您在编辑器类中为正确类型的对象工作)。
不需要手动实例化。