2017-12-08 10 views
1

私はMapbox SDKとRoadArchitectを使用しており、Mapboxを使用してベクトルリストを生成し、Road Architectのベクトルリストと関数を呼び出すいくつかのゲーム初期化コードを作成しようとしています道路ゲームオブジェクトを生成する。これを行うには、Mapboxが道路を生成するコードを実行する前に作業を終了するまで待つ必要があります。 Mapbox MergedModifierStackをObservedModifierStackとして拡張し、StackCompleteイベントを追加しました。Zenjectを使用してMapbox SDKを配線する

  • 地図(Mapbox AbstractMap) 含ま
    • は(擬似properyパスは、100%正確ではないかもしれません):Map.VectorTileFactory.Factories[m].Visualizer.ObservedModifierStack .Modifiers[n].MyModifier
  • 私の現在のシーンのセットアップは2つの関連するゲームオブジェクトを持っています

  • RoadArchitect GSDRoadSystem

マップ階層内のほとんどのオブジェクトはScriptableObjectであり、すべてがエディタUIのインスペクタを介して追加/設定されています。私はGSDRoadSystemに対して機能を実行しようとしています私のOnStackCompleteイベントハンドラで

public class MyModifier { 
    public MyModifier (MyDataObject myDataObject) { ... } 
} 

public class MyObjectCreator { 
    public MyObjectCreator(MyDataObject myDataObject, ModifierStack modifierStack) { 
     ... 
     modifierStack.StackComplete += OnStackComplete(); 
    } 
} 

。私は「試して」と言うのは、私がすべてを注入する方法を見つけ出すことができなかったからです.Moveboxコードの大部分を書き換えて、すべてを[Inject]で装飾するのではなく、SDKに与えられたことには消極的です依然として重い開発段階にあります。

MyModifierにはMyDataObjectが注入されていないようですが、私はMapbox/Unityがライフサイクルを制御していると推測していますが(インスペクタ/エディタの設定によるものですが) Zenjectを介してその周辺を動かすか、それを使用します。

私の他の選択肢は、Unityメッセージングシステムを使いこなし、メッセージ内のベクトルリストをMyObjectCreatorに渡すことです。このメッセージは、Unityが提供するサービスロケータを介して適切なGSDRoadSystemを見つけます。理想的ではありませんが、これは1回限りのセットアップであり、RoadArchitectの処理は余分な時間やメモリを矮小化してしまいます。それが可能であれば、Zenjectにワイヤリングをさせることができます(おそらく、Mapboxの作り方のためではありません)。

私はDI(Autofac、Ninject、poor-man'sなど)と一緒に働くかなりの背景を持っていますが、これはUnity3dへの私の最初の進出です。私はUnityに物事を曇らせさせる可能性があり、ソリューションは明らかですが、私は今それを見ていません。

答えて

0

Zenjectで作成されず、最初のシーンにないオブジェクトの場合は、手動で手動で注入する必要があります。最初にDiContainerをクラスの1つに注入し、サードパーティのコードで作成されたオブジェクトのDiContainer.InjectまたはDiContainer.InjectGameObjectを呼び出して、これを行うことができます。

+1

ありがとうございます!それで私は問題が私のコードとMapboxに入っています。あるクラスがその依存関係を注入されていない場所では、何か変わったことが起こっていましたが、私はそのクラスをリファクタリングし、それを調べる必要はありませんでした。 –

関連する問題