私は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
- は(擬似properyパスは、100%正確ではないかもしれません):
- RoadArchitect
GSDRoadSystem
私の現在のシーンのセットアップは2つの関連するゲームオブジェクトを持っています
マップ階層内のほとんどのオブジェクトは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に物事を曇らせさせる可能性があり、ソリューションは明らかですが、私は今それを見ていません。
ありがとうございます!それで私は問題が私のコードとMapboxに入っています。あるクラスがその依存関係を注入されていない場所では、何か変わったことが起こっていましたが、私はそのクラスをリファクタリングし、それを調べる必要はありませんでした。 –