1

現在、Unity3D エンジンを使用したゲームの開発を手伝っています。Curve Editor与えられた呪文のダメージのスケールを記述するために a を使用する必要があります。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 に答える